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

Firebird Discussion :

firebird3, problème pour lire la valeur d'un champ blob dans un mémo.


Sujet :

Firebird

  1. #1
    Membre du Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2014
    Messages : 102
    Points : 53
    Points
    53
    Par défaut firebird3, problème pour lire la valeur d'un champ blob dans un mémo.
    Serveur linux :
    Firebird-3.0.4.33054-0.amd64 sous CentOS 7
    champ Texte: BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET NONE
    Client windows :
    Firebird-3.0.4.33054_0_x64.exe sous Windows 10
    Delphi Rio 10.3.1, application VCL windows.
    Bdd lues par un connecteur firedac TDBConnection, driver fb
    composant TDBMemo lié au champ TEXTE d’une table firedac
    Problème:
    blob lu avec IBExpert sans problème (plusieurs lignes accents et caractères spéciaux)
    blob lu dans le memo: seulement la première lettre

    En local sur le poste, pas de problème
    client et serveur: Firebird-3.0.4.33054_0_x64.exe sous Windows 10
    blob lu avec IBExpert = blob lu dans le memo

    Auriez vous une idée de ce qui ne va pas ?
    Cela peut-il venir d'une dll ?

  2. #2
    Rédacteur/Modérateur

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

    je n'ai pas pu faire un test complet par manque de moyen (pas de Firebird serveur sur LINUX sous la main)
    une DLL c'est possible IBExpert utilisant sa propre copie de fbclient.
    un test infaillible, copier fbclient.dll (bonne version, bon nombre de bits en fonction du programme cela va de soi) dans le répertoire de l'application
    Attention en mode debug c'est une version 32 bits
    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

  3. #3
    Membre du Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2014
    Messages : 102
    Points : 53
    Points
    53
    Par défaut
    Bonjour, je reprends seulement ayant du m'absenter …
    Merci pour la réponse, mettre la dll windows dans le répertoire de l'application ne change rien.
    j'ai essayé avec C:\Program Files\Firebird\Firebird_3_0\WOW64\fbclient.dll
    et aussi avec C:\Program Files\Firebird\Firebird_3_0\fbclient.dll qui est, je pense, la dll pour 32 bits ?
    Le serveur firebird étant en linux ce n'est probablement pas celles qu'il me faut.
    le serveur firebird utilise /usr/lib/libfbclient.so.3.0.4 installée avec le serveur
    je ne vois pas de version 3 dans /usr/lib/
    or delphi, installé en 32 bits, doit chercher dans /usr/lib / ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par GrPtj Voir le message
    j'ai essayé avec C:\Program Files\Firebird\Firebird_3_0\WOW64\fbclient.dll
    et aussi avec C:\Program Files\Firebird\Firebird_3_0\fbclient.dll qui est, je pense, la dll pour 32 bits ?
    Non c'est l'inverse, wow64 indique que c'est une bibliothèque à émuler en 64 bits ainsi en a décidé Deus Microsoft
    Et ce n'est pas côté serveur Firebird qu'il faut faire quoique ce soit mais bien du côté poste de développement
    En mode design c'est la dll 32 bits qui est utilisée (donc celle dans syswow64) en mode exécution du programme c'est selon la version du programme et donc de la compilation Delphi.

    je n'ai pas pu faire un test complet par manque de moyen (pas de Firebird serveur sur LINUX sous la main)
    Mes moyens ont évolués et après quelques galères dues à mon firebird.conf sous linux cf cette discussion dès que j'ai le temps je ferai un petit test
    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 du Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2014
    Messages : 102
    Points : 53
    Points
    53
    Par défaut
    En mode design c'est la dll 32 bits qui est utilisée (donc celle dans syswow64) en mode exécution du programme c'est selon la version du programme et donc de la compilation Delphi.
    Du coup c'est assez étrange que je n'ai pas de problème en local et seulement sur le linux distant.

    -en debug, fbclient de syswow64, lecture du blob ok
    -poste windows et firebird en 64, mais delphi installé en 32, du coup mon application s'exécute en 32 non ?
    pour l'exe sur mon poste Windows pointant sur le firebird de ce même poste, lecture du blob ok

    -pour l'exe sur mon poste Windows pointant sur le firebird am64 du serveur sous CentOs, lecture du blob -> Seule la première lettre lue ...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 245
    Points : 534
    Points
    534
    Par défaut
    Bonjour,

    La version de fbclient.dll à utiliser doit toujours correspondre à la version 32b ou 64b de votre exécutable, indifféremment de la version du serveur (qu'il soit Windows ou Linux). Le seul cas où le serveur doit être de la même version que l'exécutable, c'est si vous utilisez Firebird embedded.
    Par contre votre problème peut provenir d'un mauvais choix de jeu de caractères de connexion: il est préférable de choisir celui utilisé en interne par votre exécutable. Sous D7 j'utilise WIN1252, sous Lazarus UTF8. Mais toujours se rappeler que le serveur ne fait le transcodage que si les jeux de caractères de connexion et de codage dans le champ de la base sont différents, émettant une erreur en refusant les caractères appartenant à un seul des 2 jeux. Par contre si les 2 jeux sont identiques le serveur ne fait aucun contrôle, autorisant l'écriture de caractères inexistants dans le jeu utilisé dans le champ. La base peut alors devenir inutilisable depuis un logiciel utilisant un jeu de caractères de connexion différent.

    André

  7. #7
    Rédacteur/Modérateur

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

    J'ai pris le temps de faire le test. AMHA le problème se situe dans votre programme
    ces deux images écrans pour le prouver, la base de données (la classique employee.fdb) est sur mon poste Ubuntu
    VCL
    Nom : Capture_1.PNG
Affichages : 343
Taille : 17,4 Ko
    FMX
    Nom : Capture.PNG
Affichages : 382
Taille : 23,1 Ko
    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
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2014
    Messages : 102
    Points : 53
    Points
    53
    Par défaut
    Merci d'avoir pris le temps de tester.
    je résume la question :
    1. sur un poste windows 10 avec Firebird-3.0.4.33054_0_x64, les blobs sont mal lus depuis une appli avec connexion firedac compilée en win32
    quand la Bdd se trouve sur le même poste
    2. sur un poste windows 10 avec Firebird-3.0.4.33054_0_x64, les blobs sont mal lus depuis une appli avec connexion firedac compilée en win32
    quand la Bdd se trouve sur un poste CentOs 7 avec Firebird-3.0.4.33054-0.amd64

    D'après les réponses précédentes :
    - On exclut le problème de versions windows/linux.
    - On exclut le problème de dll car la même dll est utilisée dans les 2 cas.

    Du coup peut il y avoir un problème de jeu de caractère ?
    La base locale est un backup/restaure de la base distante donc même paramètres je pense.
    Le connecteur firedac est le même donc même paramètres. J'ai essayé CharacterSet=UTF8 et CharacterSet=NONE, cela ne change pas la lecture du blob.

    Je ne vois pas trop où chercher ...

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Essayez comme moi avec un simple programme se connectant sur employee, je n'ai même pas eu besoin de compiler pour vérifier
    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

  10. #10
    Membre du Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2014
    Messages : 102
    Points : 53
    Points
    53
    Par défaut
    je ne vois pas le dossier d'exemple avec la table employee dans mon install ...

  11. #11
    Membre du Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2014
    Messages : 102
    Points : 53
    Points
    53
    Par défaut
    je vous prie de m'excuser, je cherchais dans embarcadero
    je continue mes tests lundi.

  12. #12
    Membre du Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2014
    Messages : 102
    Points : 53
    Points
    53
    Par défaut
    Bonjour, j'ai repris avec succès mes recherches avec la base employee comme préconisé
    nouveau projet / connexion sur employee -> ok
    nouveau projet / connexion sur MaTable -> ok
    Pour les caractère accentués :
    Mon projet / connexion sur employee -> ok, il y avait une modif du CharacterSet qui trainait dans la suite du code
    > Il me reste une question: pourquoi la définition du characterSet ne posait-elle pas de problème en local ?
    probablement est-ce l'explication de Alanglet : se rappeler que le serveur ne fait le transcodage que si les jeux de caractères de connexion et de codage dans le champ de la base sont différents ?

    Pour le fait de n'afficher que la première lettre du blob :
    pb causé par le champ à afficher de type ftmemo avec displaywidth = 10
    résolu en supprimant les champs définis dans la requête.
    > Il me reste donc une question: De quel type le champ devrait-il être pour qu'il soit lu correctement, dans un cas où la définition des champs dans la requête serait nécessaire ? j'ai essayé sans plus de succès ftwidememo.

    Merci pour votre aide

Discussions similaires

  1. Problème pour lire la valeur d'un bouton radio
    Par Python_addict dans le forum Tkinter
    Réponses: 3
    Dernier message: 01/08/2018, 15h03
  2. Réponses: 9
    Dernier message: 07/03/2018, 15h01
  3. Problème pour lire une valeur dans une cell
    Par heiriquent dans le forum MATLAB
    Réponses: 4
    Dernier message: 28/07/2013, 23h26
  4. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 16h41
  5. Problème pour classer les valeurs d'un champ
    Par AjJi dans le forum Access
    Réponses: 11
    Dernier message: 06/04/2006, 09h19

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