powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с ADO.
11 сообщений из 11, страница 1 из 1
Проблема с ADO.
    #33247870
Kroket
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартная ситуация. Есть клиентское 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
Проблема с ADO.
    #33248042
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грид какой используете?
...
Рейтинг: 0 / 0
Проблема с ADO.
    #33248064
Kroket
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VideoSoft VSFlexGrid 7.0 (OLEDB)
...
Рейтинг: 0 / 0
Проблема с ADO.
    #33248145
PridobreY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте .AbsolutePosition
...
Рейтинг: 0 / 0
Проблема с ADO.
    #33248152
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PridobreYИспользуйте .AbsolutePosition
Но только в паре с Order By (в запросе).
...
Рейтинг: 0 / 0
Проблема с ADO.
    #33248163
PridobreY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkiades PridobreYИспользуйте .AbsolutePosition
Но только в паре с Order By (в запросе).

Добавлю, что нужно учитывать еще и сортировки recordset-а на клиенте, если таковые имеются.
...
Рейтинг: 0 / 0
Проблема с ADO.
    #33248176
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот примерно такая идея
Используется для 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
Проблема с ADO.
    #33248185
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PridobreY Melkiades PridobreYИспользуйте .AbsolutePosition
Но только в паре с Order By (в запросе).

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

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

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


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