Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Connexion aux bases de données
Connexion aux bases de données Forum d'entraide sur la connectivité Firebird: composants, drivers, transactions, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/11/2006, 13h08   #1
Membre du Club
 
Inscription : octobre 2005
Messages : 285
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 285
Points : 41
Points : 41
Par défaut Champ auto qui ne s'affiche pas

Bonjour,

Dans une table Firebird (GDB) j'ai un champ auto appelé LIV_ID. Ce champ qui commence à 100 me sert de numéro de bon de commande.

Quand je saisi un bon de commande, tous les champs se mettent bien dans mon DBGrid sauf mon numéro (LIV_ID) qui ne s'affiche que lorsque je relance mon prog. Ce que je cherche à faire c'est à l'afficher dès la saisie pour le visualiser.

Pour me connecter à ma base j'utilise TIBDataBase et pour mettre à jour la table un TIBDataSet avec INSERTSQL, ModifySQL et DeleteSQL renseignés.

Comment je peux faire?

D'avance merci

Codial
codial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 13h31   #2
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 757
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 757
Points : 6 777
Points : 6 777
Salut,

Sur ton FIBDataSet renseigne la propriété GeneratorField. Tu lui associes le Générateur qui incremente ton champ auto, et tu précises quand tu veux y faire appel (à l'insertion ou avant le post).

[edit]
C'est une question que j'aurais posé dans le forum Delphi/Bases de données puisque qu'il s'agit d'un composant Delphi.
[/edit]
@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 13h36   #3
Membre du Club
 
Inscription : octobre 2005
Messages : 285
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 285
Points : 41
Points : 41
Bonjour,

merci beaucoup pour la réponse, celà fonctionne avec "Lors de la validation".

Cordialement

Codial
codial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 13h41   #4
Membre du Club
 
Inscription : octobre 2005
Messages : 285
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 285
Points : 41
Points : 41
Bonjour,

je reviens car je viens de m'apercevoir que maintenant mon champ auto s'incrémente de 2 ?

Or j'aimerai qu'il ne s'incrémente que de 1
codial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 13h46   #5
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 757
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 757
Points : 6 777
Points : 6 777
Re,

Modifie ton trigger before insert sur ta table, et appelle le GEN_ID uniquement si ta clé est NULL.

Code :
1
2
 
  IF (new.LIV_ID IS NULL) then new.LIV_ID = GEN_ID(TON_GENERATEUR, 1);
@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 14h20   #6
Membre du Club
 
Inscription : octobre 2005
Messages : 285
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 285
Points : 41
Points : 41
Re,

c'est ce que j'ai fait:
Code :
1
2
3
4
5
6
 
IF (new.LIV_ID IS NULL) then 
begin
new.LIV_ID = GEN_ID("G$_LIV_ID", 1);
end
end
Je ne comprends pas!
codial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 14h26   #7
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 757
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 757
Points : 6 777
Points : 6 777
Citation:
Envoyé par codial
Je ne comprends pas!
Qu'est-ce que tu ne comprends pas ?
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 14h32   #8
Membre du Club
 
Inscription : octobre 2005
Messages : 285
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 285
Points : 41
Points : 41
que ça s'incrémente de 2
codial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 14h39   #9
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 757
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 757
Points : 6 777
Points : 6 777
Jusqu'à présent lorsque tu postais ton enregistrement la valeur de LIV_ID était à NULL. Mais à présent tu appelles le générateur depuis l'application qui te fournit la valeur de ta clé.
Donc au moment du Post (dans ton appli) la valeur de LIV_ID est déjà renseignée. C'est pour cela qu'il faut poser cette condition dans ton trigger (if new.LIV_ID is NULL) pour éviter que le générateur ne soit appelé un 2° fois.

Voiloù. En fait c'est tout bête !

@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 14h43   #10
Membre du Club
 
Inscription : octobre 2005
Messages : 285
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 285
Points : 41
Points : 41
re,
comme je l'ai dit plus haut ce test existe dans mon trigger
Code :
1
2
3
4
5
6
 
IF (new.LIV_ID IS NULL) then 
begin
new.LIV_ID = GEN_ID("G$_LIV_ID", 1);
end
end
codial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 14h51   #11
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 757
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 757
Points : 6 777
Points : 6 777
Ah OK la condition existait déjà !

Qu'est qui est inscrit pour la propriété GeneratorField:
Code :
1
2
 
  G$_LIV_ID -> LIV_ID BY 1
C'est ça ?
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 14h56   #12
Membre du Club
 
Inscription : octobre 2005
Messages : 285
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 285
Points : 41
Points : 41
oui c'est ça
Code :
1
2
 
G$_LIV_ID -> LIV_ID BY 1
codial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 15h08   #13
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 757
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 757
Points : 6 777
Points : 6 777
Ah c'est bizarre !

Nul part ailleurs tu ne fais appel au générateur, ou modifie la valeur de LIV_ID dans ton prog ?
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 15h15   #14
Membre du Club
 
Inscription : octobre 2005
Messages : 285
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 285
Points : 41
Points : 41
Non, nul par ailleurs, dans mon InsertSQL j'ai:

Code :
1
2
3
4
5
 
INSERT INTO LIVRAISONS
  ( ClI_ID, LIV_DOC, LIV_DATE)
VALUES
  ( :ClI_ID, :LIV_DOC, :LIV_DATE)
et dans mon code:
Code :
1
2
 
DM.IBDLivraisons.Post;
codial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 15h42   #15
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 757
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 757
Points : 6 777
Points : 6 777
Bon ben j'ai du mal à comprendre !
Je viens de faire un petit test: Un IBDataSet, avec GeneratorField de renseigné, je saisi dans un DBGrid et tout fonctionne correctement. Mes clés se suivent.

A moins que... Est-ce que tu utilises des champs persistents, et si oui est-ce la propriété AutoGenerateValue du champ LIV_ID est bien à arNone (et non arAutoInc) ?
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 16h03   #16
Membre du Club
 
Inscription : octobre 2005
Messages : 285
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 285
Points : 41
Points : 41
il y un trigger d'affecté à l'ID ?
codial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 16h35   #17
Membre du Club
 
Inscription : octobre 2005
Messages : 285
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 285
Points : 41
Points : 41
j'ai vérifié mon champ persistant LIV_ID est bien sur GeneratorField = arNone .

Ceci dit j'ai recréé mon champ LIV_ID non plus en auto mais en integer avec GeneratorField renseigné et là quand je saisi, j'ai bien mes numéros qui se suivent.

Celà me pose une autre question: Quand j'annule une saisie la numérotation tient compte du numéro annulé, existe il une méthode pour repartir à partir du dernier numéro saisi plus un ?
codial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 16h51   #18
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 757
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 757
Points : 6 777
Points : 6 777
Si tu appelles le GEN_ID avant le post (lors de la validation) normalement si tu annules ta saisie avant de poster, l'incrément n'est modifié (contrairement à 'sur le nouvel enregistrement').
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 17h19   #19
Membre du Club
 
Inscription : octobre 2005
Messages : 285
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 285
Points : 41
Points : 41
Bonsoir,

je te remercie pour pour tes réponses qui m'ont bien éclairées, effectivement j'avais mis le GeneratorField sur ' Sur le nouvel enregistrement' qui avait l'avantage de visualiser dès la saisie le numéro du bon (le champ incrémenté). Maintenant, sur 'lors de la validation' il s'affiche après. Mais bon ça me convient.

Encore merci pour ta patience.

Cordialement

Codial
codial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 17h26   #20
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 757
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 757
Points : 6 777
Points : 6 777
Citation:
Envoyé par codial
Encore merci pour ta patience.
Y a pas de quoi !!

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h37.


 
 
 
 
Partenaires

Hébergement Web