Знаю два пути - а нужен третий, состоящий из обоих...

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
tarrac
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 14.06.2005 (Вт) 16:58

Знаю два пути - а нужен третий, состоящий из обоих...

Сообщение tarrac » 14.06.2005 (Вт) 17:40

Что касается подключения и работой с базами данных на скока понял - есть 2 пути ADO:
    через компонент ADO настраивать его в инспекторе объектов и подключатся.
    через код
    Код: Выделить всё
    Public cn As ADODB.Connection
    Public rs As New ADODB.Recordset
    Public strConnect As String

    Function ADODB_ConnectedJet() As Boolean
    On Error GoTo er_error
    Dim strcon As String: strcon = App.Path & "\Data\Date.mdb"
        Set cn = New ADODB.Connection
        'cn.Provider = "Microsoft.Jet.OLEDB.4.0"
        cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strcon & ";Mode=ReadWrite|Share Deny None;Persist Security Info=False"
        cn.Open
        Set rs.ActiveConnection = cn
       
        ADODB_ConnectedJet = True
            Exit Function
           
    er_error:
        ADODB_ConnectedJet = False
    End Function


В первом случае прекрасно DBGrid связывается с базой данных и отображает значения при связке через DataSourse
Во втором - очень удобно работать с базой данных через SQL запросы типа
Код: Выделить всё

rs.Sourse ="Select * from table"
rs.open

Однако присвоение
Код: Выделить всё
DBgrid.DataSourse = rs.Sourse

выдает ошибку, а rs.DataSourse по понятным причинам пустое

Вопрос: как с помошью rs в DBGrid запизать таблицу, полученную через rs.Sourse
Нужны SQL-запровы и их результат надо отображать в DBGrid...
К тому же к базе данных необходимо подключаться из кода!!! Как тут написано
Явное указание наследственности отменяет полиморфизм виртуальных функций

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 14.06.2005 (Вт) 22:16

Код: Выделить всё
rs.Source ="Select * from table"
rs.Open
Set DBgrid.DataSource = rs
rs.close

tarrac
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 14.06.2005 (Вт) 16:58

Сообщение tarrac » 15.06.2005 (Ср) 8:49

Спасибо - все заработало.
Если кому надо - вот по-моему удобный код:
Код: Выделить всё

Public cn As ADODB.Connection
Public rs As New ADODB.Recordset

Function ADODB_ConnectedJet() As Boolean
On Error GoTo er_errorо
'Строка подключения - в принципе можно формировать из вне, а сюда только пересылать
Dim strcon As String: strcon = App.Path & "\Data\Date.mdb"
  Set cn = New ADODB.Connection
  cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" & strcon & ";Mode=ReadWrite|Share Deny None;Persist Security Info=False"
    cn.Open
    cn.CursorLocation = adUseClient
    Set rs.ActiveConnection = cn
    ADODB_ConnectedJet = True
        Exit Function
er_error:
    ADODB_ConnectedJet = False
End Function

Function connect(strConnect As String, i As Byte) As Boolean
On Error GoTo er_error
rs.Source = strConnect
rs.Open
If i = 1 Then rs.MoveFirst
    connect = True
    Exit Function
er_error:
Dim a As Double: a = Err.Number
Select Case a
    Case 3705
        rs.Close
        Resume
    Case 3021
        MsgBox "Отсутствуют записи в таблице"
        connect = False
    Case Else
        MsgBox Err.Description & strConnect
        Stop
End Select
End Function

Тут при вызове функции, если надо сразу на первую строку встать - просто вторым параметром передать "1"...
Ну а первый параметр - собственно SQL запрос )) Можно удалять, вставлять, обновлять (тогда не недо вставать на первую запись (второй параметр не "1") а можно и просто подключится, встав на первую запись в таблице.
При ошибке - выдаст сообщение с ее поямнением !!!
Явное указание наследственности отменяет полиморфизм виртуальных функций

tarrac
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 14.06.2005 (Вт) 16:58

Сообщение tarrac » 15.06.2005 (Ср) 13:47

Вот программа, которой можно отправлять SQL запрос, а она возвратит ADODB.Recordset который можно присвоить Grid'уследующим простым присваиванием:
Код: Выделить всё
Set dg.DataSource = fSourse("SELECT * FROM main")

Сама функция вот:
Код: Выделить всё

Function fSourse(strConnect As String) As ADODB.Recordset
On Error GoTo er_error
Dim rsTemp As ADODB.Recordset
Set rsTemp = rs
rsTemp.Source = strConnect
rsTemp.Open
Set fSourse = rsTemp
    Exit Function
er_error:
Dim a As Double: a = Err.Number
Select Case a
    Case 3705
        rsTemp.Close
        Resume
    Case Else
        MsgBox Err.Description & " " & strConnect
End Select
End Function
Явное указание наследственности отменяет полиморфизм виртуальных функций


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList