Problème de DELETE sur db4 avec ADO

barttabac Messages postés 3 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 11 mai 2003 - 7 mai 2003 à 11:38
cs_curie Messages postés 5 Date d'inscription mardi 12 décembre 2000 Statut Membre Dernière intervention 12 août 2010 - 7 août 2008 à 18:07
Slt à tous,
J'utilise une base de données db4 en utilisant ADO, sous Delphi 6. Pour faire des INSERT ou UPDATE, pas de problème, tout se passe bien.

Par contre mon problème, est sur le DELETE : j'effectue une requete, puis l'exécute (ExecSQL). Mon enregistrement est bien supprimé (je le vérifie sous l'ExplorateurSQL) mais lorsque je rafraichis ma requete, qui affiche les données dans mon application, l'enregistrement est tjs là !!!!!

J'espère avoir été assez clair et surtout que vous pourrez m'éclaircir...
Ced.

6 réponses

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
8 mai 2003 à 00:41
Es-tu sûr qu'il n'y a pas des données "parasites", restées dans une quelconque variable te servant à l'affichage des données, qui fausserai celui-ci dans ton application, et non dans l'explorateur SQL ?!

Je ne peux guère essayer de t'avancer plus, car je ne connais pas vraiment le monde des BDD, mais ça peut être une solution...

Bonne prog' !
[mailto:bestiol@cario.fr Bestiol.]
0
barttabac Messages postés 3 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 11 mai 2003
8 mai 2003 à 11:46
Je ne pense pas que le problème vienne de là...car je ne passe pas par des variables. J'effectue directement une requete sur ma base et en tire les champs avec la fonction delphi "FieldByName"...
Le problème serait comme si mon application (uniquement) ne prenait pas en compte les delete et ne se mettait pas à jour...Je pensais à une histoire de "commit", mais ce n'est pas applicable sur ma base....
Je ne comprends vraiment pas d'autant plus que les "update" et "insert" marchent parfaitement bien....c'est uniquement une histoire de "delete" et c'est persistant...Au redémarrage de ma machine, mes enregistrements, soit disant supprimés, sont tjs présents lorsque je visualise ma base à travers mon application. Alors qu'en ouvrant celle-ci, dans l'explorateurSQL ou dans Excel, je ne les ai bel et bien supprimés...
Je ne comprend pas tout, ca doit être une stupide betise c'est pourkoi j'en demande votre aide !!!!
Ced.
0
barttabac Messages postés 3 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 11 mai 2003
11 mai 2003 à 21:59
Je viens de trouver mon problème et pour en faire profiter ceux que ca pourrait intéresser....en voici la stupide erreur.
En fait sur mon composant ADOConnection, je crée ma chaine de connexion. C'est une source de données fichier...etc... ensuite une fenêtre "Installation ODBC pour DBASE" s'ouvre et c'est ici que subsiste la subtilité. En cliquant sur "Options>>" en bas à droite, une checkbox est cochée et c'est "Affichage des lignes supprimées"....
Voilà donc pourquoi je visualisais toujours mes données (qui devaient être supprimées) sous mon application mais non pas sous l'explorateurSQL...
En espérant que cela puisse aider ceux qui seront un jour dans ce cas là !!!!
Ced.
0
grosdave653 Messages postés 16 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 29 juillet 2005
12 juil. 2005 à 15:34
J'ai le même souci que toi pour la suppression d'enregistrements mais je n'utilise pas de composant ADOConnection. Je pense d'ailleurs que la solution que tu donnes est fausse. En effet lorsque tu décoche "Affichage des lignes supprimées", certes tu ne les verras plus, mais tu aurais du tilter que lorsque l'on peut les voir c'est qu'ils existent toujours quelque part ... LOGIQUE
Le problème vient du fait que sur Dbase pour supprimé les enregistrements il faut faire PACK de la table. Bon ta question date un peu aujourd’hui mais regarde le fichier .dbf de la table sur laquelle tu fais tes delete, elle doit occuper une taille anormalement grande sur ton disque puisque tous les deletes que tu as fait m'on surement jamais été pris en compte.
Vu que cette question date, est ce que tu as maintenant la vrai solution ? A savoir comment faire un COMMIT, ou un PACK sur la table a partir de delphi ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
grosdave653 Messages postés 16 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 29 juillet 2005
13 juil. 2005 à 10:57
J'ai enfin la solution:

procedure TDtMdl.PackFichierDbf(Tbl: TTable; Base, NomTable: string);
begin
Tbl.Close;
Tbl.Databasename:=Base;
Tbl.TableName:=NomTable;
Tbl.Exclusive := True;
Tbl.Open;
DbiPackTable(Tbl.dbHandle, Tbl.Handle, PChar(NomTable), 'dbase', True);
Tbl.Close;
end;

Faut faire çà après aoir fait un delete sur ta table. Ne pas oublier de mettre "bde" dans la liste des uses.
0
cs_curie Messages postés 5 Date d'inscription mardi 12 décembre 2000 Statut Membre Dernière intervention 12 août 2010
7 août 2008 à 18:07
Salut

En DB4 la commande DELETE efface virtuellement les records mais pas physiquement  (si on peut dire)
en fait c est la commande PACK qui elimine definitivement les records prealablement effaces par DELETE

De ce fait comment execute la commande PACK en DELPHI

Curie
0
Rejoignez-nous