Comment poser une condition au cas où la donnée n'est pas trouvée?

Résolu
leading Messages postés 10 Date d'inscription samedi 30 octobre 2010 Statut Membre Dernière intervention 14 janvier 2011 - 13 nov. 2010 à 13:57
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 19 nov. 2010 à 11:45
Bonjour!

Peut être une logique tordue de ma part.
Dans les codes ci-dessous; j'essaie de dire que si dans la base de donnée on trouve ce qui est dans le TEdit "entreprise". Il faut juste actualiser (Edit). Par contre, si cette donnée n'est pas rencontré dans la dite base de donnée. Alors là, augmente (Append)une nouvelle donnée.
Malheureusement, ma logique ne marche pas. Apportez-moi secours s'il vous plaît.

Livre.Filter:='compte=' +quotedstr(entreprise.Text);
Livre.Filtered:= True;

if Livre.IsEmpty then begin
Livre.Edit;
Livre.FieldValues['data']:= date.Date;
Livre.FieldByName('saldo_dev').AsString:= comptes.Text;
Livre.Post;

else end
Livre.Append;
Livre.FieldValues['data']:= date.Date;
Livre.FieldByName('saldo_dev').AsString:= comptes.Text;
Livre.Post;



Leading
Étudier et étudier encore pour apprendre

9 réponses

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
15 nov. 2010 à 13:30
if Livre.IsEmpty then
 
  begin //Début du bloc à exécuter si Livre.IsEmpty := true
    ...
    ... //Code à exécuter si Livre.IsEmpty := true
    ...
  end   //Fin du bloc à exécuter si Livre.IsEmpty := true

else 
 
  begin //Début du bloc à exécuter si Livre.IsEmpty := false
    ...
    ... //Code à exécuter si Livre.IsEmpty := false
    ...
  end;  //Fin du bloc à exécuter si Livre.IsEmpty := false
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 nov. 2010 à 14:41
Bonjour,

procedure TForm1.Button1Click(Sender: TObject);
begin
try
Query1.Close;

  with Query1.SQL do
  begin
    Clear;
    Add('Select * from MaTableEntreprise ');
    Add('Where compte =:param ');

    Query1.ParamByName('param').AsString := Edit1.text;
    Query1.Open;
  end;

if (Query1.Bof) and (Query.Eof) then 
begin

// le test est vrai donc la table ne contient pas Edit1.text

// opération d'ajout
  Query1.Append;
  Query1champ1.text := edit1.text;
  Query1champ2.text := edit2.text;
  etc..

  query1.Post;
end

else

begin
// le test est faux donc la table contient Edit1.text
// attention, c'est un filtre et non un calage du pointeur de la table

Query1.Locate('Champ1',edit1.text,[]);  // on se cale sur l'enregistrement

et on édite :

Query1.Edit;
Query1Champ1.text := valeur saisie;
Query2champ2.text := valeur saisie;
Query1.Post;
end;

finally
Query1.Close;
end;

end;



cantador
3
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
13 nov. 2010 à 14:39
Salut,

« Étudier et étudier encore pour apprendre »

Ce serait bien de le mettre en pratique et de penser à acquérir les bases avant de te lancer tête baissée dans du code !

L'instruction if a deux formes : if...then et if...then...else. La syntaxe de l'instruction if...then est :

if expression then instruction

où expression renvoie une valeur booléenne. Si expression vaut True, alors instruction est exécutée ; sinon elle ne l'est pas. Par exemple :

if J <> 0 then Resultat := I/J;

La syntaxe de l'instruction if...then...else est :

if expression then instruction1 else instruction2

où expression renvoie une valeur booléenne. Si expression vaut True, alors instruction1 est exécutée ; sinon instruction2 est exécutée. Par exemple :

if J = 0 then
Exit
else
Resultat := I/J;

Les clauses then et else contiennent une seule instruction chacune, mais ce peut être une instruction structurée. Par exemple :

if J <> 0 then
begin
Resultat := I/J;
Compteur := Compteur + 1;
end
else if Compteur = Fin then
Arret := True
else
Exit;

Remarquez qu'il n'y a jamais de point-virgule entre la clause then et le mot else. Vous pouvez placer un point-virgule après une instruction if pour la séparer de l'instruction suivante du bloc mais les clauses then et else ne nécessitent rien d'autre qu'un espace ou un passage à la ligne entre elles. Le fait de placer un point-virgule immédiatement avant le else (dans une instruction if) est une erreur de programmation courante.
0
leading Messages postés 10 Date d'inscription samedi 30 octobre 2010 Statut Membre Dernière intervention 14 janvier 2011
15 nov. 2010 à 12:40
Caribensila,

Merci pour tes explications.
Mais ne peux-tu pas me corriger directement dans mes propres codes si ça te gênes pas afin que je comprenne mieux les explications que tu viens de me donner. J'ai pigé le strict minimum de ta logique mais j'arrive pas à m'y en sortir comme il faut.

Leading
Étudier et étudier encore pour apprendre
0

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

Posez votre question
leading Messages postés 10 Date d'inscription samedi 30 octobre 2010 Statut Membre Dernière intervention 14 janvier 2011
17 nov. 2010 à 10:15
Caribensila,
Merci de m'avoir apporté une aide éclaircisante. Beaucoup plus pratique à Apprendre.

Cantador,
T'as fait un joli ajout dans ce que je n'avais pas dans mon apprentissage.
Merci aussi.

Leading
Étudier et étudier encore pour apprendre
0
leading Messages postés 10 Date d'inscription samedi 30 octobre 2010 Statut Membre Dernière intervention 14 janvier 2011
18 nov. 2010 à 19:43
Salut!

Chose peu étonnante, je me demande pourquoi le code coloré en rouge n'affiche pas le resultat demandé.
Sur le même Tfrom sur lequel je travail. J'ai mis un Tbutton pour voir si le résultat s'afficherai dans resultat_Deb.Text:= FloatToStr(bq);
il s'affiche sans problème. Mais quand je les mets à la fin de ces codes colorés de bleu. Rien ne s'affiche.

Du moins voici ce que j'ai mis juste après les dits codes en bleus:
livre.Close;
livre.Open;
Pas de succès.

J'ai encore essayer ceci:
livre.free;
toujours pas d'affichage. Comment ça s'explique s'il vous plaît?

/////////////////////////
...
var bq : double;
...

Livre.Filter:='compte=' +quotedstr(entreprise.Text);
Livre.Filtered:= True;

[color=red]if Livre.IsEmpty then begin
Livre.Edit;
Livre.FieldValues['data']:= date.Date;
Livre.FieldByName('saldo_dev').AsString:= comptes.Text;
Livre.Post;

end else
begin
Livre.Append;
Livre.FieldValues['data']:= date.Date;
Livre.FieldByName('saldo_dev').AsString:= comptes.Text;
Livre.Post; /color

Livre.Filter:='contas='+ quotedstr(evenement.Text);
Livre.Filtered:=True;
bq:= 0;
While not Livre.Eof do begin
bq:= bq+Livre.fieldByName('debit').AsFloat;
Livre.Next;
end;
resultat_Deb.Text:= FloatToStr(bq);
Livre.Filtered:= false;
Livre.First;
Livre.Filtered:= false;



Leading
Étudier et étudier encore pour apprendre
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
18 nov. 2010 à 20:00
ça s'explique pas.

c'est à cause des mouches.
0
leading Messages postés 10 Date d'inscription samedi 30 octobre 2010 Statut Membre Dernière intervention 14 janvier 2011
18 nov. 2010 à 21:49
Au fait Cantador, t'as raison.
Mais laisses-moi expliquer ce que je viens de comprendre après avoir fait des tests.
Ces codes ci-dessous affichent dans resultat_Deb.Text la somme des données rencontrées du champ "compte". Dans le cas où, il y a augmentation d'un nouveau compte n'existant pas dans la BD.
Mais il n'affiche pas dans resultat_Deb.Text, juste quand il s'agit d'une operation "Edit" et non "Append".
C'est pas normal! Comment s'affiche t-il que quand il y a "Append". Ça n'a rien à voir. Pas vrai?


...
var bq : double;
...

Livre.Filter:='compte=' +quotedstr(entreprise.Text);
Livre.Filtered:= True;

if Livre.IsEmpty then begin
Livre.Edit;
Livre.FieldValues['data']:= date.Date;
Livre.FieldByName('saldo_dev').AsString:= comptes.Text;
Livre.Post;

end else
begin
Livre.Append;
Livre.FieldValues['data']:= date.Date;
Livre.FieldByName('saldo_dev').AsString:= comptes.Text;
Livre.Post;

Livre.Filter:='contas='+ quotedstr(evenement.Text);
Livre.Filtered:=True;
bq:= 0;
While not Livre.Eof do begin
bq:= bq+Livre.fieldByName('debit').AsFloat;
Livre.Next;
end;
resultat_Deb.Text:= FloatToStr(bq);
Livre.Filtered:= false;
Livre.First;
Livre.Filtered:= false;


Leading
Étudier et étudier encore pour apprendre
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
19 nov. 2010 à 11:45
bonjour,

Il faudrait peut-être réfléchir un peu avant de poster
sinon Cari va te faire des blagues, et il a bien raison...

if Livre.IsEmpty then begin
Livre.Edit;



Déjà là tu as tout faux...

tu écris, si mon filtre est vide alors j'édite l'enregistrement !
comment veux-tu éditer quelque chose qui n'existe pas !

et si tu te penchais sur le code que je t'ai fourni ?

cantador
0
Rejoignez-nous