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

Composants VCL Delphi Discussion :

Firebird Zeoslib composant Zsqlprocessor script avec paramètre


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 138
    Points : 113
    Points
    113
    Par défaut Firebird Zeoslib composant Zsqlprocessor script avec paramètre
    Bonjour,
    Je voudrais insérer des données d'une table à une autre de 2 bases firebird (la même strucure de champs) et pour ce j'utilise le script suivant
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    EXECUTE BLOCK AS
    DECLARE   cpt  VARCHAR(1) ;
    DECLARE dcpt  VARCHAR(20);
     
     
    BEGIN
       FOR EXECUTE STATEMENT 
          'SELECT cpt , dcpt   colonneN FROM compte'
          ON EXTERNAL DATA SOURCE 'localhost:C:\LIB.FDB'
          AS USER 'SYSDBA' PASSWORD 'masterkey'
       INTO :cpt, :dcpt
       DO 
          INSERT INTO compte(cpt,dcpt)
             VALUES(:cpt, :dcpt);
    END
    Je voudrais mettre le chemin de la base 'localhost:C:\LI.FDB' comme paramètre (pour que je puisse changer le chemin de la base) mais en vain .
    Je précise que je travail avec delphi 7 zeo 7.1.4 et le composant zsqlprocessor pour le script.
    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 175
    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 175
    Points : 41 367
    Points
    41 367
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    je ne suis pas sur qu'un paramètre puisse être utilisé avec TZSQLProcessor, du moins dans ce cas et sous cette forme
    je procéderai plutôt en jouant sur le texte du script
    plusieurs solutions pour cela :

    soit le script
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    EXECUTE BLOCK AS
    DECLARE cpt VARCHAR(1) ;
    DECLARE dcpt VARCHAR(20);
    BEGIN
    FOR EXECUTE STATEMENT
    'SELECT cpt , dcpt colonneN FROM compte'
    ON EXTERNAL DATA SOURCE 
    [base]
    AS USER 'SYSDBA' PASSWORD 'masterkey'
    INTO :cpt, :dcpt
    DO
    INSERT INTO compte(cpt,dcpt)
    VALUES(:cpt, :dcpt);
    END
    remplacer la ligne complete ZSQLProcessor.Script.lines[8]:=QuotedStr('localhost:C:\LIB.FDB');si le script ne s'exécute qu'une fois on peut aussi utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZSQLProcessor.Script.Text:=StringReplace(ZSQLProcessor.Script.Text,'[base]',QuotedStr('localhost:C:\LIB.FDB'),[rfReplaceall]);
    Ceci étant, coté Firebird :
    1-EXECUTE BLOCK accepte des paramètres https://firebirdsql.org/refdocs/lang...execblock.html
    2-EXECUTE STATEMENT aussi https://firebirdsql.org/refdocs/lang...-execstat.html

    pour le point 1, logiquement, selon la doc il faudrait écrire EXECUTE BLOCK (base varchar(80)=? ) AS, cependant cette remarque de la doc
    The server only accepts question marks (“?”) as placeholders for the input values, not “:a”, “:MyParam” etc., or literal values. Client software may support the “:xxx” form though, which it will preprocess before sending it to the server.
    fait reposer l'interprétation de la forme EXECUTE BLOCK (:base) sur les épaules de ZEOSLIB, je ne sais pas si elles sont assez larges

    pour le point 2 par contre, si le point 1 passe, moins de soucis
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    stmt='SELECT cpt , dcpt colonneN FROM compte ON EXTERNAL DATA SOURCE :base AS USER 'SYSDBA' PASSWORD 'masterkey' INTO :cpt, :dcpt';
    for execute statement (stmt) (:base) do ...
    passera peut-être, sinon à la bonne vieille concaténation de travailler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    STMT='SELECT cpt , dcpt colonneN FROM compte ON EXTERNAL DATA SOURCE "'||:base||'" AS USER "SYSDBA" PASSWORD "masterkey" INTO :cpt, :dcpt';
    Franchement, les solutions de remplacement dans ZQLProcessor sont plus simples, plus sûres et moins aléatoires

  3. #3
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 138
    Points : 113
    Points
    113
    Par défaut
    Bonjour

    Citation Envoyé par SergioMaster Voir le message
    si le script ne s'exécute qu'une fois on peut aussi utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZSQLProcessor.Script.Text:=StringReplace(ZSQLProcessor.Script.Text,'[base]',QuotedStr('localhost:C:\LIB.FDB'),[rfReplaceall]);

    Merci ça marche.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/09/2009, 10h14
  2. Réponses: 6
    Dernier message: 23/05/2005, 08h33
  3. [Creation composant visuel] Problème avec le focus
    Par Ingham dans le forum Composants VCL
    Réponses: 9
    Dernier message: 23/09/2004, 16h59
  4. Script avec JOINTURE et CASE
    Par Labienus dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/02/2004, 09h40
  5. [composant][MX_2004_pro] prob avec scrollpane
    Par scorpiwolf dans le forum Flash
    Réponses: 6
    Dernier message: 12/01/2004, 20h18

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