Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Visual Basic Новый топик    Ответить
 Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
Всем доброго времени суток! Как-то уже обращался к форумчанам с подобной проблемой, но не нашёл отклика. Проблема следующая: в VB6 создаю форму, при помощи которой я вывожу базу данных Access в DataGridView по выбору через CommonDialog. Без использования CommonDialog по аналогичному алгоритму база данных беспроблемно отображается в Grid. При попытке использовать CommonDialog для работы с множетсвами баз возникает ADO-ошибка, связанная с построением SQL-запроса(как я предполагаю).
Ниже приведу код, который я использую(если в нём увидите синтаксические ошибки - не обращайте внимания : я переехал на другой системник и ещё не успел поставить Basic , код набирал в Блокноте). Заранее спасибо за помощь!



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


К сообщению приложен файл. Размер - 95Kb
26 дек 18, 10:54    [21773664]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19028
JamesMilner
Ниже приведу код
А можно полюбопытствовать, за каким хреном определены две одноимённые переменные strRequest - уровня модуля и уровня процедуры Combo1_Click? А вы понимаете, что в этой процедуре присвоение будет выполнено в локальную переменную, которая немедленно, в момент завершения метода, будет благополучно похерена?
26 дек 18, 11:15    [21773682]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
Akina, если это возможно , то поправьте меня. В процедуру Combo я задаю переменную для определения SQL-запроса. А в процедуре модуля переменная нужна, чтобы RecordSource определял, какую именно таблицу нужно выводить в Grid
26 дек 18, 11:18    [21773687]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19028
JamesMilner
В процедуру Combo я задаю переменную для определения SQL-запроса. А в процедуре модуля переменная нужна, чтобы RecordSource определял, какую именно таблицу нужно выводить в Grid
Мужик! Это две РАЗНЫЕ переменные!!! Одна - грубо говоря, Form1.Module.strRequest, а вторая Form1.Module.Combo1_Click.strRequest. И, ясен пень, присвоение значения в одну с последующим использованием значения другой заканчивается полной хреновнёй.

Удали определение переменной из метода. Оставь только определение на уровне модуля.
26 дек 18, 12:24    [21773731]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
Akina, убрать-то я уберу, но в коде тогда нет ссылки на то, что должно выгружаться в Grid после нажатия Combo. Как мне быть?
26 дек 18, 13:12    [21773770]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19028
Я же сказал убрать "определение переменной". Но не присвоение ей значения.
26 дек 18, 13:31    [21773799]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
Akina, я убрал, но это к изменениям не привело. Прошёлся в пошаговом режиме и по-прежнему ругается на Refresh. Склоняюсь к тому, что в SQL-запросе загвоздка, но не могу определить какая((
26 дек 18, 14:43    [21773881]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19028
JamesMilner
по-прежнему ругается на Refresh
Это новая информация. Но бесполезная - ибо рефрешей в коде двое.

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

Кстати, CommandTypeEnum Values полагает, что CommandType = 4 - это adCmdStoredProc. А у тебя содержимое strRequest как-то слабо напоминает имя хранимой процедуры.
26 дек 18, 15:38    [21773935]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
Akina, на первом Refresh - е сразу выдаёт ошибку. А изменение CommandType ни к чему не приводит толковому : вместо предыдущей ошибки ADO выскакивает типична " Syntax error in From clause"

К сообщению приложен файл. Размер - 13Kb
26 дек 18, 15:55    [21773961]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20374
JamesMilner
вместо предыдущей ошибки ADO выскакивает типична " Syntax error in From clause"
Ну так это требуется понимать буквально. Как и просьбу Акина показать нам содержимое strRequest на момент возникновения ошибки
+
PS: Честно говоря, я не помню, разве в RecordSource нужно передавать не recordset?
26 дек 18, 16:56    [21774029]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
Konst_One
Member

Откуда:
Сообщений: 11342
adodc - бяка, выбросьте и больше не используйте. делайте на прямом ADODB.Recordset
26 дек 18, 16:59    [21774035]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20374
Konst_One
adodc - бяка, выбросьте и больше не используйте. делайте на прямом ADODB.Recordset
у ТС вообще проблема в коммондиалоге (если ему верить, конечно Картинка с другого сайта.)
26 дек 18, 18:54    [21774167]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
Shocker.Pro, вариант с указанием конкретной таблицы в RecordSource работает исправно
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
27 дек 18, 10:44    [21774568]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19028
JamesMilner
изменение CommandType ни к чему не приводит толковому : вместо предыдущей ошибки ADO выскакивает типична " Syntax error in From clause"

1) На какое именно значение меняете CommandType?
2) Запрос-то собранный покажите, да...
27 дек 18, 11:17    [21774594]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
JamesMilner, один из форумчанинов дал мне следующий совет, но я не до конца осознаю, как мне наложить его на свой код:

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



Таблица As String[SRC VB]

........
conn.Execute "INSERT INTO [Таблица] ............................. "
[/SRC]
27 дек 18, 11:23    [21774602]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
[quot JamesMilner]JamesMilner, один из форумчанинов дал мне следующий совет, но я не до конца осознаю, как мне наложить его на свой код:

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


Таблица As String
........
conn.Execute "INSERT INTO [Таблица] ............................. "
27 дек 18, 11:24    [21774604]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
......
27 дек 18, 11:28    [21774610]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
Konst_One, я попытался переделать код без компонента ADODC (насколько я уловил Ваш посыл) и столкнулся с такими трудностями:
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


К сообщению приложен файл. Размер - 17Kb
27 дек 18, 16:26    [21774958]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
Konst_One, вот такая выскочила ошибка

К сообщению приложен файл. Размер - 6Kb
27 дек 18, 16:27    [21774961]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
Konst_One
Member

Откуда:
Сообщений: 11342
Dim rs ...
Dim strRequest as String

Private Sub Command1_Click()
...
End Sub

Private Sub Combo1_Click()
'Dim ... 

strRequest = ....

MsgBox strRequest

End Sub
27 дек 18, 16:39    [21774979]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
Konst_One, не сообразил, что нужно инициализировать Combo1_Click ? А
Dim strRequest As String
я уже перенёс в начало модуля, до меня дошло
28 дек 18, 15:20    [21775847]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
Akina, ты был прав, присутствует синтаксическая ошибка в запросе, оттого видимо он не записывается полностью

К сообщению приложен файл. Размер - 2Kb
28 дек 18, 16:28    [21775920]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
JamesMilner
Member

Откуда:
Сообщений: 27
JamesMilner, догнал, что ошибка не в синтаксисе , а в том , что Combo1.ListIndex присваивается -1 ( не выбрано значение в ComboBox). Но как мне инициализировать Combo, если база не выгружается, я ума не приложу

К сообщению приложен файл. Размер - 2Kb
2 янв 19, 16:36    [21777611]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с ADO при подключении базы данных в Visual Basic 6  [new]
AndrF
Member

Откуда:
Сообщений: 2068
JamesMilner,

Как совет - научитесь работать с отладчиком в VB6. Да и VBA вообще. Пропадет громадная куча вопросов - сэкономите кучу своего и чужого времени.
9 янв 19, 16:42    [21780793]     Ответить | Цитировать Сообщить модератору
Все форумы / Visual Basic Ответить