PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → MySQL last_insert_id()
MySQL last_insert_id()
Iniciado por REGIS, jan., 21 2018 9:13 PM - 13 respostas
Membro registado
5 mensagems
Publicado em janeiro, 21 2018 - 9:13 PM
Bonjour à tous,

En se connectant à une BD mysql distante via SQLConnecteWS, comment récupérer le dernier ID d'un champ auto-incrémenté ajoutée à une table ??
La fonction SQLExec("SELECT last_insert_id()","REQ") renvoie systématiquement la valeur zéro

Pourtant, elle fonctionne bien directement sur MySQL. A croire que Windev n'en tient pas compte.

J'ai essayé d'étudier les transactions, mais pas possible sur accès via SQLConnecteWS

Un grand merci à mes sauveurs..
Membro registado
3.883 mensagems
Popularité : +227 (347 votes)
Publicado em janeiro, 22 2018 - 4:38 AM
Bonjour,
Peut être quelque chose du style
sTxtReq est une chaîne
REQ_MaTableTriée est une Source dede Données

sTxtReq=[
SELECT
MaTable.PK_MaTable
FROM
MaTable
ORDER BY
PK_MaTable ASC
]
HExécuteRequêteSQL(REQ_MaTableTriée,hRequêteDéfaut,sTxtReq)
HLitDernier(REQ_MaTableTriée)

Plus simple, créer la requête sous l'éditeur et passer par HExécuteRequête
--
Il y a peut être plus simple, mais, ça tourne
Mensagem modificada, janeiro, 22 2018 - 4:48 AM
Publicado em janeiro, 22 2018 - 8:38 AM
REGIS a émis l'idée suivante :
Bonjour à tous,

En se connectant à une BD mysql distante via SQLConnecteWS, comment récupérer
le dernier ID d'un champ auto-incrémenté ajoutée à une table ??
La fonction SQLExec("SELECT last_insert_id()","REQ") renvoie systématiquement
la valeur zéro

Pourtant, elle fonctionne bien directement sur MySQL. A croire que Windev
n'en tient pas compte.

J'ai essayé d'étudier les transactions, mais pas possible sur accès via
SQLConnecteWS

Un grand merci à mes sauveurs..

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com


Bonjour,
nous n'utilisons pas l'accès natif mysql mais les accès alternatifs
mais je crois me souvenir qu'en accès natif, même avec des SQLexec on
pouvait gérer ce id auto ô combien prépondérant. Je l'ai fait un temps
pour un ws soa.

Le pb sans doute c'est que là tu changes de session à chaque fois que
tu sollicites sqlconnecteWs, et le rtv_last_insert_id ne renvoie pas le
dernier id créé, mais plus exactement le dernier id créé par la session
et elle seule.

En fait c'est le sqlconnectews qui devrais te retourner cette info à
l'accomplissement d'un ordre insert.
Jamais utilisé ce truc. C'est un webservice déjà développé par pcsoft ?
avez vous les sources ?

--
Roumegou Eric
Publicado em janeiro, 22 2018 - 5:47 PM
Oui, c'est un Webservice développé par PCSOFT
Connecte l'application en cours à une base de données à interroger par SQL en passant par l’intermédiaire d’un proxy Webservice (SOAP).

Bien pratique, une toute petite couche à installer sur le serveur (ici MySQL)
Publicado em janeiro, 22 2018 - 5:53 PM
.. Cela dit, SQLConnecteWS n'est appeler qu'une seule fois au début de la procédure et plus après.

// Connexion Base de données MySQL
NumConnexion = SQLConnecteWS("http://xxxxxxx/WDSOAPDB_WEB/","xxx","xxx","passel","xxx","MySQL")

SI NumConnexion <> 0 ALORS
// La connexion s'est bien passée
Info("Connexion OK")
SINON
// La connexion a échoué : affichage d'un message explicatif
SQLInfoGene()
Erreur("La connexion à la source de données " +...
" a échoué." + RC + "Code erreur : " + ...
SQL.Erreur + RC + SQL.MesErreur)
FIN

Requete = "Insert INTO cliccompta.central_societes (cent_soc_nom_rs, cent_soc_siret,cent_soc_ape)" + ...
" VALUES ('" + ...
Local_Societes.Loc_Soc_Nom_Rs + "', '" + ...
Local_Societes.Loc_Soc_SIRET + "', '" + ...
Local_Societes.Loc_Soc_APE + "')"

Res = SQLExec(Requete, "REQ")

// récupération du dernier ID
Requete = "SELECT last_insert_id() as dernid"
Res4 = SQLExec(Requete, "REQ4")
SI Res4 = Faux ALORS
SQLInfoGene("REQ4")
Info("Erreur SQL 4 : " + SQL.MesErreur)
FIN



SQLPremier("REQ4")
SI PAS SQL.EnDehors ALORS
ID_Frs = SQLCol("REQ4", 1)
FIN

// *****************>>>>>>>>>>>> ID_FRS toujours égal à zéro.....
Membro registado
948 mensagems
Popularité : +30 (92 votes)
Publicado em janeiro, 22 2018 - 6:14 PM
Coucou,

Requête de type INSERT
Lors de l'exécution d'une requête de type INSERT,
la variable SQL.IdAuto contient l'identifiant automatique ajouté lors du précédent INSERT.

Reference: http://doc.pcsoft.fr/fr-FR/?3072007

--
In üs we trust - Autopsie Volume 1 disponible le 01-23 au dépôt de ton armurier.
Mensagem modificada, janeiro, 22 2018 - 6:15 PM
Publicado em janeiro, 22 2018 - 6:33 PM
"ÿÿÿÿÿÿÿÿÿÿ" a utilisé son clavier pour écrire :
Oui, c'est un Webservice développé par PCSOFT
Connecte l'application en cours à une base de données à interroger par SQL en
passant par l’intermédiaire d’un proxy Webservice (SOAP).

Bien pratique, une toute petite couche à installer sur le serveur (ici MySQL)

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com


alors ils ont forcément prévu ce retour d'id auto
c'est du ba ba
sinon ça ne sert à rien leur truc.

--
Roumegou Eric
Membro registado
948 mensagems
Popularité : +30 (92 votes)
Publicado em janeiro, 22 2018 - 7:31 PM
Coucou,

J'ai essayé d'étudier les transactions, mais pas possible sur accès via SQLConnecteWS


SQLTransaction
https://doc.pcsoft.fr/?3072029

--
In üs we trust - Autopsie Volume 1 disponible le 01-23 au dépôt de ton armurier.
Publicado em janeiro, 23 2018 - 10:46 AM
Charly CANDO a écrit :
Coucou,

Requête de type INSERT
Lors de l'exécution d'une requête de type INSERT,
la variable SQL.IdAuto contient l'identifiant automatique ajouté lors du précédent INSERT.

Reference: http://doc.pcsoft.fr/fr-FR/?3072007

--
In üs we trust - Autopsie Volume 1 disponible le 01-23 au dépôt de ton armurier.


Hello,

Tu l'as testé? J'ai fait l'exercice avec un MySQL et ça ne fonctionne pas!
Publicado em janeiro, 23 2018 - 10:50 AM
Voroltinquo a écrit :
Bonjour,
Peut être quelque chose du style
sTxtReq est une chaîne
REQ_MaTableTriée est une Source dede Données

sTxtReq=[
SELECT
MaTable.PK_MaTable
FROM
MaTable
ORDER BY
PK_MaTable ASC
]
HExécuteRequêteSQL(REQ_MaTableTriée,hRequêteDéfaut,sTxtReq)
HLitDernier(REQ_MaTableTriée)

Plus simple, créer la requête sous l'éditeur et passer par HExécuteRequête
--
Il y a peut être plus simple, mais, ça tourne


Valable uniquement en mono-utilisateur...
Membro registado
5 mensagems
Publicado em janeiro, 23 2018 - 11:36 PM
Malheureusement ne fonctionne pas en utilisant sqlconnectews (accès serveur distant)
sql.idauto renvoie également zéro..
Publicado em janeiro, 24 2018 - 9:35 AM
REGIS vient de nous annoncer :
Malheureusement ne fonctionne pas en utilisant sqlconnectews (accès serveur
distant)
sql.idauto renvoie également zéro..


bonjour,

en faisant une requête multiple ? mysql accepte très bien ce genre de
requête mais je ne sais pas si le connecteur est capable de le gérer

szReq est chaine

szReq = [
insert to t_table
set colonne1 = 'x', colonne2 = 'y', ...;
select last_insert_id();
]
SQLExec(szReq,"REQ")

--
Cordialement JeAn-PhI
Membro registado
948 mensagems
Popularité : +30 (92 votes)
Publicado em janeiro, 24 2018 - 7:29 PM
Lionel a écrit :
Charly CANDO a écrit :
Coucou,

Requête de type INSERT
Lors de l'exécution d'une requête de type INSERT,
la variable SQL.IdAuto contient l'identifiant automatique ajouté lors du précédent INSERT.

Reference: http://doc.pcsoft.fr/fr-FR/?3072007

--
In üs we trust - Autopsie Volume 1 disponible le 01-23 au dépôt de ton armurier.


Hello,

Tu l'as testé? J'ai fait l'exercice avec un MySQL et ça ne fonctionne pas!


Non, tu connait mon idée à propose des Ids :p

--
In üs we trust.
Autopsie Volume 1 disponible au dépot de ton armurier: http://www.sitealademande.com/sitealamande/anywhere/depot
Membro registado
120 mensagems
Popularité : +13 (15 votes)
Publicado em janeiro, 25 2018 - 2:43 PM
Bonjour,

J'utilise le last_insert_id sur du mysql en accès natif et cela fonctionne correctement.
En espérant que cela t'aide.

Mon code est le suivant :
vSrcLast est une Source dede Données

sTxtSql est une chaîne = "INSERT INTO " + _xNomFichier + "(" + vLstCol + ") VALUES (" + vLstVal + ")"
HExécuteRequêteSQL(vSrcLast,gConnexion,hRequêteSansCorrection,sTxtSql)

sTxtSql = "SELECT LAST_INSERT_ID()"
HExécuteRequêteSQL(vSrcLast,gConnexion,hRequêteSansCorrection,sTxtSql) ALORS
HLitPremier(vSrcLast)
SI PAS HEnDehors(vSrcLast) ALORS
nLastID = HRécupèreRubrique(vSrcLast,1)
FIN