Suppression de ligne dans un dbgrid [Résolu]

Messages postés
30
Date d'inscription
lundi 11 janvier 2016
Dernière intervention
10 décembre 2017
- - Dernière réponse :  Pierrotk10d - 31 oct. 2017 à 08:31
delphi7 et bdd paradox


Bonjour,

je cherche une fonction ou code pour :

j aimerais pouvoir effacer via un bouton tout les lignes d un Dbgrid

jai une base de donnée de type réservation resto

et je voudrais effacer les dates antérieurs a celle de la date du jours
Afficher la suite 

Votre réponse

5 réponses

0
Merci
Bonjour,
Il y a plusieurs solutions comme souvent.
1 - Mettre la propriété Multiselect du TDBGrid à True, sélectionner les enregistrements à supprimer. Voici un bout de code qui devait aller
procedure TForm1.Button1Click(Sender: TObject);
Var i: Integer;
begin
// Propriété MuliSelect du DBGrid1 est à True
if DBGrid1.SelectedRows.Count > 0 then begin
for i := 0 To DBGrid1.SelectedRows.Count -1 do begin
Table1.GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
Table1.Delete;
end;
end;
end;

2 - Saisir la date de début et de fin des dates à supprimer et faire une requete SQL. A adapter à ton désir
Delete from Table1 where (DateResa > 'DateDebut') and (DateResa < 'DateFin');
ratatouille53
Messages postés
30
Date d'inscription
lundi 11 janvier 2016
Dernière intervention
10 décembre 2017
-
merci pierro!!

pour le bouton ok ca peu être utile mais la dans mon cas cela m obligerais a sélectionné manuellement les lignes .

après je ne sais pas utilisé les autres codes et serait p être trop long a apprendre pour moi je suis pas un pro !! et ne suis pas assez souvent a programmé .

auriez vous une autre solution ? en restant axé sur paradox et delphi

ce que je voudrais cet juste qu avec une date donnée que la fonction puisse allez rechercher tous les lignes ayant cette date et les sélectionnés automatiquement et les supprimer et cela sur un seul clic ;-)

si merci pour votre première réponse je garde sous le coude le petit code pour le bouton ca pourra me servir ultérieurement .
Commenter la réponse de pierrotk10d
0
Merci
Bonjour,
Pour la suppression des enregistrements sans les sélectionner manuellement la solution requête SQL me semble la meilleure. Il faut saisir la date à supprimer dans une fiche de dialogue ( à créer), avec un Edit et un bouton pour valider la date et lancer la requête.
Commenter la réponse de PierrotK10d
Messages postés
30
Date d'inscription
lundi 11 janvier 2016
Dernière intervention
10 décembre 2017
0
Merci
bonsoir

oui j avais bien compris votre idée SQL qui surement est bonne mais je sais pas comment le faire car je ni connais rien ave sql?

pourriez vous svp me me donner un petit exemple que je mettrais après a ma sauce ?

cela me permettrais déjà , peut être a comprendre un peu la relation en paradox et SQL !! et avancé dans mon projet

en vous remerciant

Merci pour la réponse et l intérêt que vous portez à m aider pour solutionner mon problème.

amicalement T
Commenter la réponse de ratatouille53
0
Merci
Bonjour,
Si tu ne veux pas utiliser SQL c'est dommage. Tu peux faire une boucle While comme ceci qui va supprimer tous les enregistrements qui ne seront differents du jour ou la procédure sera lancée (tous les jours différents du 28/10/2017 pour aujourd'hui par exemple).
A toi d'adapter quels jours tu veux supprimer dans la boucle.
Tu peux indexer ta table sur le champs DateResa ça ira plus vite!
procedure TForm1.Button2Click(Sender: TObject);
Var DateJ: TDateTime;
begin
DateJ := Date();
With Table1 do begin
First;
While (FieldByName('DateResa').AsDateTime < DateJ) and (not Eof) do
Delete;
end;
end;
ratatouille53
Messages postés
30
Date d'inscription
lundi 11 janvier 2016
Dernière intervention
10 décembre 2017
-
super !!! cet tous a fait ce que je cherchait a faire !!

cool...!!! jais essayer de de remplacer Datej par un DateTimePicker1 !!
pour pouvoir éventuellement choisir une date autre que celle du jour

mais je trouve pas la bonne sintaxe !! ,deja es ce que cela est possible??

si non super ce petit bout de code va vraiment faire place dans mon petit programme !! ;-) merci Pierro !!!

amicalement T
Commenter la réponse de PierrotK10d
0
Merci
Bonjour,
Pour sélectionner une date utilise plutôt un TmonthCalendar. L'évènement OnClick te renverra la date choisie.
procedure TForm1.MonthCalendar1Click(Sender: TObject);
begin
ShowMessage(DateToStr(MonthCalendar1.Date));
end;
ratatouille53
Messages postés
30
Date d'inscription
lundi 11 janvier 2016
Dernière intervention
10 décembre 2017
-
cela ne fonctionne pas!! car cela ne m efface tous !!

jai essayer de faire cela mais idem :

procedure TForm1.DateTimePicker1Change(Sender: TObject);
Var
DateJ: TDateTime;
begin
DateJ := DateTimePicker1.Date;
With Table1 do begin
first;
While (FieldByName('Date').AsDateTime < datej) and (not Eof) do

Delete;
end;
end;
> ratatouille53
Messages postés
30
Date d'inscription
lundi 11 janvier 2016
Dernière intervention
10 décembre 2017
-
Bonjour,
J'ai testé la procédure elle fonctionne parfaitement chez moi. Avec la date du jour DateJ := Date(); ou en sélectionnant une date dans un TMonthCalendar DateJ := MonthCalendar1.Date;
Fait le test suivant dans l'événement OnChange du TDateTimePicker remplace Delete par le remplissage d'un TMemo (avec scrollbar vertical) et regardes ce qui se passe! Avec TDateTime Picker la transformation de DateJ en String donne un meilleur résultat lors de la comparaison.
Bonne journée
ratatouille53
Messages postés
30
Date d'inscription
lundi 11 janvier 2016
Dernière intervention
10 décembre 2017
-
bonjour Pierro

je viens de revoir mon code javais fait une petit erreur de sintax!!!

effectivement ton code est parfait nickel!!
ratatouille53
Messages postés
30
Date d'inscription
lundi 11 janvier 2016
Dernière intervention
10 décembre 2017
-
merci merci pierro problème de date résolut ;-)

jais une autre petite demande a te faire p être saura tu m aiguillé

je vais mettre une photo pour que ma question soit plus explicite
> ratatouille53
Messages postés
30
Date d'inscription
lundi 11 janvier 2016
Dernière intervention
10 décembre 2017
-
Bonjour,
Si le problème est résolu il faut mettre ta demande à résolu.
Commenter la réponse de Pierrotk10d

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.