いつもお世話になっております。
”月間請求書履歴”というフォルダから”データ”という請求書を蓄積しているフォルダに保存させるべきVBAを書いたのですがエラーがでてしまいます。
SQLステートメントが正しくありません。'DELETE','INSERT',
'PROCEDURE','SELECT',または'UPDATE'を使用して下さい
と。
Private Sub コマンド25_Click()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cnn1 As ADODB.Connection
Dim rs1 As ADODB.Recordset
Set cnn = Application.CurrentProject.Connection
Set rs = New ADODB.Recordset
Set cnn1 = Application.CurrentProject.Connection
Set rs1 = New ADODB.Recordset
rs.Open "月間請求書履歴", cnn, adOpenKeyset, adLockOptimistic 'テーブルを開く
rs1.Open "データ", cnn1, adOpenKeyset, adLockOptimistic
rs1.MoveFirst
Do Until rs1.EOF
rs1.AddNew
rs!請求書NO = rs1!請求書NO
rs!請求日 = rs1!請求日
rs!会社名 = rs1!会社名
rs!氏名 = rs1!氏名
rs!現場名 = rs1!現場名
rs!工事名 = rs1!工事名
rs!請求金額 = rs1!請求金額
rs.Update
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
cnn.Close
Set cnn = Nothing
rs1.Close
Set rs1 = Nothing
cnn1.Close
Set cnn1 = Nothing
DoCmd.OpenForm "請求書履歴"
End Sub
10行目のこの時点
rs.Open "月間請求書履歴", cnn, adOpenKeyset, adLockOptimistic
エラーになってしまい進めません。どこでどう間違いが起きているのか正直わかりません
基本的なことなのかもしれませんがよろしくお願いします。
上記のフォルダというのはテーブルのタイプミスですか。
”月間請求書履歴”と"データ"というテーブルがあるということですか。
"月間請求書履歴"というテーブルがないとエラーになりますが、存在しますか。
返信ありがとうございます。
クエリにはあるのですがテーブルに月間請求書履歴というものはありません。
テーブルには請求書と請求書明細があり、クエリで月間請求書履歴になっています。
’データ’テーブルは単独でどこにも属していません
ちょっとやってみようと思います。
"月間請求書履歴"クエリはあるのですね。
ならば、そのクエリは開いてデータをみることができますか。
また"データ"テーブルは存在していますか。
おはようございます
”データ”テーブルはあります。ただ月間請求書履歴のクエリの中には”データ”テーブルの情報はありません。
フィールド名は統一してありますがあくまでも”月間請求書履歴”の情報を”データ”に蓄積がメインだったもので。
”データ”はリレーションシップも設定しておらず本当に単独テーブルです
"月間請求書履歴"クエリをダブルクリックして開いてデータを見ることはできますか。
これについて回答ください。
あと、
s.Open "月間請求書履歴", cnn, adOpenKeyset, adLockOptimistic
でエラーになって進めないということなんですが、
それ以外の部分で間違っている部分がありますので、
コードを下記に修正してください。
回答ありがとうございます。申し訳ありませんが月間請求書履歴をダブルクリックしてデータというのは”データ”テーブル云々の話ではなく、請求書のデータということで合ってますか?ダブルクリックしたら見れます。
上記のコードを試してみます。
エラーメッセージから判断するに "月間請求書履歴" クエリでエラーが発生しているので、このクエリの設計に問題があるか確認するために、まずは、このクエリを開いて正しくデータが表示できるかどうか確かめるのは、最初にすべき確認事項です。
このクエリがパラメータクエリということはないですよね。
はいそうです。
上記のコードを試してみたところ
rs1!請求書NO = rs!請求書NO
で、要求された名前、または序数に対応する項目がコレクションでみつかりませんとでました。
請求書NOがないはずはないのですが・・・
ということは、
rs.Open "月間請求書履歴", cnn, adOpenKeyset, adLockOptimistic
の部分はエラーなく通過したということですね。
一歩前進です。
エラーメッセージから"月間請求書履歴"クエリまたは"データ"テーブルに「請求書NO」フィールドがないということしか考えられません。両方に「請求書NO」フィールドが存在するか、もう一度確認してみてください。「請求書NO」とNOが全角になっていてもだめですよ。
どちらにも「請求書NO」が存在するということなら、「月間請求書履歴」クエリのSQL文をコピーしてここに貼り付けてください。
ご迷惑をおかけします。
月間請求書履歴クエリのSQLです
SELECT 請求書メイン.請求書NO, 請求書メイン.請求日, 宛先マスタ.会社名, 宛先マスタ.部署, 宛先マスタ.氏名, 現場.現場名, 請求書メイン.工事名, 請求書メイン.請求状況CD, 請求書メイン.請求金額
FROM 宛先マスタ INNER JOIN (現場 INNER JOIN 請求書メイン ON 現場.現場ID = 請求書メイン.現場ID) ON 宛先マスタ.宛先ID = 請求書メイン.宛先ID
WHERE (((請求書メイン.請求日)>=#11/1/2019# And (請求書メイン.請求日)<=#11/15/2019#));
呈示されている情報だけから原因を特定するのはむずかしそうです。
さしつかえなければ、右のファイル送信フォームから現状のファイルを送信してもらえますか。
エラーの再現できる最低限のテーブルデータとコードのみのファイルをZIPファイルにして、それを添付して送信してください。
送信ファイルを確認しました。
質問のコードでは、
となってますが、ファイルのコードは、
となっており、クエリ名が異なってます。"月間日報履歴"クエリには"請求書NO"フィールドはないので当然エラーになります。
"月間日報履歴"を"月間請求書履歴"に変更したらエラーなく実行されました。
早速見て頂きありがとうございます。
直してみたらできました。
最初はシンプルなものだったのですが、あれもこれもと機能を足していったら複雑化してました。今回、ファイルを送る時に整理をしてみたら明らかに必要のないファイルも紛れており、見直すいい機会になりました。
本当に助かりました。ありがとうございました。
いつもお世話になっております。以前この件でお世話になったものです。
テーブル、クエリ等の名前が紛らわしくこのファイルをコピペして新しいものを作り直したら以下のようにしたら
また同じところでエラーがでてしまいました。上を見直して色々やってみたのですが
”テーブルを開く”と書いてありますがクエリでも大丈夫ということでしたよね。
すみませんがよろしくお願いします。
変更点
月間請求書履歴→Q_月間請求書履歴
データ→T_seikyu
請求書履歴→F_seikyu
どのコードでエラーになりますか。
おはようございます
下記の部分になります。SQLステートメントが正しくありません。'DELETE,'INSERT',・・・と続きます
「Q_月間請求書履歴」クエリのSQLを提示してもらえますか。
おはようございます。
SELECT T_請求書メイン.請求書NO, T_請求書メイン.請求日, T_宛先マスタ.会社名, T_宛先マスタ.部署, T_宛先マスタ.氏名, T_現場.現場名, T_請求書メイン.工事名, T_請求書メイン.請求金額, T_請求書メイン.請求状況CD, T_請求状況.内容
FROM T_宛先マスタ INNER JOIN (T_請求状況 INNER JOIN (T_現場 INNER JOIN T_請求書メイン ON T_現場.現場ID = T_請求書メイン.現場ID) ON T_請求状況.請求状況CD = T_請求書メイン.請求状況CD) ON T_宛先マスタ.宛先ID = T_請求書メイン.宛先ID
WHERE (((T_請求書メイン.請求日)>=#3/21/2020# And (T_請求書メイン.請求日)<=#4/30/2020#));
に、なります。よろしくお願いします。
「Q_月間請求書履歴」クエリをダブルクリックで開いた場合はエラーなく開けますか。
もし、開けるなら、呈示されている情報だけでは、やはり、原因を特定するのは難しいですね。
前のようにファイルを送信フォームから送ってもらえますか。
おはようございます。ファイル送信致しました。よろしくお願いします。
mikamiさん、まだファイルが届いてません。送信に失敗しているかもしれませんので、もう一度送信してもらえますか。
おはようございます。送信致しました。今回は届いていると思います。よろしくお願いします。
おはようございます。今回は届いていました。
動化確認してみましたら、確かにそのエラーがでますね。クエリも普通に開けるので特に問題はないですね。
ためしに、ADODBの処理をDAOに書き直してみましたら、エラーなく実行できるようになりました。
なぜ、ADODBでは失敗するのかは原因が分かりませんが、DAOの方がAccessのテーブルとは相性がいいと思います。
できました。本当に助かりました。DAOの方も、少し勉強したいと思います。
ありがとうございました。
解決したようなので閉じます。