Вопросы по работе с БД в Visual Basic
Вопросы буду постить сюда.
Итак, первое:
Код:
Dim db As Database
Dim qdef As QueryDef
Dim td As TableDef
Set db = OpenDatabase(dbname)
For Each td In db.TableDefs
List1.AddItem td.Name
Next td
Тем самым мы получаем список табличек в базе. Вопрос, а как можно получить подобным образом имена столбцов каждой таблицы?
Тем самым мы получаем список табличек в базе. Вопрос, а как можно получить подобным образом имена столбцов каждой таблицы?
Dim dbname As String
Dim db As Database
Dim qdef As QueryDef
Dim td As TableDef
Dim fd As DAO.Field
Set db = OpenDatabase(dbname)
For Each td In db.TableDefs
List1.AddItem td.Name
For q = 1 To td.Fields.Count
List2.AddItem td.Fields(i).Name
Next q
Next td
For q = 1 To td.Fields.Count
List2.AddItem td.Fields(i).Name
Next q
Цикл по q, добавляем td.Fields(i)?
Поэтому добавляется только первый элемент, но если меняю на q, при компиляции выдается ошибка "Item not found in this collection"
[QUOTE]Originally posted by Ashtray
For q = 1 To td.Fields.Count
List2.AddItem td.Fields(i).Name
Next q
Цикл по q, добавляем td.Fields(i)?
Поэтому добавляется только первый элемент, но если меняю на q, при компиляции выдается ошибка "Item not found in this collection"
List2.AddItem td.Fields(i - 1).Name
Вот так работает. Почему кстати?
List2.AddItem td.Fields(i - 1).Name
Вот так работает. Почему кстати?
Ты имел ввиду
List2.AddItem td.Fields(q - 1).Name
Правильно. Т.к. первый элемент нулевой, следовательно q-й элемент выходит за пределы.
For q = 1 To td.Fields.Count
List2.AddItem td.Fields(i).Name
Next q
Обычно пишут For q = 0 To td.Fields.Count - 1.
А как получить все имеющиеся значения какого-либо поля? То есть столбец: в нем, скажем, три фамилии. Как лучше всего получить их список.
Dim rst As Recordset
Set rst = db.OpenRecordset("select ...")
If rst.EOF = False Then
rst.MoveFirst
Do While rst.EOF = False
Debug.Print rst.Fields(td.Fields(i).Name).Value
rst.MoveNext
Loop
End If