Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
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 28/11/2007, 13h34   #1
Membre habitué
 
Inscription : juillet 2003
Messages : 672
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 672
Points : 142
Points : 142
Par défaut Existe-t'il une validation à demander apres INSERT ?

Bonjour,

Je débute avec IB, tout se passe cependant relativement bien mais j'ai un problème que je ne comprend pas :

Je crée un nouvel enregistrement dans une table avec la procédure SQL INSERT sous Delphi 2007 à l'aide d'une IBQUERY. Nota : Comme il n'existe pas le type COUNTER comme dans ACCESS j'utilise précédemment une IBTABLE et sa fonction last pour connaître le N° du dernier enregistrement que j'incrémente pour l'affecter à ma PRIMARY KEY déclarée INTEGER

ExecSQL s'effectue sans problème. Si je ferme mon logiciel, aucun problème l'enregistrement est créé je peux le lire dans IBConsole.

Mais si dans la foulée je crée un nouvel enregistrement sans quitter le logiciel et que veux appliquer une nouvelle fois la procédure INSERT pour effectuer ce second enregistrement l'enregistrement précédent n'est pas créé ! et naturellment IB m'adresse une erreur sur PRIMARY KEY car IBTABLE Last n'a pas comptabilisé le précédent enregistrement

Ais-je oublié d'appliquer une procédure SQL qui valide le premier enregistrement dans la table ? Si Oui laquelle ?
colorid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 13h38   #2
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
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 760
Points : 6 790
Points : 6 790
Salut

Pourquoi tu n'utilises pas un générateur ? Ils sont spécifiquement dédié à fournir une valeur pour ta PK.

@+ Claudius.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 14h22   #3
Membre habitué
 
Inscription : juillet 2003
Messages : 672
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 672
Points : 142
Points : 142
Par défaut j'veux bien mais comment

Je viens d'ACCESS et de la bureautique !
C'est déja pas mal que j'ai pu créer uen base IB, mais les générateurs connais pas !

Voici un exemple d'une table de ma base :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 //WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Création de la TABLE BATCH
  IbQuery1.Close;
  req := 'CREATE TABLE BATCH ('+
         ' BATCH_NO INTEGER NOT NULL, '+       // Clé primaire
         ' BATCH_PRODUCT INTEGER NOT NULL, '+    // Pointeur sur Product
         ' BATCH_CREATOR INTEGER NOT NULL, '+ // Pointeur sur Operator
         ' BATCH_QUANTITY INTEGER NOT NULL, '+ // Quantité en unité de production
         ' BATCH_CREATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP, '+// Date de création
         ' BATCH_NAME VARCHAR(32) NOT NULL, '+ // Nom de série du lot
         ' BATCH_USED BOOLEAN DEFAULT TRUE, '+      // booléen de supression logique
         ' CONSTRAINT PK_BATCH PRIMARY KEY(BATCH_NO) '+
         ')';
  IbQuery1.SQL.Clear;
  IbQuery1.SQL.ADD(req);
  IbQuery1.ExecSQL;
Peux-Tu me donner en exemple le code source pour créer ce génératerur ?
colorid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 14h34   #4
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
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 760
Points : 6 790
Points : 6 790
Re,

Citation:
Envoyé par colorid Voir le message
Peux-Tu me donner en exemple le code source pour créer ce génératerur ?
Je te conseille pour commencer de consulter ce chapitre de la FAQ IB/FB.

Je pense que y verra plus clair après.

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 15h28   #5
Membre habitué
 
Inscription : juillet 2003
Messages : 672
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 672
Points : 142
Points : 142
Par défaut Ok ca marche

Merci c'est assez clair. Je vais m'en occuper de suite
colorid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 18h19   #6
Membre à l'essai
 
Inscription : septembre 2002
Messages : 49
Détails du profil
Informations forums :
Inscription : septembre 2002
Messages : 49
Points : 23
Points : 23
j'ajoute que l'outil ibexpert (gratuit) te fera ton generateur en 3 coup de clic
et tellement d'autre manip aussi,

franchement IB sans IBexpert c'est comme aller à Dièpe sans voir la mer.

bonne soirée
julien
jupierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 18h33   #7
Membre habitué
 
Inscription : juillet 2003
Messages : 672
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 672
Points : 142
Points : 142
Par défaut Merci mille fois

Je n'ai que 12 tables et elles disposent toute d'un générateur grâce au forum.

Il n'empâche que je vais regarder d'un peu plus près l'outil ibexpert

Merci à tous
colorid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 20h10   #8
Membre éclairé
 
Avatar de TryExceptEnd
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 435
Points : 347
Points : 347
Citation:
Envoyé par colorid Voir le message
Bonjour,

Je débute avec IB, tout se passe cependant relativement bien mais j'ai un problème que je ne comprend pas :

Je crée un nouvel enregistrement dans une table avec la procédure SQL INSERT sous Delphi 2007 à l'aide d'une IBQUERY. Nota : Comme il n'existe pas le type COUNTER comme dans ACCESS j'utilise précédemment une IBTABLE et sa fonction last pour connaître le N° du dernier enregistrement que j'incrémente pour l'affecter à ma PRIMARY KEY déclarée INTEGER

ExecSQL s'effectue sans problème. Si je ferme mon logiciel, aucun problème l'enregistrement est créé je peux le lire dans IBConsole.

Mais si dans la foulée je crée un nouvel enregistrement sans quitter le logiciel et que veux appliquer une nouvelle fois la procédure INSERT pour effectuer ce second enregistrement l'enregistrement précédent n'est pas créé ! et naturellment IB m'adresse une erreur sur PRIMARY KEY car IBTABLE Last n'a pas comptabilisé le précédent enregistrement

Ais-je oublié d'appliquer une procédure SQL qui valide le premier enregistrement dans la table ? Si Oui laquelle ?
Je crois bien qu'il vous manque un COMMIT pour valider par le serveur IB l'insertion que vous faite.
Ceci dit, votre méthode est potentiellement créatrice de conflits, le mieux est bien de créer pour chaque table un champ auto-incrémenté.
__________________
Si vous êtes libre, choisissez le Logiciel Libre.
TryExceptEnd est dé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 01h42.


 
 
 
 
Partenaires

Hébergement Web