Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: Проблема с Disconnected RecordSet Добавлено: 03.07.03 20:32  

Автор вопроса:  RotesByte | Web-сайт: koch.onestop.net
Привет всем!
Братцы, выручайте! весь день провоевал, и без толку... :(

Делаю запрос к SQL-Server, полученный RecordSet отсоединяю, базу закрываю. Этот висящий в памяти RecordSet фильтрую и показываю юзеру. Тут всё нормально.

Проблема: при попытке добавить запись в этот RecordSet новая запись добавляется, НО в одни поля я могу внести значения, а в другие - нет, выпадает ошибка: "Multiple-step poeration generated errors. Check each status value".

Доходит до маразма: в поле, все значения которого только слово "Server" не могу добавить запись со значением "Local"

Вот как я получаю и отсоединяю RecordSet:
Public Sub readAllForCmbProject(rsAllForCmbProject As ADODB.Recordset)
Dim conn As ADODB.Connection
Dim strQuery As String

Call openDBConn(conn, rsAllForCmbProject)

Projektnummer
strQuery = "SELECT Pid, Projektnummer, Projektname, " & _
"CONVERT(varchar, Projektnummer) AS PN, " & _
"'Server' AS Source " & _
"FROM Projekte " & _
"WHERE (Status = 'aktiv') " & _
"ORDER BY Source, Projektnummer"
rsAllForCmbProject.CursorLocation = adUseClient
rsAllForCmbProject.Open strQuery, conn, adOpenDynamic, adLockOptimistic

Set rsAllForCmbProject.ActiveConnection = Nothing
conn.Close
End Sub

Так пытаюсь добавлять новую запись:
For intCounter = 0 To UBound(projectsListLocal()) - 1
rsAllForCmbProject.AddNew
rsAllForCmbProject("Pid").Value = projectsListLocal(intCounter).pid
rsAllForCmbProject("Projektnummer").Value = projectsListLocal(intCounter).pnummer
rsAllForCmbProject("Projektname").Value = projectsListLocal(intCounter).pname
rsAllForCmbProject("PN").Value = CStr(projectsListLocal(intCounter).pnummer)
rsAllForCmbProject("Source").Value = "Local"
rsAllForCmbProject.Update
Next intCounter
End If

Поля "Projektnummer" и "Projektname" - все OK
Остальные поля - ругаются

Почему одни поля - без проблем, а другие упёрлись?
Как решить проблемку?

Где же эти грабли?

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 MAGNUS



Вопросов: 12
Ответов: 430
 Профиль | | #1 Добавлено: 03.07.03 23:05

Дык, это... Ты его обратно то подсоедени.. :). Куда он обновлять будет?

  Set rsAllForCmbProject.ActiveConnection =conn

rsAllForCmbProject.Update

И еще одна весЧ.

adLockBatchOptimistic.  т.к. рекордсет у тебя отсоеденен, то обновлять он все должен пачкой, вот и ставь вышеозначенный лок. Да и открывать его в этом случае надо статическим.

Вот так короче:

 rsAllForCmbProject.Open strQuery, conn, adOpenStatic, adLockBatchOptimistic

Если что -пиши.

Ответить

Номер ответа: 2
Автор ответа:
 RotesByte



Вопросов: 11
Ответов: 69
 Web-сайт: koch.onestop.net
 Профиль | | #2
Добавлено: 04.07.03 00:34

Здравствуй, MAGNUS

Ответ интересный, завтра с утра попробую.

НО:

1. Почему два поля работают нормально? Для новых записей эти поля заполняются без проблем. И почему остальные три при внесении значений в новую запись ругаются?

По-моему, уж если работать, то всем, а если ругаться - так тоже всем...   :)

2. На счет обновления: Ошибка-то лезет до команды Update, на

rsAllForCmbProject("Pid").Value = projectsListLocal(intCounter).pid      rsAllForCmbProject("PN").Value = CStr(projectsListLocal(intCounter).pnummer)
rsAllForCmbProject("Source").Value = "Local"

3. Если я из кода создаю аналогичный RecordSet и, например добавляю записи и заполняю поля, то всё работает нормально. Так у меня было с начала: Запрос --> получаю "присоединенный" RecordSet --> генерирую "отсоединённый" со структурой как у первого --> копирую данные из "присоединенного" в "отсоединённый" --> отключаюсь от базы, "присоединенный" исчезает, зато остаётся второй.

4. Может, что-то с самими полями? Что означает "Check each status value"? Тоесть, перевести я могу, то это значит?

Ответить

Номер ответа: 3
Автор ответа:
 MAGNUS



Вопросов: 12
Ответов: 430
 Профиль | | #3 Добавлено: 04.07.03 01:12

Действительно странно... Кинь мне его, я гляну. База в акцесе? Ее тоже давай. Только необходимое.

Эта ошибка может быть вызвана очень многимни причинами.

Например попытка заполнения поля имеющего автономер, или же если это поле у тебя связано с другим из другой таблицы(constraint) и ты пытаешься внести недопустимое значение. Автоматически оно внесено не будет а база пытается сохранить Iоntegrity,  вот и ругается.

Проверь эти вещи .

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам