1

我正在使用一个 vbscript 文件。-> .vbs 扩展文件。将文本片段插入访问数据库。

基本上需要能够放置任何可能插入的字符,而不会引发太多问题。

使用这个:

Function CleanUp (input)
     Dim objRegExp, outputStr
     Set objRegExp = New Regexp
     objRegExp.IgnoreCase = True
     objRegExp.Global = True
     objRegExp.Pattern = "[^\w+]"
     outputStr = objRegExp.Replace(input, " ")
     CleanUp = outputStr
End Function

但是遗漏了很多特殊字符,只是希望能够安全地插入最常用的字符,如括号、百分比、点、逗号等。

你能推荐一个更好的正则表达式吗?

参数查询帮助:我正在使用 .vbs 文件来执行我的插入,基本上是我在系统上执行的一个脚本文件,用于将文本文件填充到访问 .mdb 文件中。

Dim objConn,objRS,strSQL,rsins
Set objConn = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.Recordset")
filenpath = "D:\MDBFILES\"
filenname =  "test.mdb"
objConn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="& filenpath & filenname) 

strSQL = "insert into [mytable] (F1,F2,F3Date,F4,F5Integer,F6Double) values 
('"     &  rdoc  &  "','" &  rtype   & "','" &  CDate(rdate) &  "','"  &      
CleanUp(Trim(arrCells(0))) &  "','"  &  CDbl(arrCells(1)) &  "','"  &    
CDbl(Trim(arrCells(2))) &  "')" 

set rsins = objConn.Execute(strSQL) 

这对我来说非常有效。insert 语句位于循环中,其中的值不断更新。请告知如何创建参数查询并在每次执行时设置参数。

谢谢。

4

2 回答 2

0

清理输入的常见做法是定义有效字符列表并将所有不匹配的字符替换为安全字符。空间通常被认为是安全的。最好改用下划线。

objRegExp.Global  = True
objRegExp.Pattern = "[^a-zA-ZäÄöÖüÜ0-9.,()_-]"
outputStr = objRegExp.Replace(input, "_")
于 2013-03-26T14:53:28.520 回答
0

关于参数查询的一些注意事项:

Set cmd = CreateObject("ADODB.Command")

cmd.ActiveConnection = con ''A connection
cmd.CommandType = 4 ''adCmdStoredProc =4, A stored query will be used

cmd.CommandText = "TheNameOfThequery"
''adInteger=3, adVarWChar = 202
''Parameters are in the same order in which they occur in the query
cmd.Parameters.Append cmd.CreateParameter("@param1", 3, 1, , param1)
cmd.Parameters.Append cmd.CreateParameter("@param2", 202, 1, 50, param2)

''Action query, so execute
cmd.Execute

重新编辑新信息

strSQL = "insert into [mytable] (F1,F2,F3Date,F4,F5Integer,F6Double) "
strSQL = strSQL & " Values (@1,@2,@3,@4,@5,@6)"    

Set cmd = CreateObject("ADODB.Command")

cmd.ActiveConnection = objConn
cmd.CommandType = 1 ''adCmdStoredProc =4, adCmdText=1

cmd.CommandText = strSQL
''adInteger=3, adVarWChar = 202, adDate = 7
''Parameters are in the same order in which they occur in the query
cmd.Parameters.Append cmd.CreateParameter("@1", 202, 1, 50, rdoc)
cmd.Parameters.Append cmd.CreateParameter("@2", 202, 1, 50, rtype)
''Not sure about this, because you have quotes on your date, so it may be text
cmd.Parameters.Append cmd.CreateParameter("@3", 7, 1, , CDate(rdate))
cmd.Parameters.Append cmd.CreateParameter("@4", 202, 1, 50, Trim(arrCells(0)))
cmd.Parameters.Append cmd.CreateParameter("@5", 202, 1, 50, Trim(arrCells(1)))
cmd.Parameters.Append cmd.CreateParameter("@6", 202, 1, 50, Trim(arrCells(2)))

''Action query, so execute
cmd.Execute  recs
''msgbox "updated " & recs

您可以在一个语句中将文本更新到 Access,但您需要一个 schema.ini,因为您有一个非标准分隔符,例如Handle TransferText Errors

顺便说一句,我倾向于使用:

objConn.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="& filenpath & filenname) 

或者

objConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& filenpath & filenname) 
于 2013-03-26T15:15:25.230 回答