• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • ppg-2
  • ベストアンサー率39% (77/193)
回答No.1

>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。

uder1
質問者

お礼

文字列の場合まで教えて頂いてありがとうございます おかげさまで解決しました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

SQL文は文字列です。実行する直前までに、正しく文字列が編集されておればよい。不変の文字列の部分と「可変になる場合が多い条件の文字列」を&でくっつけます。その際条件部分が文字列か数値か注意する。 MsgboxでSQL文を作った変数を表示してみれば、期待通りになっているか判ります。

uder1
質問者

お礼

SQL文は文字列なんですね。知らなかったです。 また今後とも宜しくお願いします。

noname#22222
noname#22222
回答No.3

私ならば、次のような書き方をします。 ×"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

uder1
質問者

お礼

なるほど関数を使用する方法もあるんですね 参考にさせて頂きます。 ありがとうございました

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

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

uder1
質問者

お礼

NOが予約語だとは知りませんでした。 ありがとうございます。また宜しくお願いします。

関連するQ&A