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

  1. #1
    Membre du Club
    Delphi XE6, champs persistants TSingleField et Quickreport
    Bonjour
    Voici le (petit) problème auquel je suis confronté
    Je développe une application de gestion en Delphi XE6 utilisant Firedac et Interbase 6.5.

    Suite à la migration d'Interbase 6.5 en Firebird 2.5 (SQLDialect 3, CharacterSet WIN1252), j'ai été obligé de repasser sur tous les champs persistants des TFDQuery afin de changer le type du champ :
    - TFloatField en TSingleField (si le champ en question n'est ni un champ calculé ni un champ résultant d'une opération effectuée en SQL)
    - TInteger en TLargeInt (si le champ en question est un champ résultant d'une opération effectuée en SQL)
    - TDateTime en TSQLTimeStamp (dans tous les cas)
    Si le changement est long et fastidieux, cela marche très bien.

    Ce changement a également été effectué sur les reports QuickReport (plus de 200 états). El là surprise !!!
    Le type TSingleField n'est pas reconnu par QuickReport 5.06 dans expressions.
    Seule astuce trouvée : effectuée une opération en SQL du type SELECT (MTT * 1) as MTT .... pour conserver la comptabilité avec QR.

    Est ce que quelqu'un aurait rencontré ce problème et éventuellement trouver une autre solution "plus propre" ?

  2. #2
    Rédacteur/Modérateur

    Bonjour,

    N'ayant pas/plus Quickreport, c'est surtout la partie migration qui m'intéresse : la partie FireDac
    Je n'avais pas fait attention aux champs dates déclarés TSQLTimeStamp par FireDac jusqu'à ce que je lise ce message
    AMHA il aurait été plus simple (je n'ai fait le test que sur la Date et avec Berlin je n'ai pas XE6) de définir des règles de mappage de données (partie options de la connexion ou propriété FormatOptions.MapRules)
    dtDateTimeStamp -> dtDateTime donnera au déclaration de champs un TDateTime "classique"
    je n'ai pas assez d'info pour suggérer les autres
    j'ai essayé sur mes propres bases de données les régles
    dtBCD -> dtDouble
    dtfmtBCD -> dtDouble
    pour obtenir directement un TFloatField sans succés, il doit me manquer quelque chose à propos du BCD
    Regarder l'étape 6 de Migration d'application BDE
    pourrais-tu fournir une structure de table et query ?
    [Edit] je viens de voir que l'on pouvait faire cela non pas au niveau de la connexion mais aussi au niveau de la Query ou de la table et sur une Colonne ou un Type de données défini en particulier
    reste que je n'ai toujours pas réussi à obtenir mon tfmtBCD en TFloatField mais cela doit être dans le domaine du possible (du moins sur le papier)
    [Edit bis]
    Nouvelle application, même table (sans les tâtonnements qui auraient pu être mémorisé) mais aussi avec Seattle (au cas où) et, ça y est j'ai bien mon TDateTime et mon TFloatField (et ce juste pours la colonne que je veux). Je pense que la solution "propre" passe par là
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd