Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с ADO / 16 сообщений из 16, страница 1 из 1
08.08.2006, 23:13
    #33906736
shtet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
Прежде чем сюда постить, я конечно же просмотрел форум, но понять что да как не могу.
Передо мной стоит такая задача: Есть 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
09.08.2006, 03:43
    #33906856
blinow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
rs.Source = "select * from " & lstTables.List(lstTables.ListIndex)
...
Рейтинг: 0 / 0
09.08.2006, 07:15
    #33906915
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
Код: 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
09.08.2006, 13:49
    #33907920
shtet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
Спасибо.
Но вот по ходу вопрос возник, обязательно после каждого события закрывать коннект и/или рекордсет? Или можно на протяжении всей программы держать постоянно один коннект? И чем это может быть лучше или хуже?
...
Рейтинг: 0 / 0
09.08.2006, 14:06
    #33907997
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
можно использовать глобальную переменную и при открытии проги вводить данные о коннекте и использовать в программе, но рекордсет должен закрываться поскольку он может использоваться с разными значениями и разной выборкой
я лично в основном обхожусь локальными коннектами и рекорсетами.
...
Рейтинг: 0 / 0
10.08.2006, 22:31
    #33911752
shtet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
Не могу до конца разобраться...
Немного проработал событие клика на ЛистБоксе, хотелось бы чтоб дата-грид можно было бы редактировать, сделал
Код: 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
11.08.2006, 07:00
    #33911970
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
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
11.08.2006, 07:10
    #33911976
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
так попробуй еще
Код: 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
11.08.2006, 07:12
    #33911979
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
псле каждого присваивания Set rs = New ADODB.Recordset
в процедуре, в конце процедуры ставь Set rs=Nothing
...
Рейтинг: 0 / 0
11.08.2006, 13:27
    #33913145
shtet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
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
11.08.2006, 13:44
    #33913192
Nikz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
...
Рейтинг: 0 / 0
11.08.2006, 15:14
    #33913553
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
Должен быть клиентский курсор.
Код: plaintext
1.
cn.CursorLocation = adUseClient
cn.Open
...
Рейтинг: 0 / 0
11.08.2006, 21:22
    #33914337
shtet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с ADO
Спасибо. С этим всем разобрался

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

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

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

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

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

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

Спасибо.

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


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