- ベストアンサー
SQLの条件に変数を
はじめまして。よろしくお願いします select文のwhere条件にidを指定したいのですがうまくいきません。 べつに変数を使用しなくてもよいのですが良い方法がありましたらご教授下さい Private Sub コマンド8_Click() Dim adoCON As ADODB.Connection Dim adoRS As ADODB.Recordset Dim no As interger no=me.id Set adoCON = Application.CurrentProject.Connection Set adoRS=adoCON.Execute("select varcodeno from varcode_tbl where id=no")strName = adoRS!varcodeno adoRS.Close adoCON.Close Set adoRS = Nothing Set adoCON = Nothing Me.jancode.Value = strName End Sub
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>Set adoRS=adoCON.Execute("select varcodeno from varcode_tbl where id=no") idのタイプが数値だと Set adoRS=adoCON.Execute("select varcodeno from varcode_tbl where id=" & no) 文字列だと Set adoRS=adoCON.Execute("select varcodeno from varcode_tbl where id='" & no & "'") にしたらOK。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
SQL文は文字列です。実行する直前までに、正しく文字列が編集されておればよい。不変の文字列の部分と「可変になる場合が多い条件の文字列」を&でくっつけます。その際条件部分が文字列か数値か注意する。 MsgboxでSQL文を作った変数を表示してみれば、期待通りになっているか判ります。
お礼
SQL文は文字列なんですね。知らなかったです。 また今後とも宜しくお願いします。
私ならば、次のような書き方をします。 ×"id=Me.id" ○"id=" & Me.id は、単なる初歩的なミスですので二度としないと思いますよ! Private Sub コマンド8_Click() Me.jancode.Value = DBLookup("varcodeno", "varcode_tbl", "id=" & Me.id) End Sub Public Function DBLookup(ByVal strField As String, _ ByVal strTable As String, _ Optional ByVal strWhere As String = "", _ Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim strQuerySQL As String Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset strQuerySQL = "SELECT " & strField & " FROM " & strTable If Len(strWhere) > 0 Then strQuerySQL = strQuerySQL & " WHERE " & strWhere End If With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = Nz(DataValue, ReturnValue) Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function
お礼
なるほど関数を使用する方法もあるんですね 参考にさせて頂きます。 ありがとうございました
- nicotinism
- ベストアンサー率70% (1019/1452)
Set adoRS=adoCON.Execute("select varcodeno from varcode_tbl where id = " & no) とか、 変数id を使わなくとも Set adoRS=adoCON.Execute("select varcodeno from varcode_tbl where id = " & me!id) では? あと、no は Access の予約語なので変更したほうが宜しいかと。 http://support.microsoft.com/default.aspx?scid=kb;ja;286335
お礼
NOが予約語だとは知りませんでした。 ありがとうございます。また宜しくお願いします。
お礼
文字列の場合まで教えて頂いてありがとうございます おかげさまで解決しました。