プロが教えるわが家の防犯対策術!

アクセスで下記コードを実行すると「実行時エラー3131 FROM 句の構文エラーです」と出てしまいます。
どうすればよいでしょうか?

Private Sub コマンド210_Click()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim vsql As String
Dim i As Variant

Set db = CurrentDb()

i = 見積ID

vsql = "select * from T-見積書 where 見積ID = i"
Set rs = db.OpenRecordset(vsql, dbOpenDynaset)
If MsgBox("削除しますか?", vbYesNo) = vbYes Then
rs.Delete
End If
DoCmd.GoToRecord , , acPrevious

rs.Close
db.Close

End Sub

A 回答 (7件)

FROM句でエラーになるのは前に言った通り、テーブル名に-が在るからですよ。



T-見積書はNG Tの後ろに-が有る。
    • good
    • 0
この回答へのお礼

ありがとうございました!解決しました!

お礼日時:2022/06/15 15:12

>>データ型は短いテキストです


そっか、テキストボックスといってたから、抽出条件は文字型(文字列)なんですね。

文字列の場合には=の後の指定値は'で囲まないとなりません。
ほぼ全てのデータベースで同じです。

T-見積書の-は使え無いから、テーブル名はT見積書だとして
vsql = "select * from T見積書 where 見積ID = i"

vsql = "select * from T見積書 where 見積ID ='" & i & "'"

(iの中身を'で囲う。ABCなら'ABC')
    • good
    • 1

横入り失礼します、こんにちは。



気のせいかもしれまさんが、vsql において、見積IDが文字列なら、シングルクウォートで括るのではないでしょうか?

vsql = "select * from T-見積書 where 見積ID = ’" & i & "’"

DAO は長らく、いや殆ど使った事がないので推測ですが、、
見当違いでしたら申し訳ありません。
    • good
    • 0
この回答へのお礼

ありがとうございます!
試してはみたのですがfrom句の構文エラーがでてしまいます・・・
他にお心当たりあれば教えてください!

お礼日時:2022/06/15 08:34

>>iにはフォーム上に表示されているテキストボックスの見積IDの値を代入しています



ではデータの型が違うのでは?
列名の見積IDが数値型や日付/時刻型とか、全角/半角の違いとか。

手動のクエリで確認出来ませんか
Dim i As Variantを、自分の思っている型宣言にして見るとか・・・。
    • good
    • 0
この回答へのお礼

データ型は短いテキストです
全角半角もスペース含め確認しました
dim i as stringで試してみても変わらず…
手動のクエリの確認方法が分からないのですがどう確認するのでしょうか?

お礼日時:2022/06/15 08:32

データベス列名の見積IDの型が文字なのにクエリで数値を指定してるとか、その逆とかです。



>>i = 見積ID
これは、VBAとしてはどちらも変数です。
見積IDと言う変数の中身をiと言う変数に代入しています。
列名の見積IDでは無いですよ、pg内の変数として扱われます。

このプログラムを見ると、見積IDと言う変数に何もセットしていなくて、イキナリiに中身を代入しています。
    • good
    • 0
この回答へのお礼

言葉足らずでした!
iにはフォーム上に表示されているテキストボックスの見積IDの値を代入しています
i = 見積ID
msgbox i
と実行するとテキストボックスに入力されているデータが呼び出し出来るので代入は出来てるかと思います

お礼日時:2022/06/14 15:36

何か変なんですが・・・・・。


vsqlの中には、SQLが文字列として解決してる値、つまり、変数なんか使え無いのですが・・・・・。

>>vsql = "select * from T-見積書 where 見積ID = i"
そもそも、ここが変では有りませんか?

where句が  "見積ID = i" と言う文字列。
=の後ろは"値"のはず・・、これだと値がiですよ。

vsql = "select * from T-見積書 where 見積ID =" & i

としないと変。
    • good
    • 1
この回答へのお礼

そうなんですか!見積ID=iで該当するデータが無いということなんですね
こちらも修正しました!
ただ、またエラーが出てきてしまいました
抽出条件でデータ型が一致しません。と出てしまいます。
デバッグすると下のコードが黄色く表示されます
Set rs = db.OpenRecordset(vsql, dbOpenDynaset)
見積IDのデータ型が短いテキストだと別の書き方があるのでしょうか?

お礼日時:2022/06/14 08:47

テーブル名やファイル名に"-"ハイフン、スペースは使えません。

    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます!
早速修正したのですが、別のエラーが出てきてしまいました。
パラメーターがすくなすぎます。1を指定してください。というエラーです。
こちらについても教えてもらえると嬉しいです!

お礼日時:2022/06/13 17:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A