VBScript 在同一代码中使用两个 For Next
VBScript using two For Next in the same code
我需要在 MySQL table 中插入六个 txt 文件。我想将文件 txt10.txt
插入 table D1,将文件 txt20.txt
插入 table D2,将文件 txt30.txt
插入 table D3,等等.但是所有的文本文件都插入到所有MySQLtables.
我的代码如下:
Arr1 = Array("txt10", "txt20", "txt30", "txt40", "txt50", "txt60")
Arr2 = Array("D1", "D2", "D3", "D4", "D5", "D6")
For K = 0 To UBound(Arr1)
For I = 0 To UBound(Arr2)
SQL = " FLUSH TABLE `tbl_" & Arr2(I) & "_" & Year(Date()) & "`; "
cn.Execute(SQL)
SQL = " LOAD DATA LOCAL INFILE 'D:\nOpen\" & Arr1(K) & ".txt' "
SQL = SQL & " INTO TABLE `tbl_" & Arr2(I) & "_" & Year(Date()) & "` FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
cn.Execute(SQL)
Next
Next
编辑 #1
在你的代码中我有错误:
Array index out of range
这一行:
tbl = Arr2(n)
新代码:
Arr1 = Array("txt10", "txt20", "txt30", "txt40", "txt50", "txt60")
Arr2 = Array("D1", "D2", "D3", "D4", "D5", "D6")
For n=0 To UBound(Arr1)
txt = Arr1(n)
tbl = Arr2(n)
SQL = " FLUSH TABLE `tbl_" & tbl & "_" & Year(Date()) & "`; "
cn.Execute(SQL)
SQL = " LOAD DATA LOCAL INFILE 'D:\nOpen\" & txt & ".txt' "
SQL = SQL & " INTO TABLE `tbl_" & tbl & "_" & Year(Date()) & "` FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
cn.Execute(SQL)
Next
嗯,是的。 运行 两个 For
循环的方式将为您提供两个输入数组元素的所有可能组合。
您真正想要的是使用单个循环并选择每个数组的相应元素:
For n=0 To UBound(Arr1)
txt = Arr1(n)
tbl = Arr2(n)
'now insert txt into tbl
Next
或者,您可以构建文件到表的映射(反之亦然),这样您就不必依赖大小相同的两个数组:
Set map = CreateObject("Scripting.Dictionary")
map.Add "txt10", "D1"
map.Add "txt20", "D2"
...
For Each txt In map.Keys
tbl = map(txt)
'now insert txt into tbl
Next
无论您选择哪种方式,都不要通过字符串连接构建您的 SQL 查询。它会将您的代码打开为 SQL injection. Use prepared statements。
我需要在 MySQL table 中插入六个 txt 文件。我想将文件 txt10.txt
插入 table D1,将文件 txt20.txt
插入 table D2,将文件 txt30.txt
插入 table D3,等等.但是所有的文本文件都插入到所有MySQLtables.
我的代码如下:
Arr1 = Array("txt10", "txt20", "txt30", "txt40", "txt50", "txt60")
Arr2 = Array("D1", "D2", "D3", "D4", "D5", "D6")
For K = 0 To UBound(Arr1)
For I = 0 To UBound(Arr2)
SQL = " FLUSH TABLE `tbl_" & Arr2(I) & "_" & Year(Date()) & "`; "
cn.Execute(SQL)
SQL = " LOAD DATA LOCAL INFILE 'D:\nOpen\" & Arr1(K) & ".txt' "
SQL = SQL & " INTO TABLE `tbl_" & Arr2(I) & "_" & Year(Date()) & "` FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
cn.Execute(SQL)
Next
Next
编辑 #1
在你的代码中我有错误:
Array index out of range
这一行:
tbl = Arr2(n)
新代码:
Arr1 = Array("txt10", "txt20", "txt30", "txt40", "txt50", "txt60")
Arr2 = Array("D1", "D2", "D3", "D4", "D5", "D6")
For n=0 To UBound(Arr1)
txt = Arr1(n)
tbl = Arr2(n)
SQL = " FLUSH TABLE `tbl_" & tbl & "_" & Year(Date()) & "`; "
cn.Execute(SQL)
SQL = " LOAD DATA LOCAL INFILE 'D:\nOpen\" & txt & ".txt' "
SQL = SQL & " INTO TABLE `tbl_" & tbl & "_" & Year(Date()) & "` FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
cn.Execute(SQL)
Next
嗯,是的。 运行 两个 For
循环的方式将为您提供两个输入数组元素的所有可能组合。
您真正想要的是使用单个循环并选择每个数组的相应元素:
For n=0 To UBound(Arr1)
txt = Arr1(n)
tbl = Arr2(n)
'now insert txt into tbl
Next
或者,您可以构建文件到表的映射(反之亦然),这样您就不必依赖大小相同的两个数组:
Set map = CreateObject("Scripting.Dictionary")
map.Add "txt10", "D1"
map.Add "txt20", "D2"
...
For Each txt In map.Keys
tbl = map(txt)
'now insert txt into tbl
Next
无论您选择哪种方式,都不要通过字符串连接构建您的 SQL 查询。它会将您的代码打开为 SQL injection. Use prepared statements。