|
Формирование SQL запроса в Excel
|
|||
---|---|---|---|
#18+
Написал такой код: With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _ "ODBC;DSN=MyDataBase;Description=MyDataBase;UID=User1;APP=Microsoft Office 2003;WSID=C6131;DATABASE=MyDataBase;Trusted_Connecti" _ ), Array("on=Yes")), Destination:=Range("AU15")) .CommandText = Array( _ "SELECT TABLE1.ITEMNUMBER, TABLE1.ITEMNAME" & Chr(13) & "" & Chr(10) & "FROM MyDataBase.SUPERVISOR.TABLE1 TABLE1" & Chr(13) & "" & Chr(10) & "WHERE (TABLE1.ITEMNUMBER='111')" _ ) .Name = "Запрос" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .Refresh BackgroundQuery:=False End With Всё это работает, но если мне нужно подставлять данные в "WHERE (TABLE1.ITEMNUMBER='111')", вместо '111', то здесь возникает проблема. Как это сделать?? Пробовал делать типа: A=cells(1, 1).Text или A=cells(1, 1).Value, а затем "WHERE (TABLE1.ITEMNUMBER=А)" - получаю синтаксическую ошибку SQL. Может кто поможет советом ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2004, 07:11 |
|
Формирование SQL запроса в Excel
|
|||
---|---|---|---|
#18+
"WHERE (TABLE1.ITEMNUMBER=А)" - может быть, стоит подставить кавычки вокруг А? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2004, 09:27 |
|
Формирование SQL запроса в Excel
|
|||
---|---|---|---|
#18+
Если переменную взять в кавычки, то это уже не переменная, а текстовое значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2004, 09:38 |
|
Формирование SQL запроса в Excel
|
|||
---|---|---|---|
#18+
"WHERE (TABLE1.ITEMNUMBER= '" & А & "')" должно работать ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2004, 09:47 |
|
Формирование SQL запроса в Excel
|
|||
---|---|---|---|
#18+
Rb"WHERE (TABLE1.ITEMNUMBER= '" & А & "')" должно работать Спасибо, брат! Только у меня теперь другая проблема. Данные заносяться в объединённую ячейку и ячейка распадаеться на несколько простых, т.е. нарушаеться форматирование. Как можно этого избежать? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2004, 10:38 |
|
Формирование SQL запроса в Excel
|
|||
---|---|---|---|
#18+
Можно и сделать, но нарушаеться ещё куча форматов и размеров. А это не есть гут ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2004, 10:53 |
|
Формирование SQL запроса в Excel
|
|||
---|---|---|---|
#18+
У тебя запрос возвращает несколько полей, а тебе их надо вывести в одно поле. Если так, то тебе в самом запросе небходимо преобразовать несколько полей в одно ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2004, 11:44 |
|
Формирование SQL запроса в Excel
|
|||
---|---|---|---|
#18+
Я сначала тоже мучал Query потом query потом он так меня стал бесить и я перешел на ADO : Во кусок кода обращения к dbf базе: Как вариант проще и гораздо меньше гемороя ' ADO-соединение Public Sub ADO_SQL1(NewName1 As String, SQL_str As String) ' Директория где находятся dbf файлы def_dir = ActiveWorkbook.Path Set ds = Workbooks("zt.xls").Sheets("Итого") 'ds.Range("A2:E5000").ClearContents ' создаем объект соединения Set cnn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") ' свойства соединения для работы с DBF cnn.Provider = "Microsoft.Jet.OLEDB.4.0" cnn.Properties("Extended Properties") = "dBase IV" cnn.Properties("Data Source") = def_dir & "\" 'Set cnn = New ADODB.Connection 'cnn.Open "Driver={Microsoft dBASE Driver (*.dbf)};uid=;pwd=;database=" & def_dir & "\" & NewName1 & ";" ' открываем соединение cnn.Open 'Открываем набор записей rs.ActiveConnection = cnn rs.Source = SQL_str 'rs.Source = "Select dt, ad, k, ak, smr from " & NewName1 & " WHERE (DT>='300000' and DT<='329999')ORDER BY dt,ad" 'rs.Source = "Select dt, ad, k, Sum(smr) from " & NewName1 & " GROUP BY dt,ad,k HAVING(DT>='300000' and DT<='329999') ORDER BY dt,ad" rs.Open k = 2 While Not IsEmpty(ds.Cells(k, 1).Value) k = k + 1 Wend If rs.EOF Then 'MsgBox "Файл не содержит записей !" Else ' Крутим наборчик ds.Activate i = k rs.MoveFirst While Not rs.EOF If rs.Fields("dt") <> "" Then ds.Cells(i, 1).Value = rs.Fields("dt") ds.Cells(i, 2).Value = rs.Fields("ad") ds.Cells(i, 3).Value = rs.Fields("k") ' Флаг служит для для уменьшения параметров запроса - только для основного и вспомог. произ-в. If flag_group = 1 Then ds.Cells(i, 4).Value = rs.Fields("ak") End If If flag_group = 1 Then ds.Cells(i, 5).Value = rs.Fields("np") End If If flag_group = 1 Then ds.Cells(i, 7).Value = CDate(rs.Fields("dod")) End If If flag_group = 1 Then ds.Cells(i, 6).Value = rs.Fields(6).Value Else 'ds.Cells(i, 6).Value = rs.Fields("smr") ds.Cells(i, 6).Value = rs.Fields(3).Value End If End If Application.StatusBar = "Обрабатывается " & i & " строка dbf файла" DoEvents i = i + 1 rs.MoveNext Wend End If ' Закрываем набор rs.Close Set rs = Nothing ' Закрываем соединение cnn.Close End Sub Scio me nihil scire <<Jojo®>> ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2004, 11:50 |
|
Формирование SQL запроса в Excel
|
|||
---|---|---|---|
#18+
RbУ тебя запрос возвращает несколько полей, а тебе их надо вывести в одно поле. Если так, то тебе в самом запросе небходимо преобразовать несколько полей в одно Я преодразовал запрос, и тепрь он мне выдаёт только одно значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2004, 12:02 |
|
|
start [/forum/topic.php?fid=61&fpage=376&tid=2186717]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 176ms |
0 / 0 |