powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с ADO
16 сообщений из 16, страница 1 из 1
Работа с ADO
    #33906736
shtet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прежде чем сюда постить, я конечно же просмотрел форум, но понять что да как не могу.
Передо мной стоит такая задача: Есть sql server 2000, есть VB6 :), в проекте есть listbox (lstTables) и DataGrid (DataGrid_table). Надо, чтоб в listbox-е отображались все таблицы, которые есть в моей базе, а по двойному щелчку по listbox-у в DataGrid-е должна отображаться выбранная таблица из listbox-а. Если с первым заданием я справился, то вот отобразить выбранную таблицу в DataGrid-е ну не как не получается.
Очень прошу о помощи, и если конкретно ткнете носом, где есть нормальные описания по работе с ADO (желательно на русском конечно), то буду очень признателен.
Спасибо.

А вот собственно и сам код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Private cn As ADODB.Connection
Private rs As ADODB.Recordset

Private Sub Form_Load()
Dim cmd As String
Dim sql As String

'создать строку подключения
cmd = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=ABC;Data Source=shtet"

'установить соединение с базой данных
Set cn = New ADODB.Connection
cn.ConnectionString = cmd
cn.Open

Set rs = New ADODB.Recordset

Set rs = cn.OpenSchema(adSchemaTables)

'заполняем lstTables таблицами
Do Until rs.EOF
'если не системная таблица то добавляем
  If Left(rs!TABLE_TYPE,  6 ) <> "SYSTEM" Then
    lstTables.AddItem rs!TABLE_NAME
  End If
  rs.MoveNext
Loop

End Sub

Private Sub Form_Unload(Cancel As Integer)
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing

End Sub

Private Sub lstTables_Click()

''''''rs.Source = "select * from " & lstTables
'что тут писать, ну не как не пойму

End Sub
...
Рейтинг: 0 / 0
Работа с ADO
    #33906856
blinow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rs.Source = "select * from " & lstTables.List(lstTables.ListIndex)
...
Рейтинг: 0 / 0
Работа с ADO
    #33906915
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub lstTables_Click()
Dim cmd As String
Dim sql As String

cmd = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=ABC;Data Source=shtet"
Set cn = New ADODB.Connection
cn.ConnectionString = cmd
cn.Open

Set rs = New ADODB.Recordset
sql = "select * from " & lstTables.Text

rs.Open sql, cn, adOpenStatic

Set DataGrid1.DataSurce = rs
DataGrid1.ReBind
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
end sub
...
Рейтинг: 0 / 0
Работа с ADO
    #33907920
shtet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Но вот по ходу вопрос возник, обязательно после каждого события закрывать коннект и/или рекордсет? Или можно на протяжении всей программы держать постоянно один коннект? И чем это может быть лучше или хуже?
...
Рейтинг: 0 / 0
Работа с ADO
    #33907997
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно использовать глобальную переменную и при открытии проги вводить данные о коннекте и использовать в программе, но рекордсет должен закрываться поскольку он может использоваться с разными значениями и разной выборкой
я лично в основном обхожусь локальными коннектами и рекорсетами.
...
Рейтинг: 0 / 0
Работа с ADO
    #33911752
shtet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу до конца разобраться...
Немного проработал событие клика на ЛистБоксе, хотелось бы чтоб дата-грид можно было бы редактировать, сделал
Код: plaintext
rs.Open sql, cn, adOpenStatic, adLockPessimistic
, но почему при переходе на некоторые таблицы вылетает ошибка:
Код: plaintext
1.
2.
Run-time error '3219'
Operation is not allowed in this context
И останавливается на
Код: plaintext
rs.Close


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub lstTables_Click()
Dim cmd As String
Dim sql As String
sql = "select * from " & lstTables.Text
rs.Close 'вот тут на некоторых таблицах вываливается
rs.Open sql, cn, adOpenStatic, adLockPessimistic

Set DataGrid_table.DataSource = rs
DataGrid_table.ReBind

End Sub

Спасибо за помощь
...
Рейтинг: 0 / 0
Работа с ADO
    #33911970
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shtetНе могу до конца разобраться...
Немного проработал событие клика на ЛистБоксе, хотелось бы чтоб дата-грид можно было бы редактировать, сделал
Код: plaintext
rs.Open sql, cn, adOpenStatic, adLockPessimistic
, но почему при переходе на некоторые таблицы вылетает ошибка:
Код: plaintext
1.
2.
Run-time error '3219'
Operation is not allowed in this context
И останавливается на
Код: plaintext
rs.Close


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub lstTables_Click()
Dim cmd As String
Dim sql As String
sql = "select * from " & lstTables.Text
rs.Close 'вот тут на некоторых таблицах вываливается
rs.Open sql, cn, adOpenStatic, adLockPessimistic

Set DataGrid_table.DataSource = rs
DataGrid_table.ReBind

End Sub

Спасибо за помощь
замени rs.Close на
Код: plaintext
If rs.State=adStateOpen then rs.Close
...
Рейтинг: 0 / 0
Работа с ADO
    #33911976
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так попробуй еще
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub lstTables_Click()
Dim cmd As String
Dim sql As String
sql = "select * from " & lstTables.Text

If rs.State=adStateOpen then rs.Close ' на всякий случай

Set rs=Nothing
Set rs = New ADODB.Recordset '

rs.Open sql, cn, adOpenStatic, adLockPessimistic

Set DataGrid_table.DataSource = rs
DataGrid_table.ReBind

End Sub
...
Рейтинг: 0 / 0
Работа с ADO
    #33911979
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
псле каждого присваивания Set rs = New ADODB.Recordset
в процедуре, в конце процедуры ставь Set rs=Nothing
...
Рейтинг: 0 / 0
Работа с ADO
    #33913145
shtet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TIKOтак попробуй еще
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub lstTables_Click()
Dim cmd As String
Dim sql As String
sql = "select * from " & lstTables.Text

If rs.State=adStateOpen then rs.Close ' на всякий случай

Set rs=Nothing
Set rs = New ADODB.Recordset '

rs.Open sql, cn, adOpenStatic, adLockPessimistic

Set DataGrid_table.DataSource = rs
DataGrid_table.ReBind

End Sub


Блие теперь сыпется с ошибкой
Код: plaintext
1.
Run-time error '7004':
The rowset is not bookmarkable
на
Код: plaintext
Set DataGrid_table.DataSource = rs
Что-то никак не могу догнать... :(
...
Рейтинг: 0 / 0
Работа с ADO
    #33913192
Nikz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа с ADO
    #33913553
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должен быть клиентский курсор.
Код: plaintext
1.
cn.CursorLocation = adUseClient
cn.Open
...
Рейтинг: 0 / 0
Работа с ADO
    #33914337
shtet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. С этим всем разобрался

Я конечно извиняюсь за назойливость, но помогите еще новичку :)

на форму кинул 3 кнопки, cmdAdd (добавить строку), cmdDelete (удалить выбранную строку) и cmdSave (сохранить изменения)
Т.е., кликнув, на cmdAdd, создалась бы в датагриде новая, пустая строка, кликнув на cmdDelete удалялась бы выбранная строка, а при cmdSave сохранялись бы все данные из измененного датагрида. Не могу разобраться как рекордсету присваивать измененную таблицу.

Еще раз спасибо всем огромное.
...
Рейтинг: 0 / 0
Работа с ADO
    #33914458
blinow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты у Грида рекордсет не закрывай, уГрида поставь AlowNew, AlowEdiot, AlowDelete, свойства точно не помню, но примерно так, и работай с рекордсетом, rst.AddNew, и в Гриде добавиться новая запись
...
Рейтинг: 0 / 0
Работа с ADO
    #33914791
shtet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Угу. Спасибо. И с этим я разобрался. Осталось только доработать код на обработки различных ошибок.

Вот только задачу мне еще усложнили. Надо добавить текст-бокс, и вписанное там слово или словосочетание должно искаться по всей базе, и в той таблице, где это слово или словосочетание есть, то надо добавить в отдельный лист-бокс.
Нашел код, как искать в конкретной таблице и в конкретном столбике, а как сразу по всей базе? Перебирать все таблицы и все столбцы вручную?

Спасибо.
...
Рейтинг: 0 / 0
Работа с ADO
    #33915321
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shtetУгу. Спасибо. И с этим я разобрался. Осталось только доработать код на обработки различных ошибок.

Вот только задачу мне еще усложнили. Надо добавить текст-бокс, и вписанное там слово или словосочетание должно искаться по всей базе, и в той таблице, где это слово или словосочетание есть, то надо добавить в отдельный лист-бокс.
Нашел код, как искать в конкретной таблице и в конкретном столбике, а как сразу по всей базе? Перебирать все таблицы и все столбцы вручную?

Спасибо.

Для этого лучше использовать MSHFlexGrid по всем колонкам
и искать ни в базе в таблице MSHFlexGrid-а
но искать по разным таблицам не получится, только если крутить запрос по всем таблицам и потом уже по гриду
странная у тебя задача!!!
как минимум добейся что б посик опеделенные таблицы выбирались вручную
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с ADO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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