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 :

Exécuter un script firebird depuis delphi


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Points : 187
    Points
    187
    Par défaut Exécuter un script firebird depuis delphi
    Bonjour,

    Je dois modifier la structure de différentes bases de données existantes pour ajouter une colonne gérer un nouveau n° de séquence que sera utilisé par l'application.

    j'utilise un fichier texte qui contient le script de mise à jour à exécuter.

    Le fichier contient le script suivant :

    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
    SET SQL DIALECT 3;
     
    SET NAMES NONE;
     
    CREATE SEQUENCE NUMEROTATIONDOC;
     
    -- initialisation du compteur
    SET TERM ^ ; 
    EXECUTE BLOCK 
    AS 
    DECLARE LASTVALUE INTEGER; 
    BEGIN 
      SELECT max(numcontrat)+1 FROM contrat INTO :LASTVALUE; 
      EXECUTE STATEMENT 'ALTER SEQUENCE NUMEROTATIONDOC RESTART WITH ' || :LASTVALUE || ';'; 
    END^ 
    SET TERM ; ^ 
    COMMIT;
     
    -- recalcul des stats des index
    SET TERM ^ ; 
    EXECUTE BLOCK 
    AS 
    DECLARE INDEX_NAME VARCHAR(31); 
    BEGIN 
    FOR SELECT RDB$INDEX_NAME FROM RDB$INDICES INTO :INDEX_NAME DO 
      EXECUTE STATEMENT 'SET STATISTICS INDEX ' || :INDEX_NAME || ';'; 
    END^ 
    SET TERM ; ^ 
    COMMIT;
    Quand j'utilise l'éxécuteur de script d'IBExpert pour charger le script, il n'y a aucune erreur.

    Comme il y a pas mal de base a modifier, j'ai fait un exe qui charge un script sql et le lance sur les bases à mettre à jour.
    l'application delphi est faite en win32 avec BDS2006 .
    J'utilise le composant IBScript de la palette Interbase. en le chargeant avec ce fichier script.

    Il y a d'autres fichiers script de lancés séquentiellement mais c'est celui-là qui me pose problème.
    Quand il passe sur ce fichier, le composant ne renvoi aucune erreur mais rien n'est éxécuté et plus aucun script après celui-ci ne fonctionne.

    J'ai isolé les parties du script pour ne garder que :

    EXECUTE BLOCK
    AS
    DECLARE LASTVALUE INTEGER;
    BEGIN
    SELECT max(numcontrat)+1 FROM contrat INTO :LASTVALUE;
    EXECUTE STATEMENT 'ALTER SEQUENCE NUMEROTATIONDOC RESTART WITH ' || :LASTVALUE || ';';
    END^
    Le code pour le lancer est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        IBScript1.Terminator := '^' ;        
        IBScript1.Script.LoadFromFile(  chFile);
        IBScript1.ExecuteScript;
    (j'ai d'abord tester en conservant les instructions set term du script et en laissant ';' dans Terminator. Il n'y a pas de différence.)
    J'ai l'erreur:
    Dynamic SQL error
    SQL error code =-104
    Token unknown - line 5 ,column 46
    ?


    Qui correspond visiblement au ":" devant LASTVALUE

    sur le morceau
    EXECUTE BLOCK
    AS
    DECLARE INDEX_NAME VARCHAR(31);
    BEGIN
    FOR SELECT RDB$INDEX_NAME FROM RDB$INDICES INTO :INDEX_NAME DO
    EXECUTE STATEMENT 'SET STATISTICS INDEX ' || :INDEX_NAME || ';';
    END^
    J'ai la même erreur sur la position qui correspond au ":" devant INDEX_NAME

    Il y a visiblement quelque-chose qui m'échappe sur l’exécution des scripts qui contiennent des variables.

    Pour tester, il suffit d'une base avec une table contrat, et un champ numcontrat de type integer.

    Le script créé une sequence et lui attribue le dernier n° +1 utilisé dans la table contrat.


    Si vous avez des pistes, je suis preneur.
    Merci

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par RamDevTeam Voir le message
    Si vous avez des pistes, je suis preneur.
    Enlevez les deux-points ":" pour l'instruction EXECUTE STATEMENT...
    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
    SET SQL DIALECT 3;
     
    SET NAMES NONE;
     
    CREATE SEQUENCE NUMEROTATIONDOC;
     
    -- initialisation du compteur
    SET TERM ^ ; 
    EXECUTE BLOCK 
    AS 
    DECLARE LASTVALUE INTEGER; 
    BEGIN 
      SELECT max(numcontrat)+1 FROM contrat INTO :LASTVALUE; 
      EXECUTE STATEMENT 'ALTER SEQUENCE NUMEROTATIONDOC RESTART WITH ' || LASTVALUE || ';'; -- Pas de ":" ici...
    END^ 
    SET TERM ; ^ 
    COMMIT;
     
    -- recalcul des stats des index
    SET TERM ^ ; 
    EXECUTE BLOCK 
    AS 
    DECLARE INDEX_NAME VARCHAR(31); 
    BEGIN 
    FOR SELECT RDB$INDEX_NAME FROM RDB$INDICES INTO :INDEX_NAME DO 
      EXECUTE STATEMENT 'SET STATISTICS INDEX ' || INDEX_NAME || ';';   -- Pas de ":" ici non plus...
    END^ 
    SET TERM ; ^ 
    COMMIT;
    Philippe.

  3. #3
    Membre habitué
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Points : 187
    Points
    187
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Bonjour,
    Enlevez les deux-points ":" pour l'instruction EXECUTE STATEMENT...
    L'erreur se produit sur la ligne précédente.

    J'ai repris le code suivant de la faq firebird :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set term !! ;
     
    EXECUTE BLOCK AS
    declare variable index_name VARCHAR(31);
    BEGIN
    for select RDB$INDEX_NAME from RDB$INDICES into :index_name do
    execute statement 'SET statistics INDEX ' || :index_name || ';';
    END!!
     
    set term ; !!
    http://www.firebirdfaq.org/faq167/


    j'ai la même erreur comme-ci le composant IBScript ne supporter pas les ':'
    Il bloque sur la ligne FOR ...


    Est-ce que quelqu'un peux essayer de faire exécuter ce script par delphi ?

    J'ai essayé sans conviction avec un composant TSQLquery via dbExpress. mot clé TERM n'est pas connu
    idem avec la méthode Executecommand du TSQLConnection.

    Les scripts sont bons puisque les 2 sont exécutés sans problème avec l'utilitaire IBExpert et que le 2eme vient de la FAQ.
    Ca serait sympa si quelqu'un essayait de lancer le script issue de la faq depuis un composant IB dans delphi.

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 054
    Points : 40 998
    Points
    40 998
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Tout d'abord avec UIBScript , ôter les SET TERM (inutiles)
    et miracle code de la FAQ testé et exécuté sous D7 + UIB (2.1 sûr mais une version SVN)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre habitué
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Points : 187
    Points
    187
    Par défaut
    C'est une bonne nouvelle çà

    Il s'agit bien de ce compo là :
    http://scripts.filehungry.com/produc...ied_interbase/

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 054
    Points : 40 998
    Points
    40 998
    Billets dans le blog
    62
    Par défaut
    re,

    UIB oui , mais téléchargé et mis à jour via SVN https://svn.code.sf.net/p/uib/code
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. Exécuter un script shell depuis php
    Par allyass dans le forum Linux
    Réponses: 5
    Dernier message: 12/12/2009, 01h14
  2. Exécuter un script SQL depuis une procédure PL/SQL
    Par rvfranck dans le forum PL/SQL
    Réponses: 8
    Dernier message: 19/04/2008, 01h11
  3. Probleme d'exécution de script VB et Delphi
    Par neuneu1 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/02/2008, 19h09
  4. [CGI] Exécuter un script bash depuis le web
    Par Marco33 dans le forum Langage
    Réponses: 2
    Dernier message: 08/02/2007, 22h16
  5. exécuter un script vbs depuis asp
    Par creezeer dans le forum ASP
    Réponses: 1
    Dernier message: 20/03/2006, 16h36

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