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

1つのステートメントでテキストをAccessに更新できますが、 Handle TransferTextエラーなどの非標準の区切り文字があるため、schema.iniが必要になります。

余談ですが、私は以下を使用する傾向があります。

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 に答える