【发布时间】:2016-01-19 04:38:04
【问题描述】:
VBA 有问题。我已经编写了 sql 代码(300 行),它在 SQL 中完美运行并提供输出:
Line Number Date Employee PN Tax
1 1111 2015-10-15 AP 6225-6 L1
2 1111 2015-10-15 AP 6225-6 L2
3 1111 2015-10-15 (null) CHARGE (null)
4 1111 2015-10-15 AP 55555 L2
我已将那个大 sql 插入到我的 VBA 代码中,但由于某种原因它与我在 ORACLE 中看到的不完全匹配。
我在 VBA 中看到的是这个(不同的第 3 行):
Line Number Date Employee PN Tax
1 1111 2015-10-15 AP 6225-6 L1
2 1111 2015-10-15 AP 6225-6 L2
3 1111 (null) (null) 6225 (null)
4 1111 2015-10-15 AP 55555 L2
由于某种原因,SQL 以某种方式工作,并且在 VBA 中没有提供所需的输出。什么会导致这个问题???不知道,因为我在 VBA 中写了两次 SQL,以防万一我认为是我的错误。
我的 VBA 代码:
Sub Update_table_and_data()
'sql failo suformavimas
Dim con As ADODB.Connection
Dim rec As ADODB.Recordset
Dim cmd As ADODB.Command
Dim sql As String
sql = "Driver={Microsoft ODBC for Oracle}; " & _
"CONNECTSTRING=(DESCRIPTION=" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST= ODB)(PORT=1525))" & _
"(CONNECT_DATA=(SERVICE_NAME=ABTL))); uid=ID; pwd=PWD;"
dat1 = (Sheets("Data").Cells(2, "G"))
dat2 = (Sheets("Data").Cells(2, "H"))
Set con = New ADODB.Connection
Set rec = New ADODB.Recordset
Set cmd = New ADODB.Command
Sheets("Output").Range("A2:AS999999").ClearContents
If ((Not IsEmpty(dat1)) And (Not IsEmpty(dat2))) Then
con.Open sql
Set rec = con.Execute(" SELECT distinct ........
' " WHERE i.date >= to_date('" & dat1 & "','YYYY.MM.DD')
' " AND i.date <= to_date('" & dat2 & "','YYYY.MM.DD' ) ) XX order by XX.number ")
If Not rec.EOF Then
Sheets("Output").Range("A2").CopyFromRecordset rec
rec.Close
Else
MsgBox "PLEASE, CHECK DATE FORMAT!", vbCritical
End If
If CBool(con.State And adStateOpen) Then con.Close
Set rec = Nothing
Set con = Nothing
End Sub
【问题讨论】:
-
请出示您的原始查询...这看起来不像您的 VBA 脚本中的 300 行 SQL 代码。
-
是的...没有原始 SQL 和 VBA 中的实际 SQL 代码,我们无能为力。因为它是你的 SQL,所以 100% 没有意义,它最有可能是这个问题的罪魁祸首。
-
为什么需要看?我的意思是什么会导致问题?在查询中使用带有简单命令的连接:distinct、case、instr、coalesce、nvl、listagg、exists..
-
我的 SQL 是有道理的,否则它在 Oracle 中不起作用
-
另外,您显示的声称的查询输出不可能来自任何一个查询。
标签: sql oracle vba excel recordset