Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

methodologie Sql

6 réponses
Avatar
Jean-Luc Baptiste
Bonjour,

J'ai besoin d'un conseil en SQL.

J'ai 2 tables liées (par exemple commande et produits)
Idcommande est l'identifiant unique de commande et se retrouve dans la
table Produit en clé doublonnée)

Je commence l'enregistrement via sql de la ligne de commande dans le
fichier commande.

C'est ici que je cherche la meilleure façon de faire : Comment faire
pour récupérer l'identifiant de la dernière commande saisie pour pouvoir
l'inscrire dans la table des produits ?

Je pourrais relancer une recherche dans le fichier des commandes
immédiatement après avoir lancé la requête d'insertion mais suis-je sûr
que dans un environnement réseau personne ne vient pas de saisir une
commande juste après moi ?

Merci d'avance

6 réponses

Avatar
patrice
"Jean-Luc Baptiste" a écrit dans le message de
news:45e4091a$0$5071$
Bonjour,

J'ai besoin d'un conseil en SQL.

J'ai 2 tables liées (par exemple commande et produits)
Idcommande est l'identifiant unique de commande et se retrouve dans la
table Produit en clé doublonnée)

Je commence l'enregistrement via sql de la ligne de commande dans le
fichier commande.

C'est ici que je cherche la meilleure façon de faire : Comment faire
pour récupérer l'identifiant de la dernière commande saisie pour pouvoir
l'inscrire dans la table des produits ?

Je pourrais relancer une recherche dans le fichier des commandes
immédiatement après avoir lancé la requête d'insertion mais suis-je sûr
que dans un environnement réseau personne ne vient pas de saisir une
commande juste après moi ?

Merci d'avance



la session sql contient la derniere valeur de l'id

voir l'aide sur "instruction sql"

Pour connaître la valeur de l'identifiant automatique lors d'une requête de
type INSERT sur des fichiers Hyper File :
Requête exécutée par la fonction HExécuteRequêteSQL ou HExécuteRequête :
la syntaxe <Nom du fichier>.<Nom de la rubrique Identifiant automatique>
permet de connaître la valeur de l'identifiant automatique, juste après
l'exécution de la requête. En effet, l'enregistrement en cours correspond à
l'enregistrement ajouté.

Requête exécutée par la fonction SQLExec : la variable SQL.Idauto permet
de connaître la valeur de l'identifiant.
Avatar
Jean-Luc Baptiste
patrice a écrit :
"Jean-Luc Baptiste" a écrit dans le message de
news:45e4091a$0$5071$
Bonjour,

J'ai besoin d'un conseil en SQL.

J'ai 2 tables liées (par exemple commande et produits)
Idcommande est l'identifiant unique de commande et se retrouve dans la
table Produit en clé doublonnée)

Je commence l'enregistrement via sql de la ligne de commande dans le
fichier commande.

C'est ici que je cherche la meilleure façon de faire : Comment faire
pour récupérer l'identifiant de la dernière commande saisie pour pouvoir
l'inscrire dans la table des produits ?

Je pourrais relancer une recherche dans le fichier des commandes
immédiatement après avoir lancé la requête d'insertion mais suis-je sûr
que dans un environnement réseau personne ne vient pas de saisir une
commande juste après moi ?

Merci d'avance



la session sql contient la derniere valeur de l'id

voir l'aide sur "instruction sql"

Pour connaître la valeur de l'identifiant automatique lors d'une requête de
type INSERT sur des fichiers Hyper File :
Requête exécutée par la fonction HExécuteRequêteSQL ou HExécuteRequête :
la syntaxe <Nom du fichier>.<Nom de la rubrique Identifiant automatique>
permet de connaître la valeur de l'identifiant automatique, juste après
l'exécution de la requête. En effet, l'enregistrement en cours correspond à
l'enregistrement ajouté.

Requête exécutée par la fonction SQLExec : la variable SQL.Idauto permet
de connaître la valeur de l'identifiant.




Merci je regarde de suite.
Avatar
Jean-Luc Baptiste
J'ai oublié de préciser que la base est sur un serveur Manta

patrice a écrit :
"Jean-Luc Baptiste" a écrit dans le message de
news:45e4091a$0$5071$
Bonjour,

J'ai besoin d'un conseil en SQL.

J'ai 2 tables liées (par exemple commande et produits)
Idcommande est l'identifiant unique de commande et se retrouve dans la
table Produit en clé doublonnée)

Je commence l'enregistrement via sql de la ligne de commande dans le
fichier commande.

C'est ici que je cherche la meilleure façon de faire : Comment faire
pour récupérer l'identifiant de la dernière commande saisie pour pouvoir
l'inscrire dans la table des produits ?

Je pourrais relancer une recherche dans le fichier des commandes
immédiatement après avoir lancé la requête d'insertion mais suis-je sûr
que dans un environnement réseau personne ne vient pas de saisir une
commande juste après moi ?

Merci d'avance



la session sql contient la derniere valeur de l'id

voir l'aide sur "instruction sql"

Pour connaître la valeur de l'identifiant automatique lors d'une requête de
type INSERT sur des fichiers Hyper File :
Requête exécutée par la fonction HExécuteRequêteSQL ou HExécuteRequête :
la syntaxe <Nom du fichier>.<Nom de la rubrique Identifiant automatique>
permet de connaître la valeur de l'identifiant automatique, juste après
l'exécution de la requête. En effet, l'enregistrement en cours correspond à
l'enregistrement ajouté.

Requête exécutée par la fonction SQLExec : la variable SQL.Idauto permet
de connaître la valeur de l'identifiant.




Avatar
mat
Jean-Luc Baptiste wrote:
...
Merci je regarde de suite.




Bonjour Jean-Luc,

J'admire vos cours didactiques et celui sur SQL/mySQL est également très
bien fait. Pourtant, si la question concerne "SQL sur HF", j'ose
questionner la valeur pratique d'un cours utilisant INSERT, DELETE et
UPDATE, au moins sur les versions <= WD10. La raison est qu'aucune
contrainte et aucune clé unique n'est respecté par les requêtes Hyper
File. Le suivant me donne en effet 3 enregistrements avec l'ID 9999 dans
une rubrique de type clé unique.

i est entier
sQuery est chaîne
dsSQL est une Source de Données
sQuery = "INSERT INTO Contract (IDContract) VALUES (9999) "
//Contract.IDContract est une clé unique !
POUR i = 1 A 3
HExécuteRequêteSQL(dsSQL, sQuery)
Trace(Contract.IDContract)
FIN


Aucune contrainte n'est respecté. Je peux supprimer ce que je veux, HF
ne m'arrêtera pas. D'autre part mes lignes de commande supprimé en
cascade par hSupprime sont sauves: la suppression de l'entête de
commande par requête ne les touche pas.

On ne sait non plus si la requête a exécuté une modification ou une
suppression, car le retour de hExecuteRequête est sur l'exécution du
code de la requête, pas la commande même.

Probablement vous savez tous ça, mais je vous assure que beaucoup de
gens ne le savent pas. Un acheteur de Windev ne peux pas connaître cette
limitation importante de HF, car il n'y en a aucune information.
D'accord beaucoup de gens ne travaillent pas avec les contraintes, mais
que la base accepte plusieurs fois le même ID n'est quand-même pas
normal. A mon avis la moindre chose à faire dans un tel cas est d'en
informer les développeurs.

Salutations
Mat
Avatar
Jean-Luc Baptiste
Bonjour,

Merci pour les compliments ;-))

En fait, sur un serveur Manta ou Mysql pour récupérer l'identifiant il
faut refaire une requête select sur l'identifiant apres une requête insert.
C'est obligatoire en mode de fonctionnement réseau.
La récupération de l'identifiant par Nomdifichier.idcleunik n'est
possible qu'en mode d'accès natif, alors on peut se poser la question
sur la pertinence d'une requête d'insertion plutôt qu'un Hajoute !

Tout ça fait partie d'un chapitre du livre que je suis en train de finir
et qui traite (le chapitre) de la migration d'une base de donnée Hyper
file classic sur un serveur Manta puis Mysql et la traduction du code
vers le tout SQL.

mat a écrit :
Jean-Luc Baptiste wrote:
...
Merci je regarde de suite.




Bonjour Jean-Luc,

J'admire vos cours didactiques et celui sur SQL/mySQL est également très
bien fait. Pourtant, si la question concerne "SQL sur HF", j'ose
questionner la valeur pratique d'un cours utilisant INSERT, DELETE et
UPDATE, au moins sur les versions <= WD10. La raison est qu'aucune
contrainte et aucune clé unique n'est respecté par les requêtes Hyper
File. Le suivant me donne en effet 3 enregistrements avec l'ID 9999 dans
une rubrique de type clé unique.

i est entier
sQuery est chaîne
dsSQL est une Source de Données
sQuery = "INSERT INTO Contract (IDContract) VALUES (9999) "
//Contract.IDContract est une clé unique !
POUR i = 1 A 3
HExécuteRequêteSQL(dsSQL, sQuery)
Trace(Contract.IDContract)
FIN


Aucune contrainte n'est respecté. Je peux supprimer ce que je veux, HF
ne m'arrêtera pas. D'autre part mes lignes de commande supprimé en
cascade par hSupprime sont sauves: la suppression de l'entête de
commande par requête ne les touche pas.

On ne sait non plus si la requête a exécuté une modification ou une
suppression, car le retour de hExecuteRequête est sur l'exécution du
code de la requête, pas la commande même.

Probablement vous savez tous ça, mais je vous assure que beaucoup de
gens ne le savent pas. Un acheteur de Windev ne peux pas connaître cette
limitation importante de HF, car il n'y en a aucune information.
D'accord beaucoup de gens ne travaillent pas avec les contraintes, mais
que la base accepte plusieurs fois le même ID n'est quand-même pas
normal. A mon avis la moindre chose à faire dans un tel cas est d'en
informer les développeurs.

Salutations
Mat



Avatar
Pascal F
Jean-Luc Baptiste a présenté l'énoncé suivant :

Tout ça fait partie d'un chapitre du livre que je suis en train de finir et qui traite (le chapitre) de la migration d'une base
de donnée Hyper file classic sur un serveur Manta puis Mysql et la traduction du code vers le tout SQL.



Super, merci de nous tenir informés de la parution de cet ouvrage. C'est une étape que je souhaite faire dans mes développements
et je n'ai pas toutes les connaissances. Donc une méthodologie à suivre m'intéresse.
Bonne journée à tous.

--
Pascal

Ne garder que le prénom pour me joindre