IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

[Delhpi 7][Interbase][Compteur][Procédure stockée] Probléme d'accés à une valeur


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 55
    Points
    55
    Par défaut [Delhpi 7][Interbase][Compteur][Procédure stockée] Probléme d'accés à une valeur
    Comment accéder a la valeur renvoyer par le composant qui éxecute une procédure stockée ? (en l'occurence, un identifiant).

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    salut

    Avec IBStoredProc1.FieldByName('VariableDeRetour').

    @+

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 55
    Points
    55
    Par défaut
    Voici le code pour la base et le générateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    SET SQL DIALECT 3;
     
    /* CREATE DATABASE 'C:\TOTO.GDB' PAGE_SIZE 1024
     
     DEFAULT CHARACTER SET  */
     
    /* Table: ORDINATEUR, Owner: SYSDBA */
     
    CREATE TABLE "ORDINATEUR" 
    (
      "ORDI_ID"	INTEGER NOT NULL,
      "ORDI_NOM"	VARCHAR(15),
     PRIMARY KEY ("ORDI_ID")
    );
     
    CREATE GENERATOR "GEN_ORDI_ID";
    COMMIT WORK;
    SET AUTODDL OFF;
    SET TERM ^ ;
     
    /* Stored procedures */
     
    CREATE PROCEDURE "TABLE_GEN_ID" 
    RETURNS
    (
      "AVALUE" INTEGER
    )
    AS
    BEGIN EXIT; END ^
     
     
    ALTER PROCEDURE "TABLE_GEN_ID" 
    RETURNS
    (
      "AVALUE" INTEGER
    )
    AS
    BEGIN
    AVALUE = GEN_ID(GEN_ORDI_ID,1);
    END
     ^
     
    SET TERM ; ^
    COMMIT WORK;
    SET AUTODDL ON;
     
    /* Grant Roles for this database */
     
     
    /* Grant permissions for this database */
    Quelle est le nom de ma variable dans ce cas ?

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /* Stored procedures */
     
    CREATE PROCEDURE "TABLE_GEN_ID" 
    RETURNS
    (
      "AVALUE" INTEGER    <--- là : AVALUE
    )
    AS
    BEGIN EXIT; END ^
    @+

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 55
    Points
    55
    Par défaut
    Bon, ça me rassure, j'étais pas à côté de la plaque.
    Sous D7, quand je tape proc.fieldbyname('AVALUE').AsInteger, j'ai droit à un message d'erreur avec écrit proc : champ 'AVALUE' non trouvé.
    Tésté aussi avec 'avalue', des fois que...

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Ooops j'ai fais une erreur d'inattention. Il faut utiliser ParamByName.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      MaValeur := Proc.ParamByName('AVALUE').AsInteger;
    @+ Claudius

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 55
    Points
    55
    Par défaut
    Merci pour vos réponses rapides.

    Attention : le tuto de Kloo sur les compteurs auto-incrémentés ne convient pas à D7 ! (C'est FieldByName qui est utilisé !).

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    tu as le lien de ce tuto ?

    [edit]
    Ok, j'ai trouvé. Effectivement il y a peut-être un petit soucis...
    [/edit]

    @+

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 55
    Points
    55
    Par défaut
    A tout hasard, il est possible de remettre à zéro le générateur ?
    Pour l'instant, j'ai tenté via une procédure stockée

    CREATE PROCEDURE "INIT_GEN_ID"
    AS
    BEGIN
    SET GENERATOR GEN_ORDI_ID TO 1;
    END

    SET TERM ;
    Mais, ça ne fonctionne pas.

    Faut-il que j'efface la table, et que je la recrée avec le générateur intégré pour repartir de 1 ?

  10. #10
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Utilise un execute statement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SET TERM ^ ;
     
    CREATE PROCEDURE INIT_GEN_ID 
    AS
    BEGIN
     EXECUTE STATEMENT 'set generator GEN_ORDI_ID to 0';
    END^
     
    SET TERM ; ^
    La valeur du générateur doit être remis à 0, ainsi la 1° valeur générée sera égale à 1.

    @+ Claudius

  11. #11
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 55
    Points
    55
    Par défaut
    Désolé d'avoir mis autant de temps pour répondre...

    En y réfléchissant, j'ai besoin de regénérer ce générateur quand ma base est vide. Et ma base est généralement vidée via un clic droit sur ma_base.gdb suivi de "effacer".
    Donc, dans ma procédure CREATE, j'ai juste à m'occuper de la créatino d'un générateur !!!

    Mais ta réponse n'est pas perdue pour autant, je la garde à portée de main !!

    Merci pour tout.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Procédure stockée problème
    Par Kirua76 dans le forum Développement
    Réponses: 7
    Dernier message: 08/07/2011, 09h40
  2. Procédure stockée --> Problème de syntaxe
    Par skyline86 dans le forum Développement
    Réponses: 1
    Dernier message: 08/02/2010, 12h40
  3. Réponses: 5
    Dernier message: 09/05/2005, 12h24
  4. Réponses: 2
    Dernier message: 10/12/2004, 15h43
  5. - [procédure stockée] - Problème de Somme
    Par korrigann dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/05/2003, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo