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

SQL Firebird Discussion :

Exécuter un gros bloc d'ordres en langage SQL


Sujet :

SQL Firebird

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut Exécuter un gros bloc d'ordres en langage SQL
    Bonjour à tous.tes,
    Je cherche la syntaxe SQL, et je dis bien SQL parce que j'ai besoin de lancer l'ordre depuis une appli, qui permet d'exécuter un gros bloc d'instruction, insert ou update, voire les deux, avec un seul accès à la base (Firebird / Delphi).
    Ceci pour optimiser les temps d'exécution sur une base distante.
    Merci d'avance pour vos propositions.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 022
    Points : 38 165
    Points
    38 165
    Billets dans le blog
    8
    Par défaut
    Bonjour,

    Pour éviter les allers et retours entre l'application et la database, créez une procédure stockée appelée par l'application.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Merci escartefigue.
    Mais ce n'est pas ce que je veux faire.
    Je voudrais connaitre l'ordre sql qui permet, s'il existe, d'exécuter un gros bloc d'ordres d'un coup, sans rendre la main au système.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 022
    Points : 38 165
    Points
    38 165
    Billets dans le blog
    8
    Par défaut
    Chaque ordre SQL accède à la base de données (ou au cache si les données concernées sont dans le cache), impossible de faire autrement.
    Quel est le but de la manoeuvre, que cherchez vous à faire fonctionnellement parlant ?

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    14 962
    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 : 14 962
    Points : 40 794
    Points
    40 794
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Pour moi, c'est toujours le même problème que cette question.
    Un mauvais choix de composant Delphi c.a.d. un FDQuery à la place d'un FDScript.
    FDScript est l'équivalent d'un EXECUTE BLOCK
    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

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Bonjour Sergio.
    Oui, tout à fait. Sauf qu'ici je voulais trouver l'ordre SQL équivalent à un EXECUTE BLOCK de FlameRobin. Donc à force d'essais, il s'avère qu'il suffit de retirer SET TERM et compagnie.
    La syntaxe que je cherchais est tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    EXECUTE BLOCK AS
    BEGIN
    ...
    END
    Et, du coup, ça marche avec un FDQuery.
    Je suis juste obligé de faire un compteur de caractères pour ne pas dépasser la limitation (j'ai des blocs de plus de 7000 lignes à exécuter).
    Au final, le résultat est que le EXECUTE BLOCK dans le FDQuery s'exécute en 3 minutes (lancé en boucle environ 60 fois), alors qu'avec le FDScript, la même opération prend 20 minutes.
    Donc, je pense que le FDScript exécute les lignes une à une et non pas "en bloc".
    C'est juste plus simple à utiliser.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    14 962
    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 : 14 962
    Points : 40 794
    Points
    40 794
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par DOliv Voir le message
    Donc, je pense que le FDScript exécute les lignes une à une et non pas "en bloc".
    C'est juste plus simple à utiliser.
    une à une si AutiCommit est à True ce qui n'est pas conseillé dans la doc.
    il faudrait faire un essai de Script avec SET AUTOCOMMIT OFF; en première ligne et faire un COMMIT; en fin de script. L'avantage en serait, AMHA, qu'il n'y aurait pas de limite de caractère
    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

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    J'ai déjà essayé après ton message de l'autre jour. Çà n'a rien changé. Je réessaierai à l'occasion.
    Pour l'heure, je n'arrive même plus à faire fonctionner le EXECUTE BLOCK .
    J'ai fait trop d'essais dans mon code, il faut que nettoie

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Ben... les "EXECUTE BLOCK" réussissent toutes les deux occurences
    Y a un truc que j'oublie de faire, mais quoi ?

    Concrètement :
    1 ok
    2 erreur
    3 ok
    4 erreur
    5 ok
    etc... jusqu'à 97

    Il s'agît d'INSERTs dans une table vide.
    Soit il n'aime pas les nombres paires, soit j'oublie de faire quelque chose en fin de boucle, mais quoi ?

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    14 962
    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 : 14 962
    Points : 40 794
    Points
    40 794
    Billets dans le blog
    62
    Par défaut
    Sans voir au moins 3 lignes de SQL difficile de le dire
    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 gros bloc d'ordres avec "Execute block"
    Par DOliv dans le forum Firebird
    Réponses: 13
    Dernier message: 12/05/2023, 10h19
  2. Réponses: 5
    Dernier message: 08/01/2009, 14h45
  3. Exécution Javascript en bloc
    Par aragornatm dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/12/2007, 19h38
  4. Réponses: 6
    Dernier message: 22/09/2005, 17h59

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