Страница: 1 |
Страница: 1 |
Вопрос: db1.mdb
Добавлено: 15.04.07 20:30
Автор вопроса: Stars
В базе лежит таблица!
Пример:
--------------------------------------------------
Фамилия ! Имя ! ......
--------------------------------------------------
1 ! 1 ! ......
--------------------------------------------------
2 ! 2 ! ......
--------------------------------------------------
3 ! 3 ! ......
--------------------------------------------------
До подключения её к VB надо както узнать названия колонок ну там (Фамилия,Имя и до и т д.)
Как это можно сделать?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 15.04.07 20:47
Номер ответа: 2
Автор ответа:
Stars
Вопросов: 41
Ответов: 239
Профиль | | #2
Добавлено: 15.04.07 21:02
Вот процедура вызова
Public WithEvents adoPrimaryRS As Recordset
Private Sub Form_Load()
Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=MSDataShapeata PROVIDER=Microsoft.Jet.OLEDB.3.51ata Source=db1.mdb;"
Set adoPrimaryRS = New Recordset
Имя_таблицы_в_базе$ = "База"
Ячейки$ = "Фамилия,Имя,Отчество"
adoPrimaryRS.Open "SHAPE {select " + Ячейки$ + " from " + Имя_таблицы_в_базе$ + "} AS ParentCMD APPEND ({select " + Ячейки$ + " from " + Имя_таблицы_в_базе$ + " } AS ChildCMD RELATE Имя TO Имя ) AS ChildCMD", db, adOpenStatic, adLockOptimistic
Set grdDataGrid.DataSource = adoPrimaryRS
End Sub
Проблема такая:
База может миняться со временем тоесть там может миняться количество колонок а соответственно при подключении базы в VB указываются названия!
типа как я делал (Ячейки$ = "Фамилия,Имя,Отчество") в коде который выше
Номер ответа: 3
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #3
Добавлено: 15.04.07 21:11
А сначала подключится, потом сделать запрос на получение колонок таблицы, а потом опираясь на эти данные сделать уже запрос на получение данных из таблицы?
Номер ответа: 4
Автор ответа:
Stars
Вопросов: 41
Ответов: 239
Профиль | | #4
Добавлено: 15.04.07 21:16
Исходя из моего кода можешь мне помочь? Я в базах мало понимаю.. Плиз
Номер ответа: 5
Автор ответа:
Stars
Вопросов: 41
Ответов: 239
Профиль | | #5
Добавлено: 15.04.07 21:19
Както надо в Ячейки$ программно указать имена столбцов, а как это сделать я не знаю
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 15.04.07 23:00
Чем помочь? Как на ADO узнать название столбцов в таблице? - Могу. С этого и надо было начинать вопрос.
Public Type ColumnInfo
sValue As String
sType As ADOX.KeyTypeEnum
sName As String
End Type
Public Function GetListStolbec(DBPath As String, DBTable As String, _
ReturnArray() As ColumnInfo, Optional Password As String) As Long '+
'Âîçâðàùàåò ìàññèâ ñòîëáöîâ â òàáëèöå
' ñëó÷àå óñïåõà ôóíêöèÿ ïðèíèìàåò çíà÷åíèå 0, èíà÷å íîìåð îøèáêè
Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
On Error GoTo e
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0ata Source=" & DBPath$ & ";" & _
IIf(Trim(Password) <> "", "Jet OLEDB:Database Password=" & Trim$(Password$) & ";", ""
cn.Open
If cn.state = 0 Then cn.Open
Set cmd.ActiveConnection = cn
cmd.CommandText = "[" & DBTable & "]"
cmd.CommandType = adCmdTable
Set rs = cmd.Execute
MyFieldCount = rs.Fields.Count
ReDim ReturnArray(MyFieldCount - 1)
For myIndex = 0 To MyFieldCount - 1
ReturnArray(myIndex).sName = rs.Fields(myIndex).Name
ReturnArray(myIndex).sType = rs.Fields(myIndex).Type
ReturnArray(myIndex).sValue = rs.Fields(myIndex).Value
Next
GetListStolbec = 0
Set rs = Nothing
Set cmd = Nothing
Set cn = Nothing
Exit Function
e:
Select Case Err.Number
Case 94, 3021
Resume Next
End Select
ReDim ReturnArray(0)
Debug.Print Err.Description
GetListStolbec = Err.Number
 escriptionLastError = Err.Description
On Error GoTo 0: On Error Resume Next
Set rs = Nothing
Set cmd = Nothing
Set cn = Nothing
End Function
Номер ответа: 7
Автор ответа:
Stars
Вопросов: 41
Ответов: 239
Профиль | | #7
Добавлено: 16.04.07 11:06
Блин HACKER Спасибо огромное тютильку в тютильку как часы работает!