Techniques pour débuter avec le module Base

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur: Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.

Techniques pour débuter sous Base

Messagepar Bidouille » 17 Jan 2006 12:49

Vous débutez avec Base ?

Avant de poster pour nous dire "je n'y connais rien mais je voudrais faire...", voici quelques pistes pour vous mettre le pied à l'étrier :

  1. Consultez la rubrique Tutoriels qui comprend des ressources pour démarrer
  2. Avez-vous regardé dans la documentation conçue par les bénévoles ?
  3. Pensez aussi à lire le Wiki et ses FAQ dédiées

Si vous avez un projet, il y a peut être quelque chose de déjà réalisé dans la section éponyme.
Mieux vaut enrichir que de réinventer.

.
Dernière édition par Bidouille le 13 Oct 2006 11:33, édité 1 fois.
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 9952
Inscrit le : 08 Nov 2005 17:23
Localisation : Brest, France

Techniques pour débuter avec le module Base

Messagepar archiifk » 22 Mars 2006 18:29

Le modérateur a écrit: :alerte: Aucune question n'est autorisée dans ce post-it !
Si vous avez un problème de compréhension, ouvrez un nouveau fil de discussion.


Utiliser les commandes système HSQLDB

après avoir traduit le premier chapitre de la dooc officielle de HSQLDB, entamer le second, et traduit un certain nombre de commandes SQL, j'ai chercher à attaquer une base créée avec OOo.

bon ca n'a pas été si simple, j'ai fini par installer HSQLDB v 1.8 qui ne marchait pas, l'une des première version qui marchait, comparer les différences réussie à corriger et exécuter HSQLDB 1.8.

Enfin par analogie j'ai réussi à lancer le manager fourni avec HSQLDB integré dans OOo.

Cela est intéressant pour des taches d'administration (sauvegarde, dump...)

Pour ceux que cela intéresse les explications sont
http://archiifk.mageos.com/OOo/Base/Base.htm lien mort
et
http://archiifk.mageos.com/OOo/Base/guide_base_fr.html lien mort

Nouvelles sources d'informations disponibles :
archiifk
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 20
Inscrit le : 22 Fév 2006 15:47

Techniques pour débuter avec OOo Base

Messagepar cris59 » 13 Juin 2006 08:50

Bien utiliser le SQL


Rappel

Dans OOoBase, vous pouvez faire :

- des requêtes de type SELECT dans la section requête en vue SQL

- tous types de requêtes dans Outils / SQL ...


Exemples de requêtes

1. Total d'un champ pour l'année en cours

Code : Tout sélectionner   AgrandirRéduire
SELECT SUM("TVA196") AS "Total" FROM "TFactures" WHERE YEAR("DateEmission") = YEAR(NOW( ))


Note : MONTH("DateEmission") = MONTH(NOW( )) pour le mois en cours


2. Total d'un champ entre 2 dates particulières

Code : Tout sélectionner   AgrandirRéduire
SELECT SUM("TVA196") AS "Total" FROM  "TFactures"  WHERE  "DateEmission" >=  '2006-01-01' AND "DateEmission"  < '2006-04-01'


Note : format de date aaaa-mm-jj (ou yyyy-mm-dd)


3. Le montant total, le nombre et le taux moyen des factures par client, avec concaténation des champs Nom et Prénom... les données proviennent de 2 tables liées par RefClient

Code : Tout sélectionner   AgrandirRéduire
SELECT CONCAT("TClients"."Nom" || '  ' || "TClients"."Prenom") AS "Nom & Prénom", SUM("TFactures"."Montant") AS "Total", COUNT("TFactures"."Montant") AS "Nombre", AVG("TFactures"."Montant") AS "Moyenne" FROM "TFactures", "TClients" WHERE ("TFactures"."RefClient" = "TClients"."RefClient") GROUP BY "TFactures"."RefClient"  ORDER BY "Nom & Prénom" ASC


Note : ce type de concaténation est mieux accepté

Code : Tout sélectionner   AgrandirRéduire
CONCAT("TClients"."Nom", CONCAT(' ', "TClients"."Prenom")) AS "Nom & Prénom"




4. Mise à jour d'une table avec mise en majuscule du Nom

Code : Tout sélectionner   AgrandirRéduire
UPDATE "TClients" SET "RaisonSociale" = 'Les Arts d''Aujourd''hui', "Nom" = UCASE('debrier') WHERE "RefClient"=12



5. Sélection sur un champ booléen

Code : Tout sélectionner   AgrandirRéduire
SELECT "Titre" FROM "TLivres" WHERE "Nouvelle" = True



6. Insertion d'un enregistrement dans une table

Code : Tout sélectionner   AgrandirRéduire
INSERT INTO "TLivres" ("Titre", "RefAuteur", "Nouvelle") Values ('Les jeux de l''esprit', 12, False)




Requêtes par macros

https://forum.openoffice.org/fr/forum/ftopic1454.html


cris59

PS : ces requêtes ont été testée, mais elles peuvent, peut-être, être améliorées ...
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
 
Message(s) : 482
Inscrit le : 20 Mars 2006 16:15
Localisation : Paris

Sélection dans une liste et affichage des données

Messagepar Bidouille » 06 Déc 2006 10:47

Cette exemple fonctionne avec une macro : si vous avez des questions, merci de vous référer au bandeau rouge en haut de la page.

Dans cette exemple, le formulaire utilise une combo et deux champs texte. La sélection d'un nom depuis la combo permet l'affichage des données.

Image

Le fichier Base est téléchargeable ici

Pour que cela fonctionne, vous devez créer un lien "source de données" TEST (attention à la casse) vers le fichier ODB que vous venez d'enregistrer.

Image

.
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 9952
Inscrit le : 08 Nov 2005 17:23
Localisation : Brest, France

Messagepar Dude » 15 Déc 2006 09:22

Ouverture et fermeture de formulaire

Image

Cette base de données contient un formulaire général qui permet de lancer via des boutons quatre autres formulaires. Sur chaque formulaire appelé, un bouton permet également de le fermer.

Un très bon exemple si vous débutez : https://forum.openoffice.org/fr/ci-joint/fichier/2007/09/26-125443.odb

Attention ! Depuis la 3.1.0 et l'intégration de macro directement dans un ODB, on peut maintenant ouvrir un formulaire à l'ouverture de la base.
Voici le même exemple :
ouvreForm31.odb
(47.56 Kio) Téléchargé 2538 fois


Si vous avez des questions, vous devez les poster dans la section Macros et API.

:idea:
Dernière édition par Dude le 22 Juil 2009 10:04, édité 2 fois.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20591
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

[Résolu] Base Oo - Requête SQL

Messagepar neness » 12 Fév 2007 00:37

Bonsoir à tous,
Voici une requête SQL que j'ai réussie à trouver, oui, oui. Elle permet de sélectionner tous les enregistrements dont la date n'a pas été saisie et ceux saisis pour un mois désiré de l'année courante.
A toutes fins utiles.
(L'ami Bronchart que je salue au passage m'a mis sur la voie) :wink:

Code : Tout sélectionner   AgrandirRéduire
SELECT "T_Activite".*, YEAR( "Date" ), MONTH( "Date ), "T_Activite"."Date_" FROM "T_Activite" WHERE ( ( YEAR( "Date" ) = YEAR( NOW( ) ) AND MONTH( "Date" ) = :indiquez_ici_le_numero_du_mois ) OR ( "Date" IS NULL ) )
XP -SP2 - Oo version 2.1
neness
Membre lOOyal
Membre lOOyal
 
Message(s) : 30
Inscrit le : 18 Nov 2006 16:41
Localisation : Ain (01)

Avec quel moteur je tourne ?

Messagepar Dude » 15 Avr 2008 13:54

Connaître le moteur de base de données utilisé par mon fichier ODB

Base est un module de base de données qui peut travailler en mode natif avec son propre moteur (le fameux format HSQL ou HSQLDB 100 % Java).

Mais Base peut également servir de lien vers d'autres bases ou SGBD (dBase, MS-Access, Oracle, etc). Dans ce cas, les données ne sont pas intégrées et Base ne sert que de lien.

Il est très important de savoir avec quoi vous travaillez pour répondre à votre problème de manière précise. Pour connaître le format de base utilisé par ODB, il suffit de regarder en bas à gauche dans la barre d'état :

Image

Dans l'illustration ci-dessus, c'est bien le format natif HSQL.

8)
Dernière édition par Dude le 17 Avr 2009 15:32, édité 1 fois.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20591
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Ajouter un nombre à une date par requête

Messagepar Pierre-Yves Samyn » 05 Fév 2009 10:56


Objectif
: nous avons un champ de type Date et nous voulons ajouter (soustraire) un nombre de jours, mois ou année.

Dans les exemples suivants :
  • le champ de type Date se nomme Date
  • le nombre à ajouter est contenu dans le champ NbJours
  • Nous ajoutons... des jours mais le principe sera aisément transposable pour les mois et années

1) Jeu d'enregistrements résultat non modifiable

La requête suivante doit être créée en mode SQL (on peut commencer en mode ébauche pour sélectionner la table et les champs puis passer en mode SQL pour ajouter les fonctions).

Code : Tout sélectionner   AgrandirRéduire
SELECT "IdTable", "Date", "NbJours", CONVERT( YEAR( "Date" ) || '-' || MONTH( "Date" ) || '-' || DAY( "Date" ) + "NbJours", DATE ) as "Date+NbJours" FROM "Table" AS "Table"


Le bouton "Exécuter directement l'instruction SQL" doit être enfoncé.

Explications
  • Nous ne disposons pas, à ce jour, de fonctions permettant directement de calculer à partir d'un champ date.
  • Le principe est donc de décomposer la date en année, mois, jour (fonctions YEAR, MONTH, DAY) puis d'ajouter le nombre à l'élément "décomposé", puis de reconvertir en date (fonction CONVERT)

2) Jeu d'enregistrements résultat modifiable

Code : Tout sélectionner   AgrandirRéduire
SELECT "IdTable", "Date", "NbJours", CAST ( YEAR( "Date" ) || '-' || MONTH( "Date" ) || '-' || DAY( "Date" ) + "NbJours" AS "DATE" ) AS "Date+NbJours" FROM "Table" AS "Table"


Cette requête peut être réalisée en mode ébauche (le bouton "Exécuter directement l'instruction SQL" ne doit pas être enfoncé).

Capture-1.png
Capture-1.png (9.6 Kio) Consulté 72762 fois


Explications
  • Nous utilisons cette fois la fonction CAST pour reconvertir en date. Attention la syntaxe est différente de CONVERT.
  • L'avantage est que cette fonction est reconnue en mode ébauche, et que le jeu d'enregistrements "résultat" reste modifiable.
  • Son inconvénient est que par défaut la date est affichée au format nombre (40109 par exemple pour le 23/10/09).
  • Pour restaurer l'affichage "date", il suffit de faire un clic droit sur l'en-tête de colonne puis de choisir le format. Ce dernier sera mémorisé

[Ajout du 20/03/2010 pour la version 3.2 et Java 1.6.0_18]

L'évolution de java http://java.sun.com/javase/6/webnotes/6u18.html (bogue 6898593) sur la gestion des dates et la version 3.2 d'OOo font que les requêtes précédentes ne fonctionnent plus. En attendant la fonction DATEADD (version 3.3 ?), ci-dessous un contournement.

Le principe est de calculer un nombre de jours entre la date et la date "origine" et y ajouter le nombre de jours. Ceci nous donne bien sûr un "numéro de série" mais il suffit de lancer la requête puis "cliquer droit" sur l'en-tête" de colonne et formater cette dernière au format Date. En procédant ainsi, le format est mémorisé...

Code : Tout sélectionner   AgrandirRéduire
SELECT "IdTable", "Date", "NbJours", DATEDIFF( 'DD', '1900-01-01', "Date" ) + "NbJours" AS "Date+NbJours" FROM "Table" AS "Table"
Pièces jointes
requeteAjoutDate.odb
(34.26 Kio) Téléchargé 834 fois
Dernière édition par Pierre-Yves Samyn le 20 Mars 2010 19:59, édité 1 fois.
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

Sun report builder

Messagepar charlemagne » 03 Mai 2009 13:53

Bonjour à toutes et à tous et félicitations pour ce forum.
Juste à titre d'information, je suis un Québécois de la ville de Québec (Canada). Votre forum m'a dépanné souvent et je veux apporter ma modeste contribution.

Concernant le problème de date avec SRB, j'ai essayé plusieurs idées et j'ai trouvé une solution qui fonctionne très bien chez moi.
Dans l'en-tête de page j'insère une date par le menu "insertion- date et heure" ensuite je clique sur le champ et dans la partie de droite où sont les propriétés, dans "champ de données", je modifie "TODAY()" par "(TODAY()) + 0".
J'imprime mon rapport et la date demeure juste et je sauvegarde au format pdf et la date demeure juste également.

J'espère que cela pourra fonctionner pour vous tous également.
Merci et bonne journée !
Dernière édition par Oukcha le 03 Mai 2009 17:31, édité 1 fois.
Raison: Message fusionné
OpenOffice 3.0.1 sous Windows Vista Familial Premium
charlemagne
Fraîchement OOthentifié
 
Message(s) : 1
Inscrit le : 03 Mai 2009 12:39

Réduire la taille d'un ODB

Messagepar Dude » 20 Nov 2009 09:28

Comme indiqué dans le bandeau rouge en haut de la page, vous facilitez les réponses en joignant votre base. Bien sûr celle-ci doit être au format natif HSQL (voir plus haut). Cela ne sert à rien de joindre un ODB relié à une source de données externe (MySQL, Oracle, etc).

Cependant, la taille maximum du fichier ne doit pas excéder les 500 ko. Or, à force de manipulation sur les données (ajout / suppression), le fichier ODB a tendance à enfler. Pour en réduire la taille, il existe une commande SQL :
Code : Tout sélectionner   AgrandirRéduire
CHECKPOINT DEFRAG;

Cette commande est à saisir via le menu Outils > SQL et va permettre la compression et le nettoyage de la base des enregistrements rayés.


.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20591
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: Techniques pour débuter avec OOo Base

Messagepar Pierre-Yves Samyn » 17 Juil 2010 12:35

Supprimer une ligne sur deux

(cf. ce fil https://forum.openoffice.org/fr/forum/v ... 06#p127906)

On veut supprimer une ligne sur deux. L'idée qui vient est de supprimer les lignes (im)paires.

On va donc commencer par ajouter un compteur de ligne.
Pour cela, dans Outils > SQL exécuter une instruction du type :

Code : Tout sélectionner   AgrandirRéduire
CREATE SEQUENCE "PYS" AS INTEGER


Cette instruction crée un compteur. Bien que créé dans Outils > SQL (et non dans une requête ou "dans" un champ de table) le compteur ne sera pas volatile, même après fermeture/réouverture de la base.

On peut utiliser ce compteur dans une requête du type :

Code : Tout sélectionner   AgrandirRéduire
SELECT "ID", "Nom", "Date naissance", NEXT VALUE FOR "PYS" AS "CPT" FROM "Table2"


Capture-1.png


  • Comme le montre la copie d'écran il est nécessaire d'exécuter ceci en mode SQL direct (le bouton correspondant doit être enfoncé)
  • On demande pour chaque ligne la valeur suivante pour le compteur.
  • S'agissant d'un compteur "base" (et non lié à la table) la valeur sera séquentielle mais pas nécessairement partant de zéro (commence à la dernière valeur utilisée + 1 soit 278 dans l'exemple)

En partant de ces données "numérotées" on peut sélectionner les ID des enregistrements des lignes paires :

Code : Tout sélectionner   AgrandirRéduire
SELECT "ID" FROM "Numéroter" AS "Numéroter" WHERE MOD( "CPT", 2 ) = 0


Nous créons une "vue" en partant de cette requête (car l'étape suivante nécessite une "table" ou une "vue)". Voir la vue "VueTravail" dans la base exemple.

La suppression des données (une ligne sur deux) se fera en exécutant par Outils > SQL une instruction du type :

Code : Tout sélectionner   AgrandirRéduire
DELETE FROM "Table2" WHERE "ID" IN (SELECT "ID" FROM "VueTravail"  )


Autrement dit, on supprime de la table tous les enregistrements pour lesquels le champ ID figure dans la liste des enregistrements sélectionnés par la vue "VueTravail"
Pièces jointes
SupprimerUneLigneSurDeux.odb
Le SQL donné dans ce fil figure dans les requêtes de la base.
Nota : ces requêtes ne peuvent être exécutées depuis l'interface ; copier-coller leur texte dans Outils > SQL
(5.79 Kio) Téléchargé 374 fois
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

Calcul d'un âge depuis une date de naissance

Messagepar Pierre-Yves Samyn » 18 Juil 2010 14:59

Calcul d'un âge

Cette question a été abordée dans ce fil : https://forum.openoffice.org/fr/forum/v ... 822#p35822

mais depuis cette date et l'évolution de java (évoquée ici : https://forum.openoffice.org/fr/forum/v ... 543#p81847) la requête donnée dans la base exemple de l'époque ne fonctionne plus (gestion plus rigoureuse des dates qui attendent mois et jour sur 2 caractères).

Ci-dessous l'évolution de la requête permettant de fonctionner avec une version récente du JRE :

Code : Tout sélectionner   AgrandirRéduire
SELECT "DateNaissance", "Nom", YEAR(NOW())-YEAR("DateNaissance")-

case
   when (             MONTH( NOW() ) < MONTH("DateNaissance")                       OR            (        MONTH( NOW() ) = MONTH("DateNaissance") AND DAY( NOW() ) < DAY ("DateNaissance")     )                   )
   then 1
   else    0
end as "ans",

MONTH(NOW())-MONTH("DateNaissance") +

case
   when MONTH(now()) <= MONTH("DateNaissance") AND DAY(NOW()) < DAY("DateNaissance")
   then 11
   else
         case
         when MONTH(NOW()) < MONTH("DateNaissance") AND DAY(NOW()) >= DAY("DateNaissance")
         then 12
         else
               case
               when MONTH(NOW()) > MONTH("DateNaissance") AND DAY(NOW()) < DAY("DateNaissance")
               then -1
               else 0
               end
         end
end as "mois",

DATEDIFF('DAY',
cast(
YEAR(NOW()) || '-' || right( 0 || MONTH(NOW())  -

case
when DAY(NOW()) < DAY("DateNaissance")
   then 1
   else 0
end, 2)

|| '-' || right( 0 || DAY("DateNaissance"), 2)
as DATE) , NOW() )

as "jours"

FROM "Table1"
Pièces jointes
Calcul_Age_JRE_OK.odb
(5.53 Kio) Téléchargé 691 fois
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

Re: Techniques pour débuter avec OOo Base

Messagepar Pierre-Yves Samyn » 13 Nov 2010 13:50

Calculer une durée

Ce point a été traité dans ce fil : https://forum.openoffice.org/fr/forum/v ... 51#p139686

Code : Tout sélectionner   AgrandirRéduire
SELECT "ID", "Heure_Debut", "Heure_Fin", CAST ( '00:' || DATEDIFF( 'mi', "Heure_Debut", "Heure_Fin" ) || ':00' AS "TIME" ) AS "Temps total" FROM "Table1"


Explications :
  • La fonction DATEDIFF permet de calculer le nombre de minutes séparant les deux heures
  • On concatène le résultat avec des chaînes à zéro représentant heures et secondes. On obtient par exemple : 00:75:00
  • CAST convertit cette chaîne au format TIME (heure)

Il sera nécessaire de modifier le format d'affichage de la colonne comme expliqué dans ce fil https://forum.openoffice.org/fr/forum/v ... 22#p135541

Ceci n'est pas à faire en mode ébauche lors de la confection de la requête mais en mode exécution : afficher les objets "Requêtes", exécuter la requête (double clic sur son nom ou clic droit puis Ouvrir), clic droit sur l'en-tête de colonne > Formatage de colonne pour choisir le format Heure.

ce choix de présentation sera enregistré (il ne sera pas nécessaire de le redéfinir, sauf modification de la requête bien sûr)



 Ajout : Il est désormais possible d'utiliser la fonction TO_CHAR pour formater le résultat directement dans la requête :

Code : Tout sélectionner   AgrandirRéduire
SELECT "ID", "Heure_Debut", "Heure_Fin", TO_CHAR( CAST( '00:' || DATEDIFF( 'mi', "Heure_Debut", "Heure_Fin" ) || ':00' AS "TIME" ), 'HH:MI' ) AS "Temps total" FROM "Table1"


Le premier argument attendu par cette fonction est l'expression Date/Heure à convertir au format texte, le second est le format à utiliser cf. tableau dans la documentation 
Pièces jointes
SoustractHeures.odb
(5.33 Kio) Téléchargé 409 fois
Dernière édition par Pierre-Yves Samyn le 15 Mai 2011 12:37, édité 1 fois.
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

Réinitialiser l'incrémentation d'un autochamp

Messagepar malou » 30 Mai 2012 08:47

Pour réinitialiser l'incrémentation d'un autochamp (en cas de nombreuse suppression par exemple, ou pour commencer à un nombre prédéfini)

Dans Outil -> SQL executer
Code : Tout sélectionner   AgrandirRéduire
ALTER TABLE "table" ALTER COLUMN column RESTART WITH value


par exemple

Code : Tout sélectionner   AgrandirRéduire
ALTER TABLE "Adhérents" ALTER COLUMN column RESTART WITH 11


Attention à ne pas mettre un nombre inférieur ou égale à une valeur déjà existante dans la table, vous obtiendriez un message d'erreur

Trouvé sur le forum anglais : https://forum.openoffice.org/en/forum/v ... 165&p=7981
LibreOffice 4.2.4.2 sous Ubuntu Trusty
malou
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 18
Inscrit le : 21 Mai 2012 12:38

Clause Where avec date dans une macro

Messagepar Piaf » 26 Août 2013 14:11

Bonjour
Petites fonctions pour faciliter la mise en forme d'une date dans une instruction SQL par macro.
Le principe est d'envoyer la valeur texte de la date à la fonction qui renvoie la valeur formatée dans l'instruction SQL.
Pour une date :
Code : Tout sélectionner   AgrandirRéduire
Function DateUS(dte as String) as String
   DateUS = "{D '" & Format(dte,"YYYY-MM-DD") & "' }"
End Function
Exemple d'utilisation pour une date fixe :
Code : Tout sélectionner   AgrandirRéduire
strSQL = "SELECT * FROM ""Table1"" WHERE ""dteDate"" = " & DateUS("20/8/13")

Pour une Date/Heure
Code : Tout sélectionner   AgrandirRéduire
Function DateHeureUS(dte as String) as String
   DateHeureUS = "{TS '" & Format(dte,"YYYY-MM-DD HH:MM:SS") & "' }"
End Function
Exemple d'utilisation pour une date/heure fixe :
Code : Tout sélectionner   AgrandirRéduire
strSQL = "SELECT * FROM ""Table1"" WHERE ""tsDate"" = " & DateHeureUS("20/8/13 12:00")

Pour une Heure
Code : Tout sélectionner   AgrandirRéduire
Function Heure(hr as String) as String
   Heure = "{T '" & Format(hr,"HH:MM:SS") & "' }"
End Function
Exemple d'utilisation pour une heure fixe
Code : Tout sélectionner   AgrandirRéduire
strSQL = "SELECT * FROM ""Table1"" WHERE ""hHeure"" = " & Heure("13:00")
A+
Pièces jointes
BasicRequeteDate.odb
Base exemple
(14.42 Kio) Téléchargé 257 fois
Libre Office Version: 6.1.5 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5596
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: Techniques pour débuter avec le module Base

Messagepar HRk2o » 27 Déc 2013 21:40

Saisie répétée de date

Dans un formulaire ou un contrôle de table, lorsqu'un champ date quotidien et répété doit être saisi à chaque enregistrement, l'astuce simple et rapide est celle-ci:
- Tapez la date complète dans le champ concerné puis Validez l'enregistrement;
- Au nouvel enregistrement, tapez simplement le 1er chiffre de la date et passez au champ suivant; la date entière s'affichera et vous épargnera la frappe de 5 touches clavier.

ex: Si vous avez 50 saisies à effectuer à la date du 15/12/13, et 50 autres à la date du 25/12/13:
- la 1re saisie -> 15/12/13 et les 49 autres -> 1;
- la 51e saisie -> 26/12/13 et les 49 autres -> 2;

Retenez que c'est la dernière date complète qui est conservée en mémoire et qui n'est pas perdue même après fermeture du formulaire.
@+

Le modérateur a écrit: :alerte: Aucune question n'est autorisée dans ce post-it !
Si vous avez un problème de compréhension, ouvrez un nouveau fil de discussion.
HRk2o
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 242
Inscrit le : 29 Mai 2009 09:51
Localisation : Guyane

Manipulations de dates en SQL

Messagepar Piaf » 19 Avr 2015 20:41

Bonjour
Quelques requêtes permettant le calcul à partir de dates.
Le principe est de récupérer une valeur pouvant être interprétée comme une date par le moteur de base de données.
Ajout de valeurs à une date. (La fonction TO_CHAR n'est utile que pour la présentation des données).
Les valeurs ajoutées sont en dur dans la requête mais peuvent bien sur être récupérées à partir d'un autre champ.
Ajout d'une année
Code : Tout sélectionner   AgrandirRéduire
SELECT "maDate", TO_CHAR( CAST( YEAR( "maDate" ) + 1 || '-' || MONTH( "maDate" ) || '-' || DAY( "maDate" ) AS "DATE" ), 'DD  MONTH YYYY' ) AS "AjoutAnnee_+1" FROM "tDates"
Le principe est le même pour l'ajout ou la soustraction des mois et des jours
AjoutDates.png
Récupérer le dernier jour du mois précédent.
Code : Tout sélectionner   AgrandirRéduire
SELECT "maDate", TO_CHAR( CAST( YEAR( "maDate" ) || '-' || MONTH( "maDate" ) || '-' || DAY( "maDate" ) - DAY( "maDate" ) AS "DATE" ), 'DD/MM/YYYY' ) AS "DernierJourMoisPrecedent" FROM "tDates"
Récupérer le dernier jour du mois
Code : Tout sélectionner   AgrandirRéduire
SELECT "maDate", TO_CHAR( CAST( YEAR( "maDate" ) || '-' || MONTH( "maDate" ) + 1 || '-' || 0 AS "DATE" ), 'DD/MM/YY' ) AS "DernierJourduMois" FROM "tDates"
Deux façons de récupérer le nombre de jours du mois, soit par calcul avec DATEDIFF, soit en récupérant la valeur DAY du dernier jour du mois.
Code : Tout sélectionner   AgrandirRéduire
SELECT "maDate", DATEDIFF( 'dd', "maDate", CAST( YEAR( "maDate" ) || '-' || MONTH( "maDate" ) + 1 || '-' || DAY( "maDate" ) AS DATE ) ) AS "JoursdansMois1", DAY( CAST( YEAR( "maDate" ) || '-' || MONTH( "maDate" ) + 1 || '-' || 0 AS "DATE" ) ) AS "JoursdansMois2" FROM "tDates"
Une petite dernière, déterminer si une année est bissextile ou pas.
Code : Tout sélectionner   AgrandirRéduire
SELECT "maDateB", YEAR( "maDateB" ) AS "Annee", CASE WHEN MOD( YEAR( "maDateB" ), 4 ) = 0 AND MOD( YEAR( "maDateB" ), 100 ) <> 0 OR MOD( YEAR( "maDateB" ), 400 ) = 0 THEN 'Bissextile' ELSE 'Pas bissextile' END AS "B", CASEWHEN( DAY( CAST( YEAR( "maDateB" ) || '-' || 3 || '-' || 0 AS "DATE" ) ) = 29, 'Vrai', 'Faux' ) AS "Bissextile", TO_CHAR( CAST( YEAR( "maDateB" ) || '-' || 3 || '-' || 0 AS DATE ), 'MONTH DD' ) AS "nbJoursFev", TO_CHAR( CAST( YEAR( "maDateB" ) || '-' || 12 || '-' || 31 AS DATE ), 'DDD' ) AS "nbJoursAnnee" FROM "tAnneesBissextibles"
Bissextile.png

Le principe devrait pouvoir s'appliquer aux champs Heure, j'essayerais de faire un post dès que j'aurais le temps de tester :lol:
A+
Pièces jointes
SQLDates.odb
(5.15 Kio) Téléchargé 181 fois
Libre Office Version: 6.1.5 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5596
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

La fonction TO_CHAR

Messagepar Piaf » 14 Mai 2015 13:20

Cette fonction a été implémentée après la traduction du guide de l'utilisateur HSQLDB. Guide

TO_CHAR(Date ou date/heure,format) retourne une chaine de caractères formatée à partir d'une date ou d'une date/heure.
Pour la version HSQLDB implémentée dans AOO et LibO (1.8.0.10) les masques de formats utilisables sont :

maDate = 14/05/15

maDate = 14/05/2015 08:17:15

J'espère ne rien avoir oublié.
A+

Le modérateur a écrit: :alerte: Aucune question n'est autorisée dans ce post-it !
Si vous avez un problème de compréhension, ouvrez un nouveau fil de discussion.
Piaf
GourOOu
GourOOu
 
Message(s) : 5596
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane


Retour vers Base de données

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)