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

diwilbo
Messages postés
12
Date d'inscription
lundi 7 février 2005
Statut
Membre
Dernière intervention
22 mars 2006
- 16 mars 2006 à 12:17
cs_Delphiprog
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
- 17 mars 2006 à 23:23
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

cs_rt15
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
16 mars 2006 à 12:41
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 ?
0
diwilbo
Messages postés
12
Date d'inscription
lundi 7 février 2005
Statut
Membre
Dernière intervention
22 mars 2006

16 mars 2006 à 13:07
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
0
diwilbo
Messages postés
12
Date d'inscription
lundi 7 février 2005
Statut
Membre
Dernière intervention
22 mars 2006

16 mars 2006 à 13:22
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
0
cs_cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
17 mars 2006 à 20:47
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
0

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

Posez votre question
cs_Delphiprog
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
17 mars 2006 à 23:23
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.
0