SQL-запрос: несколько таблиц

Программирование на Visual Basic for Applications
Bananovyy
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 03.08.2008 (Вс) 16:04

SQL-запрос: несколько таблиц

Сообщение Bananovyy » 25.03.2013 (Пн) 15:26

Есть файл-access, состоящий из множества таблиц… и файл-excel, из которого формируется sql-запрос для последующей обработки данных… Необходимо по имеющемуся «номеру» [REG] получить интересующую запись.
Проблема в том, что «номер» расположен в таблице не связанной напрямую с необходимыми данными: в моем понимании на входе имеем одно уникальное имя [REG], а на пути к необходимым данным оно пару раз меняется: [REG] > [ID] > [UNIC]…

Изображение


Не знаю каким путем получить следующий результат:
все записи по «номеру» [REG] в таблице [Data] с условием [TYPE=3]


Есть макрос по прямому SQL-запросу:

Код: Выделить всё
X = 3473 ' Получение искомого «номера»


‘ Далее следует запрос необходимой записи через SQL:

Dim CNN As ADODB.Connection
Dim RST As ADODB.Recordset
Dim WSOrig As Worksheet
Dim WSTemp As Worksheet
Dim zSQL As String

Set WSOrig = ActiveSheet
   
' Создание SQL-запроса для извлечения записи из первой таблицы (с «номером»):
zSQL = "SELECT ID, NAME, STATUS, REG FROM Register WHERE REG=" & X

MyConn = ThisWorkbook.Path & Application.PathSeparator & "basa.mdb"

Set CNN = New ADODB.Connection
With CNN
   .Provider = "Microsoft.Jet.OLEDB.4.0"
   .Open MyConn
End With

Set RST = New ADODB.Recordset
RST.CursorLocation = adUseServer
RST.Open Source:=zSQL, _
         ActiveConnection:=CNN, _
         CursorType:=AdForwardOnly, _
         LockType:=adLockOptimistic, _
         Options:=adCmdText
   
' Копирование записей из набора данных на рабочий лист:
Set WSTemp = Worksheets.Add
WSTemp.Select

Range("B2").CopyFromRecordset RST
   
' Закрыть набор данных и соединение:
RST.Close
CNN.Close

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: SQL-запрос: несколько таблиц

Сообщение FireFenix » 31.03.2013 (Вс) 21:19

Код: Выделить всё
SELECT Data.* FROM Register, Period, Data WHERE Register.REG="3473" AND Period.ID=Register.ID AND Data.UNIC=Period.UNIC

Должны получить выбранные строки из Data по условию
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Bananovyy
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 03.08.2008 (Вс) 16:04

Re: SQL-запрос: несколько таблиц

Сообщение Bananovyy » 01.04.2013 (Пн) 14:07

FireFenix писал(а):
Код: Выделить всё
SELECT Data.* FROM Register, Period, Data WHERE Register.REG="3473" AND Period.ID=Register.ID AND Data.UNIC=Period.UNIC

Должны получить выбранные строки из Data по условию


СПАСИБО!

SELECT Data.*
FROM Register, Period, Data
WHERE Register.REG="3473"
AND Period.ID=Register.ID
AND Data.UNIC=Period.UNIC

AND Data.TYPE="3"


Вернуться в VBA

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

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

    TopList