Вопрос № 87643: Здравствуйте.
У меня такой вопрос.
Я написал программу поиска по Базе Данных в одной таблице этой Базы.
т.е.:
Sub Поиск_по_фамилии()
Dim База, Запись As Variant
Dim p As String * 20, i As Integer, признак As Boolean
Set Ба...
Вопрос № 87.643
Здравствуйте.
У меня такой вопрос.
Я написал программу поиска по Базе Данных в одной таблице этой Базы.
т.е.:
Sub Поиск_по_фамилии()
Dim База, Запись As Variant
Dim p As String * 20, i As Integer, признак As Boolean
Set База = CurrentDb
Set Запись = База.OpenRecordSet("Таблица1")
...
Далее идёт собственно программа с вводом данных через InputBox.
Так вот, у меня вопрос: как здесь обратится не к одной таблице, а к нескольким? Тоэе через OpenRecordset или как ещё?
Пожалуйста, помогите! Очень срочно надо!
Отвечает: Залетин Виталий Викторович (мь!тарь)
Здравствуйте, Коблов Сергей Вячеславович!
Вообще-то тут лучше SQL-запросы использовать.
Вот небольшой пример. Пусть у нас будет 2 таблицы:
tbl1:
================
Поле | Тип поля
================
idGroup | Счетчик
name | Текстовый
================
tbl2:
================
Поле | Тип поля
================
idgroup | Числовой (длинное целое)
descr | Текстовый
================
Тут будет отношение между таблицами по полю idtbl1 таблицы tbl2 и id таблицы tbl1 (таблица tbl1 будет выступать вроде как справочником с указанием категорий либо дополнительных ключевых значений (например, коды и названия групп товаров), а таблица tbl2 - сам список товаров с указанием группы, к которой он принадлежит).
Заполните их чем-то. Причем в таблице tbl2 надо в поле idtbl1 указывать только значения, содержащиеся в поле id таблицы tbl1 (код группы товара например).
Теперь код (выведем в текстовый файл все записи о товарах, например):
Sub GetRecs()
Dim cnn As ADODB.Connection 'Объект подключения к БД
Set cnn = CurrentProject.Connection 'Получаем текущее подключение
Dim sql As String 'Наш запрос: например, выбрать все товары с указанием их группы и отсортировать их
sql = "select t1.name AS Группа, t2.descr AS Товар from tbl1 t1, tbl2 t2 where t2.idgroup=t1.idgroup order by t1.name DESC"
Dim r As ADODB.Recordset 'Наш набор записей
Set r = cnn.Execute(sql) 'Получаем его
Dim iFile As Integer
iFile = FreeFile
If Len(Dir$("c:db.txt")) > 0 Then Kill "c:db.txt"
Open "c:db.txt" For Append As #iFile
Dim s1 As String
Dim f As ADODB.Field
While Not r.EOF 'Пока есть записи
s1 = vbNullString
For Each f In r.Fields
s1 = s1 & f.Name & ": " & vbTab & f.Value & vbTab
Next
s1 = s1 & vbCrLf
Print #iFile, s1
r.MoveNext
Wend
Close #iFile
r.Close
cnn.Close
Set r = Nothing
Set cnn = Nothing
Shell "notepad c:db.txt", vbNormalFocus 'Запускаем блокнот, чтобы посмотреть, чего мы там понавыбирали
End Sub
--------- Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (мь!тарь) (статус: Студент)
Ответ отправлен: 19.05.2007, 19:12 Оценка за ответ: 5 Комментарий оценки: Спасибо большое! В sql-запросах я вообще не разбираюсь, теперь будет повод научится