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 :

création dynamique d'une procedure stockée [FAQ]


Sujet :

Bases de données Delphi

  1. #1
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut création dynamique d'une procedure stockée
    J'ai besoin de créer dynamiquement une procédure stockée. J'utilise le SGBD Firebird et delphi 5.voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var qProc1: TIBQuery;
    with qProc1 do begin
           with SQL do begin
                 add('CREATE PROCEDURE PR_TARIF_BASE22 ( ');
                 add('       cle_categ integer,');
                 add('       cle_tarif integer)');
                 add('as');
                 add(begin);
                 add('select * from tb_table; ');
                 add(end);
                 end;
           qProc1.execsql;
           end;
    mail il y a une erreur au moment de l'exécution:
    Dynamic SQL Error sql error code = -104
    Token unknown -line 19, column 39
    ;'. Processus stoppé

    Apparemment c'est le point virgule après tb_table qui génère l'erreur mais je ne sais pas pourquoi.
    Quand j'enlève l'expression add('select * from tb_table;'); la procédure stockée est crée sans erreur;
    merci pour les collaborateurs

  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

    Bascule ParamCheck du TIBQuery à False avant de l'éxécuter afin que le Query ne fasse pas la confusion entre les paramètres propres à la PS et ceux du Query.

    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
    with qProc1 do 
    begin
      ParamCheck := False;
      with SQL do 
      begin
        Clear;
        Add('CREATE PROCEDURE PR_TARIF_BASE22 ( ');
        Add('       cle_categ integer,');
        Add('       cle_tarif integer)');
        Add('as');
        Add('begin');
        // etc...
        Add('end');
      end;
      ExecSQL;
    end;
    @+ Claudius

  3. #3
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    Les paramètres de la procédure stockées ne sont pas utilisés! Pour un essai, il faut faire preuve de plus d'imagination et de cohérence dans le code .

  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
    Citation Envoyé par chaplin Voir le message
    Les paramètres de la procédure stockées ne sont pas utilisés!
    En effet pas dans le code donné ci-dessus, mais puisque la PS possède 2 paramètres en entrée je suppose qu'ils trainent quelque part dans le corps de la PS.
    Et c'est pour cette raison que la création dynamique coince avec un ParamCheck à True.

    @+

  5. #5
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    A ce moment là un TIBSQL fait l'affaire, en tenant compte des même considérations, histoire d'apporter de l'eau au moulin .

  6. #6
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    Merci pour votre réponse. J'ai pas mis l'integralité du corps de la procédure car j'ai pensé que ce n'était pas nécessaire.

    Alors en ajoutant ParamCheck := false; ça a marché.
    Merci Cl@udius.

  7. #7
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    désoler de remettre ce poste au début, mais sa marche pas cher moi;
    avec delphi6+FB2, il me sort ce message, au dessous;
    la proecedure est:
    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
       ProcStock='SET TERM ^ ; '#13#10+
            'CREATE PROCEDURE ADD_PERSONNE '#13#10+
            ' (ID  integer, NOM VARCHAR(30), PRE VARCHAR(100), DATN date,SEX char) '#13#10+
            'RETURNS '+
            ' ( ID_PERS integer) '#13#10+
            'AS '#13#10+
            'BEGIN '#13#10+
            '    select ID_PERSONNE from PERSONNE where  PER_NOM starting with :NOM and '#13#10+
            '     PER_PRENOM starting with :PRE and PER_DATNAISS=:DATN into :ID_PERS; '#13#10+
            '    if (ID_PERS is null) then  '#13#10+
            '      begin '#13#10+
            '        ID_PERS= GEN_ID(JGEN,1); '#13#10+
            '        INSERT INTO PERSONNE (ID_PERSONNE, PER_NOM, PER_PRENOM,PER_GENRE, PER_TYPE, PER_DATNAISS, ID_ORTHALIS) '+
            '             values (:ID_PERS, :NOM, :PRE, :SEX, 1, :DATN,:ID); '#13#10+
            '      end '#13#10+
            '    INSERT INTO LNK_PERSONNE_TIERCEPARTIE (ID_PERSONNE, TIERCE_PARTIE,REF_PARTIE) '+
            '             VALUES (:ID_PERS, ''PLANMECA'', :ID); '#13#10+
            '    SUSPEND;  '#13#10+
            'END ^'#13#10+
           'SET TERM ; ^ ';
    merci de votre aide
    Images attachées Images attachées  

  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
    Salut Edam

    Si mes souvenirs sont bons, il ne faut pas inclure les SET TERM.

    @+

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    avec set terme j'ai un autre erreur, c'est que "term" n'est pas reconnus
    le message d'erreur d'en haut sans "set terme"
    bien sûr , j'ai essayer d'ajouter le ';' à la fin sans succée
    merci,

  10. #10
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    alors pas d'idée??

  11. #11
    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
    Si peut-être. Essaye de créer une PS soute simple, voire minimaliste, pour voir d'où vient le problème: le TxxxQuery ou le SGBD.

    @+

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 141
    Points : 41 308
    Points
    41 308
    Billets dans le blog
    63
    Par défaut
    je crois que c'est tout simplement parce que tu essaies de passer un script
    set term / procedure /set term
    par l'intermédiaire d'une query , je ne pense pas que cela soit possible,
    enfin ce ne l'était pas en D3 (j'ai jamais essayé par la suite) pour cela j'utilisais un TSQLScript (RxLib) puis avec D7 jvSQLScript (JVCL mais BDE uniquement) ou smSQLScript (smcomponents)

  13. #13
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    je crois que c'est tout simplement parce que tu essaies de passer un script
    voir ma réponse précédente,
    dans tout les cas merci de votre aide, je vais essayer de suivre le conseil de Claudios comme début

    [edit]
    merci Claudio sa marche, je ne sais pas pourquoi,je commence à éliminé tout puis remettre ligne par ligne, et sa marche à merveille
    merci à tout le monde

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

Discussions similaires

  1. champ dynamiques dans une procedure stockée
    Par augereau dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/11/2005, 07h52
  2. alternative à la création de vues dans une procedure stockée
    Par cladsam dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/09/2005, 17h07
  3. [FB1.5]Création dynamique d'une procédure stockée ?
    Par Sitting Bull dans le forum SQL
    Réponses: 3
    Dernier message: 10/12/2004, 14h44
  4. Réponses: 6
    Dernier message: 24/09/2004, 13h10
  5. Appel a une procedure stockée en vba
    Par The_Nail dans le forum VBA Access
    Réponses: 36
    Dernier message: 01/04/2003, 16h44

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