0

フォームに(ハイパーリンクとして)入力されたハイパーリンクを、VBAを介して移動する必要のあるテーブルに移動したいと考えています。Access2010を使用しています。SQLステートメントエラーが発生し続けます。私はそれがハイパーリンク#の記号と関係があることを知っています。ハイパーリンクがどのように処理されるのかよくわかりません。私はたくさんのフォーラム投稿を読みましたが、それらはすべて異なり(異なる年)、私のニーズを満たすためにそれらの例をハックすることはできないようです。誰かが私が間違っていることを教えてもらえますか?ありがとう

Private Sub SaveReq_Click()
' 
' Saves the current entry to the database
' Into the TABLE 'pr_req_table'
' 

' Open a connection to the database
dim data_base as Database
set data_base = OpenDatabase(CurrentProject.Path & "\test_database.accdb")

' Grab all information from form
' Add information to pr_req_table
data_base.Execute "INSERT INTO pr_req_table " _
    & "(pr_no, pr_date, pr_owner, pr_link, pr_signed) " _
    & "VALUES (" & pr_num.Value & ", #" &  Format(pr_date.Value, "mm/dd/yyyy") & "#, " _
        &  List22.Value & ", " & "Excel Copy #" & elec_copy.Value & ", " & "Signed Copy #" & sign_copy.Value & ");"

' Close Database connection
data_base.Close

End Sub

助けてくれてありがとう!

ネイサン

4

2 に答える 2

3

次のようにパラメータクエリを使用します。

Sub InsertRecord()
Dim data_base As Database
Set data_base = OpenDatabase(CurrentProject.Path & "\test_database.accdb")

' Grab all information from form
' Add information to pr_req_table
Dim qd As QueryDef
Set qd = data_base.CreateQueryDef("")
qd.sql = "INSERT INTO pr_req_table(pr_no, pr_date, pr_owner, pr_link, pr_signed) " & _
    "values([p1],[p2],[p3],[p4],[p5])"
qd.Parameters("p1").Value = pr_num.Value
qd.Parameters("p2").Value = Format(pr_date.Value, "mm/dd/yyyy")
qd.Parameters("p3").Value = List22.Value
qd.Parameters("p4").Value = "Excel Copy #" & elec_copy.Value
qd.Parameters("p5").Value =  "Signed Copy #" & sign_copy.Value 
qd.Execute

End Sub
于 2012-07-09T21:57:09.203 に答える
1

SQLを分離すると、間違いを見つけるのがはるかに簡単になります。

' Grab all information from form
' Add information to pr_req_table
sSQL="INSERT INTO pr_req_table " _
    & "(pr_no, pr_date, pr_owner, pr_link, pr_signed) " _
    & "VALUES (" & pr_num.Value & ", #" _
    &  Format(pr_date.Value, "mm/dd/yyyy") & "#, " _
    &  List22.Value & ", " & "Excel Copy #" & elec_copy.Value & ", " _
    & "Signed Copy #" & sign_copy.Value & ");"
data_base.Execute sSQL

ハイパーリンクが引用符で囲まれておらず、所有者でもないことがわかります。

INSERT INTO pr_req_table (pr_no, pr_date, pr_owner, pr_link, pr_signed) 
VALUES (pr_num, #07/09/2012#, List22, Excel Copy
#elec_copy, Signed Copy #sign_copy);

それで:

sSQL="INSERT INTO pr_req_table " _
    & "(pr_no, pr_date, pr_owner, pr_link, pr_signed) " _
    & "VALUES (" & pr_num.Value & ", #" _
    &  Format(pr_date.Value, "mm/dd/yyyy") & "#, '" _
    &  Replace(List22.Value, "'","''") & "', '" _
    & "Excel Copy #" & elec_copy.Value & '",' " _
    & "Signed Copy #" & sign_copy.Value & "');"

おそらくelec_copyとsign_copyでReplaceを使用する必要があります。

于 2012-07-09T21:50:21.250 に答える