Mon TRY EXCEPT ne marche pas...queslqu'un saurait-il pourquoi?

Signaler
Messages postés
12
Date d'inscription
lundi 7 février 2005
Statut
Membre
Dernière intervention
22 mars 2006
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
bonjour a tous,

Alors voila,
Lorsque j'appuie sur le bouton "Enregistrer", la procedure : procedure TFormOrdinateur.BtnEnregSrvClick(Sender: TObject); s'execute

Dès lors, je recupere les valeurs de mes Edits pour les enregistrer dans une table PARADOX.

with FrmGestion.Table_serveur do begin
Open;
Append;


FrmGestion.Table_serveur.FieldByName('Nomclient').Value:=LblNomclient.Caption;
...
FrmGestion.Table_serveur.FieldByName('SystemeOS').Value:= EdtSystemeOS.Text;

TRY
Table_serveur.Post;
EXCEPT
close;
END;

end;

Le TRY EXCEPT aurai pour but d'éviter les doublons dans ma table_serveur. Si Nom de client déja existant alors 'close' ou autre chose mais PAS POST !!;

Quand je rentre un nom de client (clé primaire) nouveau, pas de probleme.
En revanche qd je rentre le nom d'un client deja existant --> Message d'erreur : 'Key violation'.
J'en conclu donc que mon TRY EXCEPT ne fonctionne pas.

Quelqu'un pourrai-t-il m'aider s'il vous plait ??

Merci d'avance

5 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Bin je suppose que l'exception ayant lieu dans la table PARADOX, elle n'est pas géréer comme une exception Delphi (Ca s'appel peut être même pas une exception). Tu n'as aucun moyen de vérifier par du code que le nom existe pas dans la table ?
Messages postés
12
Date d'inscription
lundi 7 février 2005
Statut
Membre
Dernière intervention
22 mars 2006

Ouai tu as surement raison.
En tout cas c'est sur que si ya moyen de verifier par du code que le nom existe ca m'arrangerai !!! tu ne sai pas faire?

Car moi je galere depuis 1 semaine !!!

j'ai essayer de faire des requete mais je ne sais pas lire la repose rendue (SELECT Nomclient FROM TABLE_SERVEUR --> me donne la liste des nom de clients mais comment verifier si un nom existe ou pas?

Encore Merci pour ton aide

diwilbo
Messages postés
12
Date d'inscription
lundi 7 février 2005
Statut
Membre
Dernière intervention
22 mars 2006

Du coup c'est bon j'ai trouvé !!!

Je vais vous donner la reponse au cas où d'autre que moi galere sur le meme probleme

il suffit de faire une vérification en actionnant le bouton 'Enregistrer'

if not Table_Client.Locate('nomclient', EdtNomclt.text, []) then
...

Voila.
J'espere que j'ai pu aider quelqu'un

Ciao diwilbo
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
essaie ça :


try
Table_serveur.Post;
except
on E: EDBEngineError do
with EDBEngineError(E) do
if Errors[ErrorCount - 1].ErrorCode = DBIERR_KEYVIOL then
// doublon !!!
begin
Application.MESSAGEBOX('Ce numéro d''enregistrement existe déjà, resaisissez', 'Ajout de fiche',
MB_ICONEXCLAMATION);
DBENUMDT.SetFocus;
exit;
end
else
begin
Showmessage(Errors[ErrorCount - 1].Message);
exit;
end;
end;

cantador
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
Tu as au moins deux possibilités :
1/- En interceptant l'exception déclenchée :
<CODE>begin
with FrmGestion.Table_serveur do
try
    Open;
    Append;
    FieldByName('Nomclient').AsString :=  LblNomclient.Caption;
    //...
    FieldByName('SystemeOS').AsString := EdtSystemeOS.Text;
    Post;
    Close;
  except
 on  E: EDataBseError do
begin
      close;
      ShowMessageFmt('%s existe d&#233;j&#224; !', [LblNomclient.Caption]);
    end;
  end;
end;

</CODE>
<HR>
2/- En testant d'abord l'existence à l'aide d'une requête :
var
  T: TTable;
  Q: TQuery;
const  query  'SELECT count(NomClient) as Nombre FROM %s WHERE NomClient  "%s"';
begin
//pour faciliter l'utilisation et la lecture du code
  T := FrmGestion.Table_serveur;

  //Cr&#233;ation d'une requ&#234;te pour d&#233;nombre les existants
  Q := TQuery.create(Self);
  try
    Q.DatabaseName := T.DatabaseName;
    Q.Sql.Text := Format(query, [T.TableName, LblNomclient.Caption]);
    Q.Open;
     if  Q.FieldByName('Nombre').AsInteger > 0then
      ShowMessageFmt('%s existe d&#233;j&#224; !', [LblNomclient.Caption])
    else
begin
//le client n'existe pas, on peut l'ajouter tranquillement
with T do
begin
        Open;
        Append;
        //pr&#233;f&#233;rer AsString que Value, c'est plus rapide et
//moins gournmand en m&#233;moire
        FieldByName('Nomclient').AsString : = LblNomclient.Caption;
        //...
        FieldByName('SystemeOS').AsString :=  EdtSystemeOS.Text;
        Post;
        Close;
       end ; {with T}
end; {if Q.FieldByName('Nombre').AsInteger > 0}
    Q.Close;
  finally
    Q.Free;
  end; {try..finally}
end;

Maintenant, c'est à toi de choisir la solution que tu préfères

<HR color =#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.