web-dev-qa-db-fra.com

Comment exécuter plusieurs instructions SQL dans l'éditeur de requêtes d'Access?

J'ai un fichier texte contenant quelques instructions SQL que je souhaite exécuter sur une base de données Access. Je pensais que cela devrait être possible avec l'éditeur Editeur de requêtes d'Access. Donc, je vais dans cet éditeur et collez les déclarations:

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

En essayant de les exécuter (en frappant le point d’exclamation rouge), je reçois un
Missing semicolon (;) at end of SQL statement.

Cela pourrait être interprété comme une indication que l'éditeur permettrait d'exécuter plusieurs instructions. Donc, je change les instructions et ajoute un point-virgule à la fin:

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

Puis je reçois un
Characters found after end of SQL statement.
, ce qui pourrait probablement être interprété comme une indication qu'il n'est pas possible d'exécuter plusieurs instructions.

Ok, donc la question: est-il possible d'exécuter plusieurs instructions dans l'éditeur de requête ou est-il possible en quelque sorte d'exécuter par lots des instructions SQL dans un fichier dans/sur/contre Access.

Merci/René

edit Les instructions insérées ont été utilisées à titre d'exemple et je me rends compte qu'elles sont moins que parfaites, car elles vont toutes à la même table et une telle chose peut évidemment être résolue d'une manière ou d'une autre en utilisant une déclaration qui a une union ou quelque chose comme ça . Dans mon cas réel que j'essaie de résoudre, le fichier contient non seulement des instructions d'insertion, mais également des instructions de création de table et des instructions d'insertion avec différentes tables sous-jacentes. J'espérais donc (et espère toujours) qu'il existe quelque chose comme mon bien-aimé SQL * Plus pour Oracle qui peut exécuter un fichier avec toutes sortes d'instructions SQL.

35
René Nyffenegger

Vous pouvez facilement écrire un code binaire qui sera lu dans un fichier. Vous pouvez soit assumer une instruction SQL par ligne, soit supposer le;

Donc, en supposant que vous ayez un fichier texte tel que:

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

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


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

Notez que dans le fichier texte ci-dessus, nous sommes libres d’avoir des instructions SQL sur plusieurs lignes.

le code que vous pouvez utiliser pour lire + exécuter le script ci-dessus est:

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

Vous pouvez développer le placement de messages d'erreur si l'un des énoncés ne fonctionne pas, tel que

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

Quoi qu'il en soit, la division ci-dessus et la chaîne lue permettent à votre SQL d'être sur plus d'une ligne ...

28
Albert D. Kallal

Malheureusement, autant que je sache, vous ne pouvez pas exécuter plusieurs instructions SQL sous une requête nommée dans Access au sens traditionnel. 

Vous pouvez effectuer plusieurs requêtes, puis les chaîner avec VBA (DoCmd.OpenQuery si la mémoire le sert).

Vous pouvez également enchaîner un tas de choses avec UNION si vous le souhaitez.

15
phoebus

créer une macro comme celle-ci

Option Comparer la base de données

Sub a ()

DoCmd.RunSQL "DELETE * à partir de TABLENAME où CONDITIONS"

DoCmd.RunSQL "DELETE * à partir de TABLENAME où CONDITIONS"

End Sub

0
masoud Cheragee

Il vaut mieux créer un fichier XLSX avec les noms de champs sur la première ligne . Créez-le manuellement ou avec Mockaroo . Exportez-le vers Excel (ou CSV), puis importez-le dans Access à l'aide de Nouvelle source de données -> À partir d'un fichier.

IMHO c'est la meilleure et la plus performante des choses dans Access.

0
Gilberto Pe-Curto

"J'espérais (et espère toujours) qu'il existe quelque chose comme mon bien-aimé SQL * Plus pour Oracle qui peut exécuter un fichier avec toutes sortes d'instructions SQL."

Si vous recherchez un programme simple capable d'importer un fichier et d'exécuter les instructions SQL qu'il contient, consultez DBWConsole (freeware). Je l'ai utilisé pour traiter des scripts DDL (schéma de table) ainsi que des requêtes d'action. Il ne renvoie pas d'ensembles de données, il n'est donc pas utile pour les requêtes SELECT. Il prend en charge les commentaires sur une seule ligne précédés de - mais pas les commentaires sur plusieurs lignes encapsulés dans/* * /. Il supporte les paramètres de ligne de commande.

 enter image description here

Si vous voulez une interface utilisateur interactive comme Oracle SQL Developer ou SSMS for Access, la référence de Matthew Lock à WinSQL est ce que vous devriez essayer. 

0
Ben

Vous trouverez peut-être préférable d'utiliser un programme tiers pour saisir les requêtes dans Access, telles que WinSQL Je pense que de la mémoire WinSQL prend en charge plusieurs requêtes via sa fonction de traitement par lots.

J'ai finalement trouvé plus facile d'écrire un programme en Perl pour créer des INSERTS en bloc dans un accès via ODBC. Vous pouvez toutefois utiliser vbscript ou tout autre langage prenant en charge ODBC.

Vous pouvez ensuite faire ce que vous voulez et avoir votre propre logique compliquée pour gérer l'importation.

0
Matthew Lock