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 :

[FIREBIRD][FIREDAC] Taille maxi d'une chaine dans EXECUTE STATEMENT


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut [FIREBIRD][FIREDAC] Taille maxi d'une chaine dans EXECUTE STATEMENT
    Bonjour

    Je viens de me lancer à utiliser FIREDAC sous Delphi XE7 après avoir utilisé IBDAC.

    Dans une procédure stockée, j'utilise un EXECUTE STATEMENT d'une très grosse chaine (plus de 5000 caractères). Cette procedure fonctionne très bien sous IBDAC, mais sous FIREDAC je recois une exception :
    String right truncation expected length 2100, actual 5231
    Donc je comprends que FIREDAC ne gère pas dans cette fonction des chaines de plus de 2100 caractères.

    j'ai 2 questions:
    1 - Y a t il un moyen d'augmenter la taille limite de cette chaine ?
    2 - Quelle est cette limitation pour FIREDAC dans la version utilisée avec la dernière version de Delphi ?


    merci d'avance

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 658
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Je ne suis pas sûr que le problème soit là, une procédure stockée c'est dans firebird donc si la chaine est dans firebird pas de soucis.
    Ou alors ce statement est un paramètre de la procédure ? (dangereux ça) auquel cas le problème est uniquement est problème de taille de paramètre.

  3. #3
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    Re

    Je suis bien d'accord c'est assez curieux, mais cela correspondant bien à la taille de la chaine dans la PS lancé par le EXECUTE STATEMENT.

    En utilisant IBDAC cela fonctionne sans problème...

    des idées ?
    merci

  4. #4
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Bonjour

    Ca m'intrigue aussi. Rien vu passer là dessus, mais seul un test avec la dernière version pourrait confirmé s'il y a eu modification.

    Comme proposé tout à l'heure pour un autre projet, s'il n'y a pas de dépendances à des produits tiers, je peux exceptionnellement faire une compilation du source en 10.4.1 et te fournir l'exe à tester.

    S'il était possible de faire un programme avec juste la requête et une base de test, ça mériterait d'être remonté si ça ne tourne pas avec la 10.4.1

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 658
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je n'arrive toujours pas à comprendre
    -côté Firebird une chaine (varchar) peut faire jusqu'à 32765 caractères donc de ce côté 5000 passe sans soucis
    -Côté Firedac j'ai vu passé une dicussion où c'était plus de 8000 le problème pour les paramètres la suggestion élégante de passer par un blob (ftmemo)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ss := TStringStream.Create(log);
    p.LoadFromStream(ss, ftMemo);
    semble avoir clos le sujet. Je me demande si un ParambyName('stmt').asMemo n'aurait pas fonctionné

    Mais je n'ai toujours pas compris :
    - le processus exact ni l'environnement , XE7 et Firebird 2.5 ou 3 ?
    - le passage de ce Statement est-ce vraiment via un paramêtre genre :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE PROCEDURE TEST(STMT VARCHAR(6000)) 
    AS
    BEGIN
    EXECUTE STATEMENT STMT; 
    END;

    Sans parler du fait que ce soit dangeureux je n'arrive pas à voir une explication logique à ce genre de chose. J'utilise rarement des EXECUTE STATEMENT (uniquement sur des requêtes sur bases externes) et ces clauses, même paramètrées (oui c'est possible ) , sont toujours internes à la procédure

    Enfin, derniers points
    - est-ce que la taille du paramètre (si paramètre il y a ) est indiquée, pas juste type String ?
    Nom : Capture.PNG
Affichages : 194
Taille : 13,7 Ko
    il me semble que ce serait facile à vérifier

    - il faut savoir que quelques fois Firebird lève une erreur avec une mauvaise description cela pourrait-il en faire partie ...

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    String right truncation expected length 2100, actual 5231
    ça ressemble à vouloir stocker une chaîne de 5231 caractères dans un VARCHAR(2100)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/05/2012, 18h58
  2. Réponses: 1
    Dernier message: 14/02/2008, 08h37
  3. Comment surligner une chaine dans un RichEdit
    Par esteban63 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/09/2005, 00h33
  4. [JSP] mettre une chaine dans un format precis
    Par logica dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/06/2005, 10h21
  5. Réponses: 2
    Dernier message: 10/07/2002, 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