it-swarm.dev

Wie führe ich mehrere SQL-Anweisungen in Access 'Query Editor aus?

Ich habe eine Textdatei mit ein paar SQL-Anweisungen, die ich auf einer Access-Datenbank ausführen möchte. Ich dachte, das sollte mit Access 'Query Editor möglich sein. Also gehe ich in diesen Editor und füge die Anweisungen ein:

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

Beim Versuch, sie auszuführen (durch Drücken des roten Ausrufezeichens), erhalte ich eine
Missing semicolon (;) at end of SQL statement.

Dies könnte als Hinweis darauf verstanden werden, dass der Editor die Ausführung mehrerer Anweisungen zulässt. Also ändere ich die Anweisungen und füge am Ende ein solches Semikolon an:

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

Dann bekomme ich eine
Characters found after end of SQL statement.
, was wahrscheinlich ein Hinweis darauf sein könnte, dass es nicht möglich ist, mehrere Anweisungen auszuführen.

Ok, also die Frage: Ist es möglich, mehrere Anweisungen im Abfrageeditor auszuführen, oder ist es möglich, SQL-Anweisungen in einer Datei in/on/against Access stapelweise auszuführen.

Danke/Rene

edit Die insert-Anweisungen wurden als Beispiel verwendet und ich stelle fest, dass sie nicht perfekt sind, weil sie alle zur gleichen Tabelle gehören und so etwas offensichtlich mit einer Anweisung mit einem gelöst werden kann Gewerkschaft oder so. In meinem eigentlichen Fall, den ich zu lösen versuche, enthält die Datei nicht nur Einfügeanweisungen, sondern erstellt auch Tabellenanweisungen und fügt Anweisungen mit verschiedenen zugrunde liegenden Tabellen ein. Daher habe ich gehofft (und immer noch gehofft), dass es so etwas wie mein geliebtes SQL * Plus für Oracle gibt, das eine Datei mit allen Arten von SQL-Anweisungen ausführen kann.

36

Sie können leicht einen Bitcode schreiben, der eine Datei einliest. Sie können entweder eine SQL-Anweisung pro Zeile oder die;

Angenommen, Sie haben eine Textdatei wie:

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

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


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

Beachten Sie, dass in der obigen Textdatei SQL-Anweisungen in mehr als einer Zeile enthalten sind.

der Code, den Sie zum Lesen und Ausführen des obigen Skripts verwenden können, lautet:

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

Sie könnten beim Platzieren einer Fehlermeldung msg erweitern, wenn die eine Anweisung nicht funktioniert, wie z

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

Unabhängig davon lässt das obige split () - und string-Lesen zu, dass sich Ihre SQL auf mehr als einer Zeile befindet.

28

AFAIK können Sie leider nicht mehrere SQL-Anweisungen unter einer benannten Abfrage in Access im herkömmlichen Sinne ausführen. 

Sie können mehrere Abfragen machen und diese dann mit VBA zusammenfügen (DoCmd.OpenQuery, wenn der Speicher dient).

Sie können mit UNION auch eine Reihe von Dingen zusammenfassen, wenn Sie möchten.

15
phoebus

erstellen Sie ein Makro wie dieses

Option Compare Database

Unter a ()

DoCmd.RunSQL "DELETE * von TABLENAME wo BEDINGUNGEN"

DoCmd.RunSQL "DELETE * von TABLENAME wo BEDINGUNGEN"

End Sub

0
masoud Cheragee

Erstellen Sie einfach eine XLSX-Datei mit Feldnamen in der obersten Zeile . Erstellen Sie sie manuell oder mithilfe von Mockaroo . Exportieren Sie sie nach Excel (oder CSV) und importieren Sie sie anschließend in Access mit Neuer Datenquelle -> Aus Datei

IMHO ist dies der beste und performanteste Weg, um es in Access zu tun.

0

"Ich habe gehofft (und hoffe immer noch), dass es so etwas wie mein geliebtes SQL * Plus für Oracle gibt, das eine Datei mit allen Arten von SQL-Anweisungen ausführen kann."

Wenn Sie nach einem einfachen Programm suchen, das eine Datei importieren und die darin enthaltenen SQL-Anweisungen ausführen kann, sehen Sie sich die Datei DBWConsole (Freeware) an. Ich habe es verwendet, um DDL-Skripts (Tabellenschema) sowie Aktionsabfragen zu verarbeiten. Es werden keine Datensätze zurückgegeben, sodass es für SELECT-Abfragen nicht nützlich ist. Es unterstützt einzeilige Kommentare mit dem Präfix - aber keine mehrzeiligen Kommentare in/* * /. Es unterstützt Befehlszeilenparameter.

 enter image description here

Wenn Sie eine interaktive Benutzeroberfläche wie Oracle SQL Developer oder SSMS for Access wünschen, sollten Sie die Referenz von Matthew Lock auf WinSQL ausprobieren. 

0
Ben

Vielleicht finden Sie es besser, ein Programm eines Drittanbieters zu verwenden, um die Abfragen in Access einzugeben, z. B. WinSQL . Ich denke, aus dem Speicher WinSQL unterstützt mehrere Abfragen über die Batch-Funktion.

Ich fand es schließlich einfacher, einfach ein Programm in Perl zu schreiben, um Bulk-INSERTS in einen Zugriff über ODBC auszuführen. Sie können jedoch vbscript oder eine andere Sprache verwenden, die ODBC unterstützt.

Sie können dann alles tun, was Sie möchten, und haben eine eigene, komplizierte Logik, um den Import durchzuführen.

0
Matthew Lock