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 unMissing 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 unCharacters 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.
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 ...
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.
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
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.
"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.
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.
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.