运行 来自 VBScript 中 Excel Sheet 的多个查询
Running Multiple Queries from an Excel Sheet in VBScript
各位脚本家们大家好,我目前正在使用 VBScript 从 excel sheet 和 运行 SQL 服务器上的查询中提取查询参数(Sybase ASE) excel sheet.
中的每一行
目前我有成功拉取参数的代码运行是第一行,但是当我开始下一行时,由于"Missing Object"查询失败,但我已经尝试过保持 ADO 连接打开并重新运行查询记录集,以及为 excel sheet 和 运行 中的每一行重新创建连接记录集。我目前的代码如下:
Dim MyConnection, MyRecordSet, MyExcel, MyExcelBook, MyExcelSheet
Dim ConnectionString, Parameter1, Parameter2, SQL, I
ConnectionString = "Driver=ODBC Driver;UserID=Admin;Password=Pass;"
Set MyExcel = CreateObject("Excel.Application")
Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls")
Set MyExcelSheet = MyExcelBook.WorkSheets(2)
Set MyConnection = CreateObject("ADODB.Connection")
Set MyRecordSet = CreateObject("ADODB.RecordSet")
MyConnection.Open ConnectionString
I = 2
Do while MyExcelSheet.Cells(I,2).Value <> ""
Parameter1 = MyExcelSheet.Cells(I,6).Value
Parameter2 = MyExcelSheet.Cells(I,7).Value
SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";"
MyRecordSet.Open SQL, MyConnection
'Save RecordSet to another Excel sheet'
MyRecordSet.Close
I = I + 1
loop
MyConnection.Close
Set MyConnection = Nothing
有没有什么方法可以 运行 在同一个数据库连接上进行另一个查询而不 运行 进入
Object Required
错误?
编辑后,还是一样的错误。
Dim MyConnection, MyExcel, MyExcelBook, MyExcelSheet
Dim ConnectionString, Parameter1, Parameter2, SQL, I
ConnectionString = "Driver=ODBC Driver;UserID=Admin;Password=Pass;"
Set MyExcel = CreateObject("Excel.Application")
Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls")
Set MyExcelSheet = MyExcelBook.WorkSheets(2)
Set MyConnection = CreateObject("ADODB.Connection")
MyConnection.Open ConnectionString
I = 2
Do while MyExcelSheet.Cells(I,2).Value <> ""
Parameter1 = MyExcelSheet.Cells(I,6).Value
Parameter2 = MyExcelSheet.Cells(I,7).Value
SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";"
Dim MyRecordSet
Set MyRecordSet = CreateObject("ADODB.RecordSet")
MyRecordSet.Open SQL, MyConnection
'Save RecordSet to another Excel sheet'
MyRecordSet.Close
I = I + 1
loop
MyConnection.Close
Set MyConnection = Nothing
不需要为每个查询打开和关闭连接对象。试试这样:
Dim MyConnection, MyExcel, MyExcelBook, MyExcelSheet
Dim ConnectionString, Parameter1, Parameter2, SQL, I
ConnectionString = "Driver=ODBC Driver;UserID=Admin;Password=Pass;"
Set MyExcel = CreateObject("Excel.Application")
Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls")
Set MyExcelSheet = MyExcelBook.WorkSheets(2)
I = 2
Set MyConnection = CreateObject("ADODB.Connection")
MyConnection.Open ConnectionString
Do while MyExcelSheet.Cells(I,2) <> ""
Parameter1 = MyExcelSheet.Cells(I,6).Value
Parameter2 = MyExcelSheet.Cells(I,7).Value
SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";"
Dim MyRecordSet
Set MyRecordSet = CreateObject("ADODB.RecordSet")
MyRecordSet.Open SQL, MyConnection
'Save RecordSet to another Excel sheet'
MyRecordSet.Close
Set MyRecordSet = Nothing
I = I + 1
Loop
MyConnection.Close
Set MyConnection = Nothing
所以在对不同的想法进行多次测试之后,我终于得到了可以工作的代码。关闭 MyRecordSet 时发生此问题。状态返回到 0,当您尝试 re-open MyRecordSet 时,它会因对象损坏而失败。重新连接然后 re-opening MyRecordSet 导致了同样的错误。所以这是完成的有效代码编辑。
Dim MyConnection, MyRecordSet, MyExcel, MyExcelBook, MyExcelSheet
Dim ConnectionString, Parameter1, Parameter2, SQL, I
ConnectionString = "Driver=Adaptive Server Enterprise;UserID=Admin;Password=Pass;Pooling=False"
Set MyExcel = CreateObject("Excel.Application")
Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls")
Set MyExcelSheet = MyExcelBook.WorkSheets(2)
I = 2
Do while MyExcelSheet.Cells(I,2).Value <> ""
Parameter1 = MyExcelSheet.Cells(I,6).Value
Parameter2 = MyExcelSheet.Cells(I,7).Value
SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";"
Set MyConnection = CreateObject("ADODB.Connection")
MyConnection.Open ConnectionString
Set MyRecordSet = CreateObject("ADODB.RecordSet")
MyRecordSet.Open SQL, MyConnection
'Save RecordSet to another Excel sheet'
Set MyRecordSet = Nothing
Set MyConnection = Nothing
I = I + 1
loop
现在如果你问我它是否特定于数据库,我不知道。但是此代码适用于使用 Adaptive Server Enterprise 驱动程序,并且我确实使用了 LankyMart 的建议来关闭连接池。我知道只设置 'object = nothing' 而不首先关闭连接违反了标准编码实践,但它有效。感谢那些提供帮助的人。
各位脚本家们大家好,我目前正在使用 VBScript 从 excel sheet 和 运行 SQL 服务器上的查询中提取查询参数(Sybase ASE) excel sheet.
中的每一行目前我有成功拉取参数的代码运行是第一行,但是当我开始下一行时,由于"Missing Object"查询失败,但我已经尝试过保持 ADO 连接打开并重新运行查询记录集,以及为 excel sheet 和 运行 中的每一行重新创建连接记录集。我目前的代码如下:
Dim MyConnection, MyRecordSet, MyExcel, MyExcelBook, MyExcelSheet
Dim ConnectionString, Parameter1, Parameter2, SQL, I
ConnectionString = "Driver=ODBC Driver;UserID=Admin;Password=Pass;"
Set MyExcel = CreateObject("Excel.Application")
Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls")
Set MyExcelSheet = MyExcelBook.WorkSheets(2)
Set MyConnection = CreateObject("ADODB.Connection")
Set MyRecordSet = CreateObject("ADODB.RecordSet")
MyConnection.Open ConnectionString
I = 2
Do while MyExcelSheet.Cells(I,2).Value <> ""
Parameter1 = MyExcelSheet.Cells(I,6).Value
Parameter2 = MyExcelSheet.Cells(I,7).Value
SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";"
MyRecordSet.Open SQL, MyConnection
'Save RecordSet to another Excel sheet'
MyRecordSet.Close
I = I + 1
loop
MyConnection.Close
Set MyConnection = Nothing
有没有什么方法可以 运行 在同一个数据库连接上进行另一个查询而不 运行 进入
Object Required
错误?
编辑
Dim MyConnection, MyExcel, MyExcelBook, MyExcelSheet
Dim ConnectionString, Parameter1, Parameter2, SQL, I
ConnectionString = "Driver=ODBC Driver;UserID=Admin;Password=Pass;"
Set MyExcel = CreateObject("Excel.Application")
Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls")
Set MyExcelSheet = MyExcelBook.WorkSheets(2)
Set MyConnection = CreateObject("ADODB.Connection")
MyConnection.Open ConnectionString
I = 2
Do while MyExcelSheet.Cells(I,2).Value <> ""
Parameter1 = MyExcelSheet.Cells(I,6).Value
Parameter2 = MyExcelSheet.Cells(I,7).Value
SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";"
Dim MyRecordSet
Set MyRecordSet = CreateObject("ADODB.RecordSet")
MyRecordSet.Open SQL, MyConnection
'Save RecordSet to another Excel sheet'
MyRecordSet.Close
I = I + 1
loop
MyConnection.Close
Set MyConnection = Nothing
不需要为每个查询打开和关闭连接对象。试试这样:
Dim MyConnection, MyExcel, MyExcelBook, MyExcelSheet
Dim ConnectionString, Parameter1, Parameter2, SQL, I
ConnectionString = "Driver=ODBC Driver;UserID=Admin;Password=Pass;"
Set MyExcel = CreateObject("Excel.Application")
Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls")
Set MyExcelSheet = MyExcelBook.WorkSheets(2)
I = 2
Set MyConnection = CreateObject("ADODB.Connection")
MyConnection.Open ConnectionString
Do while MyExcelSheet.Cells(I,2) <> ""
Parameter1 = MyExcelSheet.Cells(I,6).Value
Parameter2 = MyExcelSheet.Cells(I,7).Value
SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";"
Dim MyRecordSet
Set MyRecordSet = CreateObject("ADODB.RecordSet")
MyRecordSet.Open SQL, MyConnection
'Save RecordSet to another Excel sheet'
MyRecordSet.Close
Set MyRecordSet = Nothing
I = I + 1
Loop
MyConnection.Close
Set MyConnection = Nothing
所以在对不同的想法进行多次测试之后,我终于得到了可以工作的代码。关闭 MyRecordSet 时发生此问题。状态返回到 0,当您尝试 re-open MyRecordSet 时,它会因对象损坏而失败。重新连接然后 re-opening MyRecordSet 导致了同样的错误。所以这是完成的有效代码编辑。
Dim MyConnection, MyRecordSet, MyExcel, MyExcelBook, MyExcelSheet
Dim ConnectionString, Parameter1, Parameter2, SQL, I
ConnectionString = "Driver=Adaptive Server Enterprise;UserID=Admin;Password=Pass;Pooling=False"
Set MyExcel = CreateObject("Excel.Application")
Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls")
Set MyExcelSheet = MyExcelBook.WorkSheets(2)
I = 2
Do while MyExcelSheet.Cells(I,2).Value <> ""
Parameter1 = MyExcelSheet.Cells(I,6).Value
Parameter2 = MyExcelSheet.Cells(I,7).Value
SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";"
Set MyConnection = CreateObject("ADODB.Connection")
MyConnection.Open ConnectionString
Set MyRecordSet = CreateObject("ADODB.RecordSet")
MyRecordSet.Open SQL, MyConnection
'Save RecordSet to another Excel sheet'
Set MyRecordSet = Nothing
Set MyConnection = Nothing
I = I + 1
loop
现在如果你问我它是否特定于数据库,我不知道。但是此代码适用于使用 Adaptive Server Enterprise 驱动程序,并且我确实使用了 LankyMart 的建议来关闭连接池。我知道只设置 'object = nothing' 而不首先关闭连接违反了标准编码实践,但它有效。感谢那些提供帮助的人。