Tquery : Requete SQL Pour insertion multiple -- URGENT

Résolu
cs_ssd Messages postés 50 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 31 août 2011 - 15 févr. 2010 à 23:44
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 17 févr. 2010 à 20:29
Bonjour,

J'utilise la Tquery dans mon application pour faire des requetes SQL sur une table paradox.
Le problème, j'utilise ma Tquery pour faire des inserts dans ma table, le soucis si je veux faire des inserts groupés je ne peux pas. Message d'erreur.

Voila mon code pour faire mon SQL Insert Groupé :
procedure TFConfiguration.button_commande_sqlClick(Sender: TObject);
var
Adresse_fichier_SQL : String;
begin
Try
if OpenDialog_SQL.Execute then
Adresse_fichier_SQL := OpenDialog_SQL.FileName;
With DataModule1.Query_code_fait do
begin
Close;
SQL.Clear;
SQL.LoadFromFile(Adresse_fichier_sql);
ExecSQL ;
end;
Datamodule1.Table_Faits.Refresh;
// Showmessage('REQUEST SQL : OK');
Except
Showmessage('REQUEST SQL : ERREUR');

End;
end;

Et voila mon fichier TXT :
INSERT INTO BDD\Table_faits VALUES ('Ligne1','Ligne2')


Pouvez vous m'aidez car je ne comprends pas pourquoi je peux faire une insertion simple et non multiple.
Cordialement,

SSD

3 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 33
17 févr. 2010 à 20:29
Après vérification, Paradox ne supporte pas l'insertion multiple : voir ici

Désolé...

May Delphi be with you

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Sauvons MySQL
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 33
16 févr. 2010 à 23:40
Bonsoir,

Une première remarque : la méthode Execute de la classe TOpenDialog renvoie false quand l'utilisateur clique sur le bouton annuler. La variable Adresse_fichier_SQL ne recevra alors aucune valeur et restera une chaine vide. Aussi, il convient d'ajouter un bloc BEGIN..END pour n'exécuter la requête que si l'utilisateur a choisi un fichier.
procedure TFConfiguration.button_commande_sqlClick(Sender: TObject);
var
  Adresse_fichier_SQL : String;
begin
  Try
    if OpenDialog_SQL.Execute then
    BEGIN // <-- AJOUT
      Adresse_fichier_SQL :=  OpenDialog_SQL.FileName;
      With DataModule1.Query_code_fait do
      begin
        Close;
        SQL.Clear;
        SQL.LoadFromFile(Adresse_fichier_sql);
        ExecSQL ;
      end;
      Datamodule1.Table_Faits.Refresh;
      // Showmessage('REQUEST SQL : OK');
   Except
     Showmessage('REQUEST SQL : ERREUR');
   End;
  END; // <-- AJOUT
end; 


En ce qui concerne l'insertion multiple, la syntaxe est la suivante :
INSERT INTO BDD\Table_faits VALUES ('Ligne1'),('Ligne2');

Bien noter les parenthèses permettant de séparer les groupes de données.

May Delphi be with you

Sauvons MySQL
0
cs_ssd Messages postés 50 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 31 août 2011
17 févr. 2010 à 02:05
Merci, pour la remarque du Begin ... end;

En revanche quand j'exécute mon insertion multiple avec la syntaxe : INSERT INTO BDD\Table_faits VALUES ('Ligne1'),('Ligne2');
Le message d'erreur suivant s'affiche : Le projet LEO.exe a déclenché la classe d'exception EDBEngineError 'Invalide use of keyword' Token ,('Ligne2')
Il faut savoir que ma base paradox ne comporte qu'un seul champ

Je n'ai pas trouvé à quoi correspondait cette erreur.
Si quelqu'un a une idée,

Merci, d'avance.
SSD
0
Rejoignez-nous