Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с ADO. / 11 сообщений из 11, страница 1 из 1
02.09.2005, 11:38:50
    #33247870
Kroket
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ADO.
Стандартная ситуация. Есть клиентское Windows приложение написанное на VB + ADO + Oracle. Для отображения используется грид, к которому подцеплен рекордсет. Все действия с записями осуществляются при помощи SQL команд.
Т.е используются оракловые SELECT, INSERT, DELETE (а не методы ADO.recordset AddNew, Edit, Delete).

С добавлением и редактированием проблем нет, а вот с DELETE возникает следующая ситуация:

Допустим форма, в ней грид, в котором 100 записей. Указатель записи стоит к примеру на 47 записи. Жмем кнопку "Удалить" и выполнется следующий код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
' Удаляем из таблицы запись, идентификатор которой = иден. текущей записи в гриде (рекордсете)
    strSQL = "DELETE FROM Table WHERE Id = " & adoRs![Id]

    With adoComm
        .ActiveConnection = adoConn
        .CommandType = adCmdText
        .CommandText = strSQL
        .Execute
    End With

' Производим обновление рекордсета    
   adoRs.Requery

После обновления указатель записи в рекорсете встанет на первую запись.
Но правильней было бы чтобы он встал на одну позицию вниз (или вверх) относительно удаленой записи. Пользоваться свойствами Boormark или AbsolutePosition, не правильно, так как после обновления получится уже не тот рекордсет и можно попасть куда-нибудь за пределы набора.

Не поскажете, может есть какой-то алгоритм.
...
Рейтинг: 0 / 0
02.09.2005, 12:21:43
    #33248042
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ADO.
Грид какой используете?
...
Рейтинг: 0 / 0
02.09.2005, 12:26:59
    #33248064
Kroket
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ADO.
VideoSoft VSFlexGrid 7.0 (OLEDB)
...
Рейтинг: 0 / 0
02.09.2005, 12:51:54
    #33248145
PridobreY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ADO.
Используйте .AbsolutePosition
...
Рейтинг: 0 / 0
02.09.2005, 12:56:32
    #33248152
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ADO.
PridobreYИспользуйте .AbsolutePosition
Но только в паре с Order By (в запросе).
...
Рейтинг: 0 / 0
02.09.2005, 12:59:19
    #33248163
PridobreY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ADO.
Melkiades PridobreYИспользуйте .AbsolutePosition
Но только в паре с Order By (в запросе).

Добавлю, что нужно учитывать еще и сортировки recordset-а на клиенте, если таковые имеются.
...
Рейтинг: 0 / 0
02.09.2005, 13:03:04
    #33248176
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ADO.
Вот примерно такая идея
Используется для TDBGrid
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim rsGrid As ADODB.Recordset 'Основа грида
Dim rsGridBeforeDel As ADODB.Recordset 'Клон создается при октрытии rsGrid
Dim idПослеУдаления As Long

Private Sub TDBGrid1_BeforeDelete(Cancel As Integer)
   rsGridBeforeDel.Bookmark = rsGrid.Bookmark
   rsGridBeforeDel.MovePrevious
   If Not rsGridBeforeDel.EOF Then
      idПослеУдаления = rsGridBeforeDel("ID")
   Else
      idПослеУдаления =  0 
   End If
End Sub

Private Sub Удаление()
   rsGrid.Requery
'....
   If idПослеУдаления >  0  Then rsGrid.Find "ID = " & ID

End Sub
...
Рейтинг: 0 / 0
02.09.2005, 13:05:15
    #33248185
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ADO.
PridobreY Melkiades PridobreYИспользуйте .AbsolutePosition
Но только в паре с Order By (в запросе).

Добавлю, что нужно учитывать еще и сортировки recordset-а на клиенте, если таковые имеются.
Ну это само собой. Однако автор написал, что методы рекордсета не используются.
...
Рейтинг: 0 / 0
02.09.2005, 13:09:08
    #33248200
PridobreY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ADO.
Melkiades PridobreY Melkiades PridobreYИспользуйте .AbsolutePosition
Но только в паре с Order By (в запросе).

Добавлю, что нужно учитывать еще и сортировки recordset-а на клиенте, если таковые имеются.
Ну это само собой. Однако автор написал, что методы рекордсета не используются.

И в этом случае, надо использовать отключенный Recordset, и чтения данных из БД после удаления записи вообще производить не надо.
...
Рейтинг: 0 / 0
02.09.2005, 13:12:30
    #33248216
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ADO.
Код: plaintext
If idПослеУдаления >  0  Then rsGrid.Find "ID = " & idПослеУдаления
...
Рейтинг: 0 / 0
02.09.2005, 13:20:33
    #33248245
Kroket
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ADO.
Большое спасибо за предложения
Кстати задал этот же вопрос на форуме Oracle и если не затруднит можете глянуть подходы предлагаемые там
http://www.sql.ru/forum/actualthread.aspx?tid=213506
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с ADO. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]