web-dev-qa-db-ja.com

Accessのクエリエディターで複数のSQLステートメントを実行するにはどうすればよいですか?

Accessデータベースで実行するいくつかのSQLステートメントを含むテキストファイルがあります。これはAccessのクエリエディターで可能になるはずだと思いました。それで、私はこのエディタに行き、ステートメントを貼り付けます:

_insert into aFewYears (yr) values ('2000')
insert into aFewYears (yr) values ('2001')
insert into aFewYears (yr) values ('2002')
insert into aFewYears (yr) values ('2003')
_

(赤い感嘆符を押すことで)それらを実行しようとすると、
Missing semicolon (;) at end of SQL statement.

これは、エディターが複数のステートメントの実行を許可することを示すものと見なすことができます。そこで、ステートメントを変更し、そのようなセミコロンを最後に追加します。

_insert into aFewYears (yr) values ('2000');
insert into aFewYears (yr) values ('2001');
insert into aFewYears (yr) values ('2002');
insert into aFewYears (yr) values ('2003');
_

その後、私は
_Characters found after end of SQL statement._
これはおそらく、複数のステートメントを実行できないことを示すものとみなすことができます。

それでは、質問:クエリエディターで複数のステートメントを実行することは可能ですか、それとも何らかの方法でAccessのファイル内のSQLステートメントをバッチ実行することは可能ですか?.

ありがとう/ルネ

編集挿入ステートメントは例として使用されましたが、それらはすべて同じテーブルに移動し、そのようなことは明らかに何らかの形で1つのステートメントを使用して解決できるため、完全ではないことがわかります組合か何か。私が解決しようとしている私の実際のケースでは、ファイルには挿入ステートメントだけでなく、テーブルステートメントを作成し、異なる基になるテーブルを持つステートメントを挿入します。だから私は、あらゆる種類のSQLステートメントでファイルを実行できる、私の愛するSQL * Plus for Oracleのようなものがあることを望みました(そして今も望んでいます)。

36

ファイルを読み込むビットコードを簡単に作成できます。行ごとに1つのsqlステートメントを想定するか、;を想定することができます。

したがって、次のようなテキストファイルがあると仮定します。

insert into tblTest (t1) values ('2000');

update tbltest set t1 = '2222'
       where id = 5;


insert into tblTest (t1,t2,t3) 
       values ('2001','2002','2003');

上記のテキストファイルでは、1行以上にSQLステートメントを自由に含めることができます。

上記のスクリプトの読み取りと実行に使用できるコードは次のとおりです。

Sub SqlScripts()

   Dim vSql       As Variant
   Dim vSqls      As Variant
   Dim strSql     As String
   Dim intF       As Integer

   intF = FreeFile()
   Open "c:\sql.txt" For Input As #intF
   strSql = input(LOF(intF), #intF)
   Close intF
   vSql = Split(strSql, ";")

   On Error Resume Next
   For Each vSqls In vSql
      CurrentDb.Execute vSqls
   Next

End Sub

次のような1つのステートメントが機能しない場合は、いくつかのエラーメッセージの配置を拡張できます。

if err.number <> 0 then
   debug.print "sql err" & err.Descripiton & "-->" vSqls
end dif

とにかく、上記のsplit()と文字列の読み取りにより、SQLが1行以上になるようになります...

29

残念ながら、従来の意味では、Accessの1つの名前付きクエリで複数のSQLステートメントを実行することはできません。

複数のクエリを作成し、それらをVBA(DoCmd.OpenQueryメモリが提供される場合)。

必要に応じて、UNIONを使用して一連の文字列を連結することもできます。

15
phoebus

このようなマクロを作成します

オプション比較データベース

サブa()

DoCmd.RunSQL "DELETE * from TABLENAME where CONDITIONS"

DoCmd.RunSQL "DELETE * from TABLENAME where CONDITIONS"

サブ終了

0
masoud Cheragee

一番上の行にフィールド名を付けてXLSXファイルを作成するだけです。手動で作成するか、Mockarooを使用して作成します。 Excel(またはCSV)にエクスポートしてから、新しいデータソースを使用してAccessにインポートします->ファイルから

私見は、Accessでそれを行うための最良かつ最もパフォーマンスの高い方法です。

0

"すべての種類のSQLステートメントを含むファイルを実行できる、私の大好きなSQL * Plus for Oracleのようなものがあることを望みました(そして今でも望みます)。

ファイルをインポートしてその中のSQLステートメントを実行できる単純なプログラムを探している場合は、 DBWConsole (フリーウェア)をご覧ください。これを使用して、DDLスクリプト(テーブルスキーマ)とアクションクエリを処理しました。データセットを返さないため、SELECTクエリには役立ちません。接頭辞が付いた単一行コメントをサポートしますが、/ * * /でラップされた複数行コメントはサポートしません。コマンドラインパラメータをサポートしています。

enter image description here

Oracle SQL DeveloperやSSMS for Accessなどの対話型UIが必要な場合は、Matthew Lockの WinSQL への参照がお勧めです。

0
Ben

WinSQL のようなクエリをAccessに入力するには、サードパーティのプログラムを使用する方が良いかもしれません。メモリから WinSQLは複数のクエリをサポートします バッチ機能を介して。

最終的に、ODBC経由でAccessに一括INSERTを実行するためのプログラムをPerlで作成する方が簡単であることがわかりました。ただし、vbscriptまたはODBC=をサポートする任意の言語を使用できます。

その後、好きなことを実行し、インポートを処理する独自の複雑なロジックを作成できます。

0
Matthew Lock