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 :

Probleme Firebird et DBExpress de DELPHI XE3


Sujet :

Firebird

  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut Probleme Firebird et DBExpress de DELPHI XE3
    Bonjour tout le monde;
    J'ai un problème avec les requêtes qui utilisent des champs float d'une base de données Firebird.
    J'utilise Firebird 2.5, Delphi XE3 (les composant DBExpress).
    Si je fait un cast des champs float en numéric ça marche, sinon, j'ai un message "Opération non applicable".
    J'avais les même requêtes sous Firebird 2.5 et Delphi 2009 et ça marchait très bien.
    Est ce qu'il existe une solution à ce problème?
    Deux personnes n'apprennent pas, un arrogant et un timide.

  2. #2
    Rédacteur/Modérateur

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

    il faudrait déjà montrer les requêtes mais il s'agit peut être d'un problème de point décimal
    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 habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut
    Merci Sergio;
    La requête est simple :: "Select * from table" écrite dans la commandText d'un composant TSimpleDataset.
    Si "table" dans firebird contient un champ de type "Float" alors :
    1- si j'essaye d'activer le composant 'TSimpleDataset' dans delphi xe3 en conception, j'ai le message 'Opération non applicable'
    2- si je l'active en exécution, les valeurs des champs concernés ne sont pas retournées.
    Deux personnes n'apprennent pas, un arrogant et un timide.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2006
    Messages : 249
    Points : 165
    Points
    165
    Par défaut Solution de contournement
    Bonsoir tout le monde;
    Je me suis retrouvé obligé de convertir mes champs de types Float en types Deciaml(15,3).
    Pour cela et pour faciliter la tâche, j'ai utiliser cette méthode :
    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
     
    IBQuery2.Close;
    IBQuery2.SQL.Clear;
    IBQuery2.SQL.add('SELECT trim(RF.RDB$RELATION_NAME) as table_name, TRIM(RF.RDB$FIELD_NAME) FIELD_NAME FROM RDB$RELATION_FIELDS RF '
                    +' JOIN RDB$FIELDS F ON (F.RDB$FIELD_NAME = RF.RDB$FIELD_SOURCE) '
                    +' WHERE (COALESCE(RF.RDB$SYSTEM_FLAG, 0) = 0) and F.RDB$FIELD_TYPE = 10');
    IBQuery2.open;
    IBQuery2.First;
    while not IBQuery2.Eof do
    begin
      execute_query('alter table '+IBQuery2['table_name']+' add vv DECIMAL(15,3)');
      execute_query('update '+IBQuery2['table_name']+' set vv = '+IbQuery2['FIELD_NAME']);
      execute_query('alter table '+IBQuery2['table_name']+' drop '+IbQuery2['FIELD_NAME']);
      execute_query('alter table '+IBQuery2['table_name']+' alter vv to '+IbQuery2['FIELD_NAME']);
      IBQuery2.Next;
    end;
    IBQuery2.close;
    avec
    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
     
    procedure execute_query(cmd:string);
    begin
      try
      if not IBDatabase1.Connected then IBDatabase1.Open;
      IF IBTransaction1.InTransaction Then IBTransaction1.Commit;
      IBQuery1.Close;
      IBQuery1.SQL.Clear;
      IBQuery1.SQL.add(cmd);
      IBTransaction1.StartTransaction;
      IBQuery1.ExecSQL;
      IBTransaction1.Commit;
      Except
      end;
        IBQuery1.Close;
    end;
    Deux personnes n'apprennent pas, un arrogant et un timide.

Discussions similaires

  1. Delphi XE3 et DBExpress
    Par Laskar dans le forum EDI
    Réponses: 3
    Dernier message: 12/11/2014, 07h51
  2. Problème DBExpress Delphi XE3 et FireBird 2.5
    Par Moez.B dans le forum Bases de données
    Réponses: 9
    Dernier message: 19/05/2013, 13h35
  3. Réponses: 1
    Dernier message: 26/03/2013, 22h33
  4. [Tutoriel] Delphi 2010 : Connexion à Firebird via dbExpress
    Par evarisnea dans le forum Bases de données
    Réponses: 30
    Dernier message: 24/10/2012, 16h11

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