【发布时间】:2014-04-04 03:30:35
【问题描述】:
我在一张 Excel 表格中构建了数百个 SQL 查询,每个查询都放在一个 1 列的单元格中。我要做的是从 excel 中运行这些 SQL 语句。
只是想知道是否有人知道将我的所有 SQL 转换为 VBA 字符串的方法,以便我可以遍历所有行以运行每个查询。
我发现这是我想要做的,但有没有办法可以更改代码,以便它可以读取 excel 单元格而不是表单?
http://allenbrowne.com/ser-71.html
谢谢
编辑:这是我尝试转换的示例 SQL
SELECT
TT.TEST_TABLE_ID,
TT.TEST_TABLE_NO,
TT.MEMBERSHIP_NUMBER,
TT.TEST_TABLE_TYPE,
from TEST_TABLE TT
我认为因为每个 Select 都在自己的行中,所以在转换时会导致问题。
编辑 #2:这是我执行 SQL 的代码
Sub GetData()
Dim Conn As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim cmd As New ADODB.Command
Dim sqlText As String
Dim Row As Long
Dim Findex As Long
Dim Data As Worksheet
Dim X As Long
Set Data = Sheets("Results")
Data.Select
Cells.ClearContents
Conn.Open "PROVIDER=ORAOLEDB.ORACLE;DATA SOURCE=ORCL;USER ID=user;PASSWORD=password"
cmd.ActiveConnection = Conn
cmd.CommandType = adCmdText
'sqlText = How to reference Valid SQL cells
cmd.CommandText = sqlText
Set RS = cmd.Execute
For X = 1 To RS.Fields.Count
Data.Cells(1, X) = RS.Fields(X - 1).Name
Next
If RS.RecordCount < Rows.Count Then
Data.Range("A2").CopyFromRecordset RS
Else
Do While Not RS.EOF
Row = Row + 1
For Findex = 0 To RS.Fields.Count - 1
If Row >= Rows.Count - 50 Then
Exit For
End If
Data.Cells(Row + 1, Findex + 1) = RS.Fields(Findex).Value
Next Findex
RS.MoveNext
Loop
End If
Cells.EntireColumn.AutoFit
End Sub
在 SQL 文本部分,我希望能够引用我拥有的 SQL 语句列。我想我需要转换它,但你们是对的,如果引用它,我可以使用你的代码 Brad。
我尝试将您的代码 brad 合并到我的 'sqlText = How to reference Valid SQL cells 所在的位置,但没有成功
【问题讨论】:
-
你已经在开头和结尾加上引号了吗?
-
不,我没有,但如果它更容易我可以添加
-
如果您可以从其中一个单元格中复制 SQL 并在查询工具中运行它,则无需任何额外的格式化,只需从单元格中读取 SQL 并直接在您的 VBA 中执行即可.如果您认为需要一些额外的格式,您应该准确解释它是什么,并提供示例。您发布的链接是关于在 VBA 源代码中包含 SQL,而不仅仅是执行该 SQL 所必需的。从您当前的帖子中,@Brad 的回答已经提供了解决方案。
-
是的,抱歉,这就是我不清楚的地方。我有一个有效的 SQL 语句,我正在尝试在需要格式更改的 VBA 源代码中执行此 SQL 语句
-
是的,我希望将结果返回给我。没有插入/更新/删除它更多的是验证以查看数据是否存在,因此只需选择