[RESOLU] migration de Base HSQLBD vers Base Firebird

Bonjour,
J’ai voulu migré la base de données que j’avais créée pour mon association vers Base firebird, malheureusement j’ai deux requêtes qui m’ont produit des erreurs. Donc je suis revenu en arrière et j’essaie de réécrire une nouvelle base de données sur Base Firebird. Il s’agit de deux requêtes sur le calcul de l’age des adhérents et sur la moyenne d’âge. Après avoir traduit quelques pages du livre Firebird 2.5 Language Référence j’ai essayé de réécrire les requêtes pour firebird, en suivant les instruction du livre. Mais sincèrement je n’y arrive pas. Je vous donne la requête pour le calcul de l’age.
SELECT “Annee”, “Prenom”, “Nom”, “DateNaissance”, IIF( MONTH( CURRENT_DATE ) < MONTH( “DateNaissance” ), CAST( ( YEAR( CURRENT_DATE ) - YEAR( “DateNaissance” ) - 1 ) AS “VARCHAR” ) || ’ ans’, IIF( MONTH( CURRENT_DATE ) > MONTH( “DateNaissance” ), CAST( ( YEAR( CURRENT_DATE ) - YEAR( “DateNaissance” ) ) AS “VARCHAR” ) || ’ ans’, IIF( DAY( CURRENT_DATE ) >= DAY( “DateNaissance” ), CAST( ( YEAR( CURRENT_DATE ) - YEAR( “DateNaissance” ) ) AS “VARCHAR” ) || ’ ans’, CAST( ( YEAR( CURRENT_DATE ) - YEAR( “DateNaissance” ) - 1 ) AS “VARCHAR” ) || ’ ans’ ) ) ) “Age” FROM “AdherentsJDV” WHERE “Annee” = 2016

Lorsque je mets un ? WHERE la base plante. Sinon j’ai cette erreur «Code d’erreur: 1

firebird_sdbc error:
*Dynamic SQL Error
*SQL error code = -104
*Token unknown - line 1, column 56
*MONTH
caused by
‘isc_dsql_prepare’

C’est idem pour la moyenne d’âge
SELECT AVG( YEAR( NOW( ) ) - ( YEAR( “DateNaissance” ) ) ) “MoyenneAge” FROM “AdherentsJDV” WHERE “Annee” = ‘2016’

J’ai la même erreur

Code d’erreur: 1

firebird_sdbc error:
*Dynamic SQL Error
*SQL error code = -104
*Token unknown - line 1, column 13
*YEAR
caused by
‘isc_dsql_prepare’

Si vous pouviez m’aider à réécrire ces 2 requêtes Je vous remercie à l’avance

Bonjour,
Il existe un forum d’entraide Firebird. Peut-être une piste chez eux ?
Autrement, j’ai une question d’ordre général : quel est l’intérêt de passer de HSQLDB à Firebird ?

Le Problème ne vient pas de moi mais de Libre Office qui a intégrer le moteur firebird dans base et abandonnera dans un proche avenir son moteur de base intégrer HSQLBD. Pour moi la base de données que j’avais crée fonctionnait très bien. J’anticipe cette date ou HSQLBD ne sera plus intégrer à cette date

En regardant la doc Firebird, il me semble que pour avoir l’année ce n’est pas la fonction YEAR ( … ) mais EXTRACT (‘YEAR’ FROM …).
Il y a aussi des fonctions DATEADD & DATEDIFF qui devraient pouvair aider.

Bonjour

Le problème des paramètres se rencontrait également parfois depuis OOo. Une solution est de passer par l’étape intermédiaire de création de vue. Dans l’exemple joint j’ai décomposé en 2 vues et une requête (pas le temps de tester mais il doit être possible de fusionner les deux vues en une seule) :

  • View1: pour créer les champs jour, mois, an (pour alléger ensuite le calcul)
  • View2: pour calculer l’âge
  • Query1: pour saisie du paramètre

[AJOUT]

Désolé, j’ai en effet omis de joindre le SQL des vues (je pensais que seule la gestion du paramètre te posait problème).

Vue1

SELECT "ID_Table", "Nom", EXTRACT( DAY FROM "DateNaissance" ) "jour", EXTRACT( MONTH FROM "DateNaissance" ) "mois", EXTRACT( YEAR FROM "DateNaissance" ) "an" FROM "Table1"

Vue2

SELECT "ID_Table", "Nom", "jour", "mois", "an",

CASE
WHEN extract(Month from CURRENT_DATE) < "mois" or 
	( extract(Month from CURRENT_DATE) = "mois" and extract(day from CURRENT_DATE)<"jour" )   THEN
      datediff(year, "DateNaissance", CURRENT_DATE) -1
ELSE
      datediff(year, "DateNaissance", CURRENT_DATE) 
END as "Age"

from "View1"

Nota: pour cette instruction, il faut activer Exécuter directement l'instruction SQL

Cordialement

Je te remercie c’est une solution, pour calculer l’âge, mais je ne peux pas modifier les vues, elles sont bridées donc je ne peux pas modifier les vues pour l’adapter à ma base de données et comment se fait les calculs dans les vues. je pourrai peut-être l’adapter à ma base de données. Merci si je n’ai pas d’autres solutions c’est celle que j’adopterai.

@DanielLB j’ai complété ma réponse…

Cordialement

pierre-yves samyn J’ai réalisé les 2 vues comme tu me l’avais dit, la première fonctionne, mais la 2ème me met une erreur SQL Je suis sur UBUNTU 18.04 et j’ai LibreOffice 6.2. Je ne vois pas ou est l’erreur, Je crois qu’il est possible aussi de ne faire qu’une seule vue. Merci pour ta collaboration.

@DanielLB si ma base exemple fonctionne chez toi c’est que ton erreur provient de ton SQL et dans ce cas, sauf si tu joins ta base (limitée à ce qui est nécessaire pour reproduire) je ne vois pas comment il serait possible de t’aider davantage…

Bonsoir, pierre-yves samyn je tiens à te remercier, j’ai réussi à créé la vue et elle fonctionne à merveille. Dans mon esprit je comptais abandonner puisque je n’avais que des messages d’erreurs me disant parfois erreur SQL ou la colonne n’est pas reconnue. Il y a deux jours et je me suis demandé si elle fonctionnerait avec l’outil SQL et là surprise elle s’est exécutée. Donc je me suis demandé pour quelle raison il n’y a pas d’outil pour créer une vue en mode SQL, je n’utilisais que création de vue en mode ébauche. Dans le menu insertion j’ai vu que l’on pouvait créer des ébauche de tables et de vues et Affichage simple. Donc par hasard j’ai collé la requête dans ce menu. Lorsque j’ai voulu enregistré je me suis aperçu que c’était l’outil de création de vues SQL. Pour ma part je n’ai jamais utilisée les vues, sachant que les vues ne sont pas modifiables et les requêtes me convenait très bien.
Je pense que Libre Office devrait modifier le menu insertion et indiquer non pas Affichage libre mais Outil SQL pour les vues.
Merci encore, j’ai pratiquement terminé ma base de données il ne me reste que quelques rapports à réaliser et ensuite transférer les données de mon ancienne base vers la nouvelle.

@DanielLB

conseil d’utilisation de ce site : ne pas utiliser la fonction Répondre (sauf pour apporter une réponse bien sûr) mais privilégier éditer ou ajouter un commentaire.

Bonjour,
Les quelques essais que j’ai fait montrent que les fonctions EXTRACT fonctionnent bien dans la version LO actuelle sous W10. Pas testé sur ma version Ubuntu. Par contre, je ne maîtrise absolument pas le basic. Pour clarifier la question, il faudrait peut être ajouter le mot clé “Basic” pour intéresser ceux qui savent.
La fonction DATEDIFF a effectivement des limites (avec YEAR , la différence se fait au 1er janvier). Quelques essais négatifs. J’ai donc remplacé par un CASE WHEN (SQL pour IIF).

@Jacques-64 je ne vois pas ce que le basic vient faire ici ?

Cordialement

@pierre-yves samin Effectivement, il n’est absolument pas question de basic. J’ai dû confondre avec une autre question qui parlait de macro. Merci de m’excuser !