Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблемы с ADO при подключении базы данных в Visual Basic 6 / 24 сообщений из 24, страница 1 из 1
26.12.2018, 10:54
    #39753299
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Всем доброго времени суток! Как-то уже обращался к форумчанам с подобной проблемой, но не нашёл отклика. Проблема следующая: в VB6 создаю форму, при помощи которой я вывожу базу данных Access в DataGridView по выбору через CommonDialog. Без использования CommonDialog по аналогичному алгоритму база данных беспроблемно отображается в Grid. При попытке использовать CommonDialog для работы с множетсвами баз возникает ADO-ошибка, связанная с построением SQL-запроса(как я предполагаю).
Ниже приведу код, который я использую(если в нём увидите синтаксические ошибки - не обращайте внимания : я переехал на другой системник и ещё не успел поставить Basic , код набирал в Блокноте). Заранее спасибо за помощь!



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Option Explicit
Dim strRequest As String

Private Sub Combo1_Click()
Dim strRequest As String

strRequest = " Select * FROM " & Combo1.List(Combo1.ListIndex & " "

End Sub


Private Sub Text1_DblClick()

CommonDialog1.ShowOpen
Text1 = CommonDialog1.FileName
Adodc1.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source = " & Text1 & "; Persist Security Info = False;"
Combo1.Enabled = True
Adodc1.RecordSource = strRequest
Adodc1.CommandType = 4
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1.Recordset
DataGrid1.Refresh
End Sub
...
Рейтинг: 0 / 0
26.12.2018, 11:15
    #39753310
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
JamesMilnerНиже приведу кодА можно полюбопытствовать, за каким хреном определены две одноимённые переменные strRequest - уровня модуля и уровня процедуры Combo1_Click? А вы понимаете, что в этой процедуре присвоение будет выполнено в локальную переменную, которая немедленно, в момент завершения метода, будет благополучно похерена?
...
Рейтинг: 0 / 0
26.12.2018, 11:18
    #39753313
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Akina, если это возможно , то поправьте меня. В процедуру Combo я задаю переменную для определения SQL-запроса. А в процедуре модуля переменная нужна, чтобы RecordSource определял, какую именно таблицу нужно выводить в Grid
...
Рейтинг: 0 / 0
26.12.2018, 12:24
    #39753339
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
JamesMilnerВ процедуру Combo я задаю переменную для определения SQL-запроса. А в процедуре модуля переменная нужна, чтобы RecordSource определял, какую именно таблицу нужно выводить в GridМужик! Это две РАЗНЫЕ переменные!!! Одна - грубо говоря, Form1.Module.strRequest, а вторая Form1.Module.Combo1_Click.strRequest. И, ясен пень, присвоение значения в одну с последующим использованием значения другой заканчивается полной хреновнёй.

Удали определение переменной из метода. Оставь только определение на уровне модуля.
...
Рейтинг: 0 / 0
26.12.2018, 13:12
    #39753360
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Akina, убрать-то я уберу, но в коде тогда нет ссылки на то, что должно выгружаться в Grid после нажатия Combo. Как мне быть?
...
Рейтинг: 0 / 0
26.12.2018, 13:31
    #39753385
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Я же сказал убрать "определение переменной". Но не присвоение ей значения.
...
Рейтинг: 0 / 0
26.12.2018, 14:43
    #39753450
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Akina, я убрал, но это к изменениям не привело. Прошёлся в пошаговом режиме и по-прежнему ругается на Refresh. Склоняюсь к тому, что в SQL-запросе загвоздка, но не могу определить какая((
...
Рейтинг: 0 / 0
26.12.2018, 15:38
    #39753476
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
JamesMilnerпо-прежнему ругается на RefreshЭто новая информация. Но бесполезная - ибо рефрешей в коде двое.

JamesMilnerСклоняюсь к тому, что в SQL-запросе загвоздкаНу так выведи его после присвлоения в переменную да посмотри... или нам покажи - тоже вариант.

Кстати, CommandTypeEnum Values полагает, что CommandType = 4 - это adCmdStoredProc. А у тебя содержимое strRequest как-то слабо напоминает имя хранимой процедуры.
...
Рейтинг: 0 / 0
26.12.2018, 15:55
    #39753495
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Akina, на первом Refresh - е сразу выдаёт ошибку. А изменение CommandType ни к чему не приводит толковому : вместо предыдущей ошибки ADO выскакивает типична " Syntax error in From clause"
...
Рейтинг: 0 / 0
26.12.2018, 16:56
    #39753529
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
JamesMilnerвместо предыдущей ошибки ADO выскакивает типична " Syntax error in From clause" Ну так это требуется понимать буквально. Как и просьбу Акина показать нам содержимое strRequest на момент возникновения ошибки
PS: Честно говоря, я не помню, разве в RecordSource нужно передавать не recordset?
...
Рейтинг: 0 / 0
26.12.2018, 16:59
    #39753533
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
adodc - бяка, выбросьте и больше не используйте. делайте на прямом ADODB.Recordset
...
Рейтинг: 0 / 0
26.12.2018, 18:54
    #39753605
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Konst_Oneadodc - бяка, выбросьте и больше не используйте. делайте на прямом ADODB.Recordsetу ТС вообще проблема в коммондиалоге (если ему верить, конечно
)
...
Рейтинг: 0 / 0
27.12.2018, 10:44
    #39753800
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Shocker.Pro, вариант с указанием конкретной таблицы в RecordSource работает исправно
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub Text1_DblClick()
Dim ConStr As String
Me.CommonDialog1.ShowOpen
Me.Text1 = Me.CommonDialog1.FileName
ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Me.Text1 & "; Persist Security Info=False;"
Me.Adodc1.ConnectionString = ConStr
Me.Adodc1.RecordSource = "test"
Me.Adodc1.CommandType = 2
Me.Adodc1.Refresh
Set Me.DataGrid1.DataSource = Me.Adodc1.Recordset
Me.DataGrid1.Refresh
End Sub
...
Рейтинг: 0 / 0
27.12.2018, 11:17
    #39753811
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
JamesMilnerизменение CommandType ни к чему не приводит толковому : вместо предыдущей ошибки ADO выскакивает типична " Syntax error in From clause"
1) На какое именно значение меняете CommandType?
2) Запрос-то собранный покажите, да...
...
Рейтинг: 0 / 0
27.12.2018, 11:23
    #39753818
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
JamesMilner, один из форумчанинов дал мне следующий совет, но я не до конца осознаю, как мне наложить его на свой код:

"При установлении соединения вы указываете только имя файла БД, а в строке работы с ней - имя таблицы. Что мешает сделать в ComboBox или, используя что-то ещё, выбор имени таблицы?
Назначаете строковую переменную. например "Таблица", заносите в неё выбранное имя таблицы и всё. "



Код: vbnet
1.
Таблица As String[SRC VB]


........
conn.Execute "INSERT INTO [Таблица] ............................. "
[/SRC]
...
Рейтинг: 0 / 0
27.12.2018, 11:24
    #39753819
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
[quot JamesMilner]JamesMilner, один из форумчанинов дал мне следующий совет, но я не до конца осознаю, как мне наложить его на свой код:

"При установлении соединения вы указываете только имя файла БД, а в строке работы с ней - имя таблицы. Что мешает сделать в ComboBox или, используя что-то ещё, выбор имени таблицы?
Назначаете строковую переменную. например "Таблица", заносите в неё выбранное имя таблицы и всё. "


Код: vbnet
1.
2.
3.
Таблица As String
........
conn.Execute "INSERT INTO [Таблица] ............................. "
...
Рейтинг: 0 / 0
27.12.2018, 11:28
    #39753823
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
......
...
Рейтинг: 0 / 0
27.12.2018, 16:26
    #39754006
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Konst_One, я попытался переделать код без компонента ADODC (насколько я уловил Ваш посыл) и столкнулся с такими трудностями:
Код: vbnet
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.
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset

Private Sub Command1_Click()
Form1.CommonDialog1.ShowOpen
Form1.Text1 = Form1.CommonDialog1.FileName
Form1.Text1.Visible = False
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Text1 & "; Persist Security Info=False;"
rs.CursorLocation = adUseClient
Call Combo1_Click
rs.Open strRequest, con, adOpenKeyset, adLockPessimistic, adCmdText
Set DataGrid1.DataSource = rs
DataGrid1.Refresh
Set rs = Nothing

End Sub



Private Sub Combo1_Click()
Dim strRequest As String

strRequest = " Select * FROM " & Combo1.List(Combo1.ListIndex)

End Sub
...
Рейтинг: 0 / 0
27.12.2018, 16:27
    #39754008
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Konst_One, вот такая выскочила ошибка
...
Рейтинг: 0 / 0
27.12.2018, 16:39
    #39754018
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Dim rs ...
Dim strRequest as String

Private Sub Command1_Click()
...
End Sub

Private Sub Combo1_Click()
'Dim ... 

strRequest = ....

MsgBox strRequest

End Sub
...
Рейтинг: 0 / 0
28.12.2018, 15:20
    #39754605
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Konst_One, не сообразил, что нужно инициализировать Combo1_Click ? А
Код: vbnet
1.
Dim strRequest As String

я уже перенёс в начало модуля, до меня дошло
...
Рейтинг: 0 / 0
28.12.2018, 16:28
    #39754630
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
Akina, ты был прав, присутствует синтаксическая ошибка в запросе, оттого видимо он не записывается полностью
...
Рейтинг: 0 / 0
02.01.2019, 16:36
    #39755516
JamesMilner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
JamesMilner, догнал, что ошибка не в синтаксисе , а в том , что Combo1.ListIndex присваивается -1 ( не выбрано значение в ComboBox). Но как мне инициализировать Combo, если база не выгружается, я ума не приложу
...
Рейтинг: 0 / 0
09.01.2019, 16:42
    #39757324
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с ADO при подключении базы данных в Visual Basic 6
JamesMilner,

Как совет - научитесь работать с отладчиком в VB6. Да и VBA вообще. Пропадет громадная куча вопросов - сэкономите кучу своего и чужого времени.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблемы с ADO при подключении базы данных в Visual Basic 6 / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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