Mon TRY EXCEPT ne marche pas...queslqu'un saurait-il pourquoi?
diwilbo
Messages postés12Date d'inscriptionlundi 7 février 2005StatutMembreDernière intervention22 mars 2006
-
16 mars 2006 à 12:17
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDerniè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;
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.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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 ?
diwilbo
Messages postés12Date d'inscriptionlundi 7 février 2005StatutMembreDernière intervention22 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?
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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éjà !', [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éation d'une requête pour dé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éjà !', [LblNomclient.Caption])
else
begin
//le client n'existe pas, on peut l'ajouter tranquillement
with T do
begin
Open;
Append;
//préférer AsString que Value, c'est plus rapide et
//moins gournmand en mé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.