VBSCript - 访问 - 清除文本转义正则表达式

时间:2013-03-26 14:37:07

标签: regex ms-access vbscript

使用的是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语句位于循环中,其中值不断更新。 请告知如何创建参数查询并在每次执行时设置参数。

感谢。

2 个答案:

答案 0 :(得分:0)

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

objRegExp.Global  = True
objRegExp.Pattern = "[^a-zA-ZäÄöÖüÜ0-9.,()_-]"
outputStr = objRegExp.Replace(input, "_")

答案 1 :(得分: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)