[Résolu][Base]Recuperer les info insérées par SQL

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
sldf
Membre OOrganisé
Membre OOrganisé
Messages : 78
Inscription : 23 mars 2009 15:25

[Résolu][Base]Recuperer les info insérées par SQL

Message par sldf »

Bonjour,

Lors d'une insertion SQL, il est possible de récupérer le n° auto-incrémenté venant d'être créé par l'ordre SQL via un CALL IDENTITY.

Toutefois si ma clef primaire est une clef composite avec par exemple la colonne "Exercice" et une colonne "Numero" (pour lesquelles la création d'une ligne suivante est l'insertion dans l'exercice encours avec un n° maximum + 1 de l'exercice concerné), le CALL IDENTITY est inapproprié (pas d'auto-incrément dans la base).

Normalement il me faudrait utiliser l'option OUTPUT INSERTED.Numero dans l'INSERT mais mes tentatives sont en échecs.
Cette option est-elle acceptée par HSQLDB ?
Si oui auriez vous un exemple et sinon y-aurait-il une autre voie ?

Merci pour votre temps
Dernière modification par sldf le 23 mai 2021 11:13, modifié 2 fois.
LibreOffice 7.0.6.2 (x64) sous Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 948
Inscription : 19 août 2018 05:20

Re: [Basic]Recuperer les info insérées par SQL

Message par Dolev »

Bonjour,

Depuis le temps que tu es sur ce forum, tu dois savoir que fournir un fichier facilite le travail des bénévoles. :?
Open Office 4.1.15 sous Windows 11
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9254
Inscription : 28 août 2010 08:45

Re: [Basic]Recuperer les info insérées par SQL

Message par micmac »

Bonjour,
Dans votre signature il y a écrit : LibreOffice 6.4.4.2 (x64)
Cette version de LibO est obsolète.
Si c'est une obligation, mentionnez-le dans votre signature en ajoutant Obligation de version.

Afin de profiter des dernières améliorations, il est fortement recommandé d'être à jour de la dernière version stable
Accès direct à votre signature pour la corriger.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
sldf
Membre OOrganisé
Membre OOrganisé
Messages : 78
Inscription : 23 mars 2009 15:25

Re: [Basic]Recuperer les info insérées par SQL

Message par sldf »

OK micmac, ci-joint 1 fichier contenant 1 table Flow et 1 procedure CreerFlow dans la librairie Standard.

J'y ai transcrit 1 INSERT dans la table Flow qui fonctionne mais ne restitue pas la clef primaire (clef composite : exercice + numero)
En dessous se trouve une partie de mes essais en échec de restitution du nouveau numero venant d'être inséré.

Cdlt
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.0.6.2 (x64) sous Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 948
Inscription : 19 août 2018 05:20

Re: [Basic]Recuperer les info insérées par SQL

Message par Dolev »

Comme il n'y a pas d'autovaleur sur les index, il est impossible d'avoir une logique pour récupérer un autoincrément.

Pourquoi mettre Basic alors que c'est Base que tu utilises ?
Open Office 4.1.15 sous Windows 11
sldf
Membre OOrganisé
Membre OOrganisé
Messages : 78
Inscription : 23 mars 2009 15:25

Re: [Basic]Recuperer les info insérées par SQL

Message par sldf »

Sur la question d'autovaleur (attention dans mon exemple ce n'est pas un "vrai" auto-incrément, c'est un auto-incrément logique géré par le Basic/SQL), j'ai vu (mais sur d'autres type de bases) qu'il était possible de récupérer l'intégralité de la ligne mise à jour et pas seulement les auto incrément associé à IDENTITY. Mais peut être que la base LibreOffice n'offre pas cette possibilité. C'etait ma question initiale.

Sur la question de la balise, dans la mesure où l'exploitation des valeurs précédemment insérée ne peut être réalisée que par un source, du coup j'ai utilisé BASIC et non BASE.
LibreOffice 7.0.6.2 (x64) sous Windows 10
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12228
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Basic]Recuperer les info insérées par SQL

Message par Bidouille »

Bonjour,
sldf a écrit :Sur la question de la balise, dans la mesure où l'exploitation des valeurs précédemment insérée ne peut être réalisée que par un source, du coup j'ai utilisé BASIC et non BASE.
Basic signifie que le code est exécutable quelque soit le module. Je doute que celui-ci fonctionne sous Draw ou Calc. :roll:

Un titre clair n'est pas pour vous mais pour tous ceux effectuant des recherches.
Un peu comme votre autre question où vous mettez Java alors que ce n'est pas du tout avec ce langage.
sldf
Membre OOrganisé
Membre OOrganisé
Messages : 78
Inscription : 23 mars 2009 15:25

Re: [Base]Recuperer les info insérées par SQL

Message par sldf »

Bonjour,

J'ai modifié la balise du 1er message de [Basic] à [Base].
Souhaitez vous que je modifie autre chose et sinon pouvez vous réorienter le sujet au sein du bon forum ?

Merci
LibreOffice 7.0.6.2 (x64) sous Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: [Base]Recuperer les info insérées par SQL

Message par jeanmimi »

Bonjour,
sldf a écrit : sinon y-aurait-il une autre voie ?
Suggestion : passer par une requête.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
sldf
Membre OOrganisé
Membre OOrganisé
Messages : 78
Inscription : 23 mars 2009 15:25

Re: [Base]Recuperer les info insérées par SQL

Message par sldf »

Effectivement j'y avais bien pensé mais cela signifie qu'il me faut une clef d'accès comme un timestamp géré par le basic et mis à jour lors de l'insertion ce qui me permettrait d'aller lire la ligne juste après l'avoir insérée...
==> colonne supplémentaire + temps d'accès + risque (improbable) d'avoir 2 insertions par 2 users en même temps (on peut aussi utiliser une colonne concaténée avec le timestamp & code user ...)

Bref ça devient compliqué, mon objectif initial était de définir une clef primaire avec peu de limite dans le temps d'où une clef primaire concaténée sur l'exercice + 1 numéro. Peut être que la solution serait de rester sur un BigInt en auto incrément que je modifierais à chaque changement d'exercice pour correctement le positionner ?

je continue mes investigations et reviens sur le fils pour faire part de mes recherches.
LibreOffice 7.0.6.2 (x64) sous Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base]Recuperer les info insérées par SQL

Message par Dude »

Salut,
sldf a écrit :risque (improbable) d'avoir 2 insertions par 2 users en même temps
Tu es face à un faux problème car Base en format natif HSQLDB est mono-utilisateur.
sldf
Membre OOrganisé
Membre OOrganisé
Messages : 78
Inscription : 23 mars 2009 15:25

Re: [Base]Recuperer les info insérées par SQL

Message par sldf »

Ah flûte il me semblait avoir lu que l'on pouvait y accéder à distance (ou tout au moins aux tables à distance).

1/Je pensais donc à une organisation de type :
* la base sur un serveur ou sur un PC faisant office de serveur (je maitrise peu ces sujets)
* les accès gérés via des échanges mails avec formulaire en pièce jointe sur une boite mail dédiée
* la base accède périodiquement à la messagerie dédiée et met à jour ses tables

2/Idéalement je pensais peut être que certains super-users pourraient avoir un doc Base vide avec les bons form et pourrais interroger via ces form la base distante...

Les points 1 & 2 semblent-ils raisonnables ou complétement à coté du sujet ?
ou me faut il une autre "base distante" comme MySQL et si je souhaite employer les outils LibreOffice et ses formulaires, dois/puis-je utiliser les form de Base ou plutôt m'orienter vers les Form de Writer/Calc ?

Si vous le souhaitez je peux ouvrir un nouveau sujet si oui dans quel forum [Base] ?

Merci
LibreOffice 7.0.6.2 (x64) sous Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Base]Recuperer les info insérées par SQL

Message par jeanmi2403 »

Bonjour,
sldf a écrit :Ah flûte il me semblait avoir lu que l'on pouvait y accéder à distance (ou tout au moins aux tables à distance).
Lire le chapitre "Accès aux bases de données externes" dans le chapitre 2 du Guide Base
Cordialement,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
sldf
Membre OOrganisé
Membre OOrganisé
Messages : 78
Inscription : 23 mars 2009 15:25

[Résolu][Base]Recuperer les info insérées par SQL

Message par sldf »

Merci pour tous ces apports.

J'en déduit que l'accès aux informations du module Base venant d'être insérées n'est pas "nativement" possible (accès logique tjrs envisageable) sauf pour les auto-incrémentés. Par contre les autres type de bases ont l'air d'offrir cette possibilité.

Je vais creuser l'aspect logique et poursuivre dans un 1er temps sur le module Base.
LibreOffice 7.0.6.2 (x64) sous Windows 10