Insertion ou mise à jour impossible...

Insertion ou mise à jour impossible... - Delphi/Pascal - Programmation

Marsh Posté le 28-07-2005 à 13:48:54    

Bonjour,
je travaille avec une base Sybase et le BDE et je n'arrive pas à faire fonctionner mes requétes de modifications de la base...
En fait, la plupart du temps je n'ai pas de message d'erreur, mais mon prog plante car la requête tourne en boucle sans qu'elle aboutisse...
A chaque fois, mon code ressemble à ça:
Code:
 with query2 do
        begin
        Close;
        SQL.Clear;
        SQL.Add('insert...');
        Prepare;
        ExecSQL;
        end;
 
Si vous avez la soluce ou une idée, merci d'avance!

Reply

Marsh Posté le 28-07-2005 à 13:48:54   

Reply

Marsh Posté le 28-07-2005 à 14:16:59    

J'ai pas de de solution, mais peut-etre des idée
 
- Certains comportement anormaux disparaissent en utilisant les objets ADO à la place des BDE (question de driver, je supose)
 
- Je sais que c'est une question idiote mais.... quand tu execute ton "insert..." directement dans sybase, ça marche?
 
- Si tu n'execute une requete qu'une fois, la commande Prepare est inutile (on sais jamais. C'est peut etre cet ordre qui plante)
 
sinon, peut-tu etre plus preci? Est-ce l'ordre ExecSQL qui dure indéfiniment (vérifie avec le pas par pas)?

Reply

Marsh Posté le 28-07-2005 à 14:24:51    

Merci pour tes pistes, c'est sympa!
Alors, dans l'ordre:
-je n'ai jamais utilisé les objets ADO, mais donc en gros tu me les conseilles à la place du BDE?
-la requête marche bien directement dans Sybase en effet...
-si j'utilises ce query plusieurs fois, "prepare" est inutile alors?
-avec un point d'arrêt sur mon "execSQL", alors je me rends compte que c'est bien lui qui mouline en effet!
Merci d'avance!

Reply

Marsh Posté le 28-07-2005 à 14:40:27    

Dans la doc :

Citation :


Call Prepare to have the BDE and a remote database server allocate resources for the query and to perform additional optimizations. Preparing a query consumes some database resources, so it is good practice to call UnPrepare once the query is no longer needed.
 
If the query will only be executed once, the application does not need to explicitly call Prepare or UnPrepare. Executing an unprepared query generates these calls automatically. However, if the same query is to be executed repeatedly, it is more efficient to prevent these automatic calls by calling Prepare and UnPrepare explicitly.
 
Note: When you change the text of a query at runtime, the query is automatically closed and unprepared.


Perso je n'ai jamais utilisé Prepare, je ne savais même pas que ça existait :whistle:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-07-2005 à 15:09:27    

nicocolas a écrit :

Merci pour tes pistes, c'est sympa!
Alors, dans l'ordre:
-je n'ai jamais utilisé les objets ADO, mais donc en gros tu me les conseilles à la place du BDE?


Sur les cas que j'ai rencontré, l'ADO marche mieu(pas mal de bug en moin) , mais plus lentement. Mais j'ésiterait à affirmer que c'est une règle générale
 

nicocolas a écrit :

-la requête marche bien directement dans Sybase en effet...


- Cette requete tourne-t-elle dans les mème condition? Si ton programme Delphi accede à la base par le reseau et que ton test "en direct" est directement sur le server, ça vien peut etre de là (notamment si tu imbrique un select ou si ton ordre fait 20000 lignes)
- A oui! Plusieur "Insert" séparé par des point virgule, ça passe pas bien!
 

nicocolas a écrit :

-si j'utilises ce query plusieurs fois, "prepare" est inutile alors?


Ben si, justement! Tu lance "prepare" une fois(avant la boucle), puis la requete plusieur fois (grosso-modo, ça compile la requete)(je me suis jamais amusé à chronometré la diférence)
 

nicocolas a écrit :


-avec un point d'arrêt sur mon "execSQL", alors je me rends compte que c'est bien lui qui mouline en effet!


Mouais.... Si tu construit ta requete avec plusieurs "SQL.add", sauvegarde la requete dans un fichier ("Query1.SQL.SaveToFile" ) pour l'executer séparement, juste pour voir
 

nicocolas a écrit :

Merci d'avance!


Il vous en pris (d'avance)


Message édité par Zozol le 29-07-2005 à 10:06:09
Reply

Marsh Posté le 28-07-2005 à 17:01:39    

Hum, je pense qu'il y a une sorte de conflit entre mon client Sybase et mon prog...
Après avoir relancé mon prog tout seul, les MAJ ont l'air de fonctionner, mais je vais tester un peu plus en détail quand même parce que je me prends d'autres erreurs un peu étranges parfois...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed