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.
Répondre
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12432
Inscription : 08 nov. 2005 17:23
Localisation : Caen, France
Contact :

Techniques pour débuter sous Base

Message par Bidouille »

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 modification par Bidouille le 13 oct. 2006 12:33, modifié 1 fois.
archiifk
NOOuvel adepte
NOOuvel adepte
Messages : 20
Inscription : 22 févr. 2006 15:47

Techniques pour débuter avec le module Base

Message par archiifk »

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 :
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 16:15
Localisation : Paris
Contact :

Techniques pour débuter avec OOo Base

Message par cris59 »

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

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

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

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

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

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

SELECT "Titre" FROM "TLivres" WHERE "Nouvelle" = True

6. Insertion d'un enregistrement dans une table

Code : Tout sélectionner

INSERT INTO "TLivres" ("Titre", "RefAuteur", "Nouvelle") Values ('Les jeux de l''esprit', 12, False)


Requêtes par macros

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
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12432
Inscription : 08 nov. 2005 17:23
Localisation : Caen, France
Contact :

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

Message par Bidouille »

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
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25574
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Message par Dude »

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-join ... 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é 3088 fois
Si vous avez des questions, vous devez les poster dans la section Macros et API.

:idea:
Dernière modification par Dude le 22 juil. 2009 11:04, modifié 2 fois.
neness
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 18 nov. 2006 16:41
Localisation : Ain (01)

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

Message par neness »

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

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
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25574
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Avec quel moteur je tourne ?

Message par Dude »

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 :
capture.png
capture.png (21.74 Kio) Consulté 5133 fois
Dans l'illustration ci-dessus, c'est bien le format natif HSQL que l'on peut lire à droite.

8)
Dernière modification par Dude le 30 juin 2022 15:34, modifié 2 fois.
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Ajouter un nombre à une date par requête

Message par Pierre-Yves Samyn »


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

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

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é 91335 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 (bug 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

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é 1300 fois
Dernière modification par Pierre-Yves Samyn le 20 mars 2010 19:59, modifié 1 fois.
charlemagne
Fraîchement OOthentifié
Messages : 1
Inscription : 03 mai 2009 13:39

Sun report builder

Message par charlemagne »

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 modification par Oukcha le 03 mai 2009 18:31, modifié 1 fois.
Raison : Message fusionné
OpenOffice 3.0.1 sous Windows Vista Familial Premium
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25574
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Réduire la taille d'un ODB

Message par Dude »

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

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.


.
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Re: Techniques pour débuter avec OOo Base

Message par Pierre-Yves Samyn »

Supprimer une ligne sur deux

(cf. ce fil viewtopic.php?p=127906#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

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

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

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

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é 808 fois
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Calcul d'un âge depuis une date de naissance

Message par Pierre-Yves Samyn »

Calcul d'un âge

Cette question a été abordée dans ce fil : viewtopic.php?p=35822#p35822

mais depuis cette date et l'évolution de java (évoquée ici : viewtopic.php?f=9&t=1543#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

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é 1169 fois
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Re: Techniques pour débuter avec OOo Base

Message par Pierre-Yves Samyn »

Calculer une durée

Ce point a été traité dans ce fil : viewtopic.php?f=9&t=25551#p139686

Code : Tout sélectionner

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 viewtopic.php?f=9&t=24822#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

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é 840 fois
Dernière modification par Pierre-Yves Samyn le 15 mai 2011 13:37, modifié 1 fois.
malou
NOOuvel adepte
NOOuvel adepte
Messages : 18
Inscription : 21 mai 2012 13:38

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

Message par malou »

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

ALTER TABLE "table" ALTER COLUMN column RESTART WITH value 
par exemple

Code : Tout sélectionner

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
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Clause Where avec date dans une macro

Message par Piaf »

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

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

strSQL = "SELECT * FROM ""Table1"" WHERE ""dteDate"" = " & DateUS("20/8/13")
Pour une Date/Heure

Code : Tout sélectionner

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

strSQL = "SELECT * FROM ""Table1"" WHERE ""tsDate"" = " & DateHeureUS("20/8/13 12:00")
Pour une Heure

Code : Tout sélectionner

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

strSQL = "SELECT * FROM ""Table1"" WHERE ""hHeure"" = " & Heure("13:00")
A+
Pièces jointes
BasicRequeteDate.odb
Base exemple
(14.42 Kio) Téléchargé 707 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
HRk2o
Membre cOOnverti
Membre cOOnverti
Messages : 350
Inscription : 29 mai 2009 10:51
Localisation : Guyane

Re: Techniques pour débuter avec le module Base

Message par HRk2o »

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.
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Manipulations de dates en SQL

Message par Piaf »

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

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

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

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

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

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é 596 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

La fonction TO_CHAR

Message par Piaf »

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
  • BC ; B.C. ; AD ; A.D. Affiche avant ou après J.C.

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'YYYY AD' ) 
    2015 ap. J.-C.
  • RRRR ou YYYY Affiche l'année sur quatre chiffres, et YY l'année sur deux chiffres.
    IYYY ou IY Renvoie l'année sur quatre ou deux chiffres correspondants à l'année de la date ISO.

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'YYYY' ) 
    2015
  • M Affiche le mois sur un chiffre, MM sur deux chiffres, MMM ou MON le nom court du mois en local, MMMM ou MONTH le nom du mois en local.

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'M' )
    5

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'MM' )
    05

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'MON' )
    mai

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'MMMM' )
    mai
  • w ou ww Affiche la semaine de l'année, W ou WW la semaine du mois.
    IW Affiche la semaine de l'année de l'ISO standard.

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'ww' ) 
    20

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'W' ) 
    2
  • d, dd ou DD Affiche le jour du mois, D l'abréviation du jour, DDD le jour de l'année.

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'DD' )
    14

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'D' )
    jeu.

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'DDD' )
    134
maDate = 14/05/2015 08:17:15
  • HH ou HH12 Affiche l'heure de 0 à 11, H ou HH24 l'heure de 0 à 23

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'HH' )
    8

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'HH24' )
    8
  • MI ou m Affiche les minutes

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'MI' )
    17
  • SS ; s ou ss Affiche les secondes

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'SS' )
    15
  • a Affiche AM ou PM

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'HH:m:s a' )
    8:17:15 AM
  • Les autres caractères sont renvoyés en litéral.

    Code : Tout sélectionner

    TO_CHAR( "maDate", 'MONTH-YYYY H:MI:s / a')
    mai-2015 8:17:15 / AM
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.
Répondre