Bonsoir,
Gros blème pour moi !
J'ai une appli que j'ai du adapter à une base SQLServer (merci ADO4WD!)
mais les id sont automatiques et j'ai besoin de récupérer la valeur de
l'id auto généré.
je pensais tenir la solution avec le select @@IDENTITY as 'Identity' et
donc aménagé ma fn que j'envoie après l'ordre INSERT
FONCTION Rtv_Last_Insert_Id(pSeq="")
commande est une chaîne
lCurReq est un entier
chretour est un entier=0
lCurReq=3
SELON gBase
CAS cORACLE
// sans objet !sauf si une sequence a été spécifiée
SI pSeq<>"" ALORS
commande="SELECT "+pSeq+".CURVAL FROM DUAL "
SI fSQL:mySQLExec(commande,lCurReq)
fSQL:mySQLPremier(lCurReq)
SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1)
SINON
fSQL:mySQLMsgBox(commande)
FIN
fSQL:mySQLFerme(lCurReq)
FIN
CAS cMYSQL
commande="SELECT LAST_INSERT_ID()"
SI fSQL:mySQLExec(commande,lCurReq)
fSQL:mySQLPremier(lCurReq)
SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1)
SINON
fSQL:mySQLMsgBox(commande)
FIN
fSQL:mySQLFerme(lCurReq)
CAS cSQLITE
chretour=fSQL:mySQLDernierId()
CAS cSQLSERVER
commande="SELECT @@IDENTITY AS 'Identity'"
SI fSQL:mySQLExec(commande,lCurReq)
fSQL:mySQLPremier(lCurReq)
SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1)
SINON
fSQL:mySQLMsgBox(commande)
FIN
fSQL:mySQLFerme(lCurReq)
FIN
RENVOYER chretour
Mais il me retourne 0 le pleutre !!!
Sur Internet on trouve des ex qui parlent d'envoyer le select dans le
meme recordset séparé par un ;. Mais je ne vois pas comment avec les
accès alternatifs ???
En plus pas facile de modifier mon code qui est le meme pour toutes mes
fenêtres et qui doit s'adapter au sgbd.
Merci de vos idées.
--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Roumegou Eric
Au secours ! ça me bloque ma mise en prod ce truc. en allant sur cette adresse http://www.kamath.com/tutorials/tut007_identity.asp
j'ai essayé de passer l'ordre de recup de l'ident avec la commande insert. Cela ne plante pas mais je n'arrive pas à lire le resultat retourné.
INSERT INTO PEOPLE_TASK (PPL_ID,FOR_ID,TAC_TITRE,TAC_DATE,TAC_DATFIN,TAC_HHMM,TAC_HHMMFIN,TAC_TYPE,TAC_COMM,TAC_RAPPORT,TAC_DATRAPPORT,TAC_NOTE,TAC_APPREC,DATE_CREAT,LOGIN_CREAT,DATE_MODIF,LOGIN_MODIF,SRC_CREAT,SRC_MODIF,REF_IMPORT,OPE_ID,TAC_TYPEDATE,TAC_NBJOURS,TAC_NBHEURES,TAC_TYPEACT,TAC_ACTION,TAC_ETAT,TAC_CHOIXD1,TAC_CHOIXD2,TAC_CHOIXD3,TAC_CHOIXD4,TAC_CHOIXD5,TAC_DATECHOISIE,TAC_TYPE_CHOIXDATE,TAC_PERE_1,TAC_PERE_2,TAC_PERE_3,TAC_STAT1,TAC_STAT2,TAC_STAT3,TAC_STAT4,TAC_STAT5,TAC_STAT6,TAC_STAT7,TAC_VAL1,TAC_VAL2,TAC_VAL3) values (100315,25,'WELCOME ErSAv','20051128',Null,0,0,1,'','',Null,0,0,'20051208','Roumegou',Null,'','Saisie depuis PEOPLE_TASK_FIC','',0,54,1,0,100,1,'',1,Null,Null,Null,Null,Null,Null,7,100033,100022,100032,'1','PF','9','4','6','C','F',0,4813.081031186,5000);SELECT @@IDENTITY AS LAST_ID;
Dans un frontal SQL cela passe bien et mon enreg est à chaque fois bien créé. Alors j'essaie ce code mais mysqlendehors est à vrai. fSQL:mySQLPremier(lCurReq) SI PAS fSQL:mySQLEnDehors ALORS {PrimaryKey}=fSQL:mySQLCol(lCurReq,1)
Roumegou Eric a utilisé son clavier pour écrire :
Bonsoir, Gros blème pour moi ! J'ai une appli que j'ai du adapter à une base SQLServer (merci ADO4WD!) mais les id sont automatiques et j'ai besoin de récupérer la valeur de l'id auto généré. je pensais tenir la solution avec le select @@IDENTITY as 'Identity' et donc aménagé ma fn que j'envoie après l'ordre INSERT
FONCTION Rtv_Last_Insert_Id(pSeq="") commande est une chaîne lCurReq est un entier chretour est un entier=0 lCurReq=3 SELON gBase CAS cORACLE // sans objet !sauf si une sequence a été spécifiée SI pSeq<>"" ALORS commande="SELECT "+pSeq+".CURVAL FROM DUAL " SI fSQL:mySQLExec(commande,lCurReq) fSQL:mySQLPremier(lCurReq) SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1) SINON fSQL:mySQLMsgBox(commande) FIN fSQL:mySQLFerme(lCurReq) FIN
CAS cMYSQL commande="SELECT LAST_INSERT_ID()" SI fSQL:mySQLExec(commande,lCurReq) fSQL:mySQLPremier(lCurReq) SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1) SINON fSQL:mySQLMsgBox(commande) FIN fSQL:mySQLFerme(lCurReq)
CAS cSQLITE chretour=fSQL:mySQLDernierId()
CAS cSQLSERVER commande="SELECT @@IDENTITY AS 'Identity'" SI fSQL:mySQLExec(commande,lCurReq) fSQL:mySQLPremier(lCurReq) SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1) SINON fSQL:mySQLMsgBox(commande) FIN fSQL:mySQLFerme(lCurReq) FIN RENVOYER chretour
Mais il me retourne 0 le pleutre !!! Sur Internet on trouve des ex qui parlent d'envoyer le select dans le meme recordset séparé par un ;. Mais je ne vois pas comment avec les accès alternatifs ???
En plus pas facile de modifier mon code qui est le meme pour toutes mes fenêtres et qui doit s'adapter au sgbd.
Merci de vos idées.
-- Eric Roumégou Webmaster des wtablettes http://cerbermail.com/?qE7t4Qvilo (cliquez sur le lien ci-dessus pour me contacter en privé)
Au secours ! ça me bloque ma mise en prod ce truc.
en allant sur cette adresse
http://www.kamath.com/tutorials/tut007_identity.asp
j'ai essayé de passer l'ordre de recup de l'ident avec la commande
insert. Cela ne plante pas mais je n'arrive pas à lire le resultat
retourné.
INSERT INTO PEOPLE_TASK
(PPL_ID,FOR_ID,TAC_TITRE,TAC_DATE,TAC_DATFIN,TAC_HHMM,TAC_HHMMFIN,TAC_TYPE,TAC_COMM,TAC_RAPPORT,TAC_DATRAPPORT,TAC_NOTE,TAC_APPREC,DATE_CREAT,LOGIN_CREAT,DATE_MODIF,LOGIN_MODIF,SRC_CREAT,SRC_MODIF,REF_IMPORT,OPE_ID,TAC_TYPEDATE,TAC_NBJOURS,TAC_NBHEURES,TAC_TYPEACT,TAC_ACTION,TAC_ETAT,TAC_CHOIXD1,TAC_CHOIXD2,TAC_CHOIXD3,TAC_CHOIXD4,TAC_CHOIXD5,TAC_DATECHOISIE,TAC_TYPE_CHOIXDATE,TAC_PERE_1,TAC_PERE_2,TAC_PERE_3,TAC_STAT1,TAC_STAT2,TAC_STAT3,TAC_STAT4,TAC_STAT5,TAC_STAT6,TAC_STAT7,TAC_VAL1,TAC_VAL2,TAC_VAL3)
values (100315,25,'WELCOME
ErSAv','20051128',Null,0,0,1,'','',Null,0,0,'20051208','Roumegou',Null,'','Saisie
depuis
PEOPLE_TASK_FIC','',0,54,1,0,100,1,'',1,Null,Null,Null,Null,Null,Null,7,100033,100022,100032,'1','PF','9','4','6','C','F',0,4813.081031186,5000);SELECT
@@IDENTITY AS LAST_ID;
Dans un frontal SQL cela passe bien et mon enreg est à chaque fois bien
créé.
Alors j'essaie ce code mais mysqlendehors est à vrai.
fSQL:mySQLPremier(lCurReq)
SI PAS fSQL:mySQLEnDehors ALORS {PrimaryKey}=fSQL:mySQLCol(lCurReq,1)
Roumegou Eric a utilisé son clavier pour écrire :
Bonsoir,
Gros blème pour moi !
J'ai une appli que j'ai du adapter à une base SQLServer (merci ADO4WD!) mais
les id sont automatiques et j'ai besoin de récupérer la valeur de l'id auto
généré.
je pensais tenir la solution avec le select @@IDENTITY as 'Identity' et donc
aménagé ma fn que j'envoie après l'ordre INSERT
FONCTION Rtv_Last_Insert_Id(pSeq="")
commande est une chaîne
lCurReq est un entier
chretour est un entier=0
lCurReq=3
SELON gBase
CAS cORACLE
// sans objet !sauf si une sequence a été spécifiée
SI pSeq<>"" ALORS
commande="SELECT "+pSeq+".CURVAL FROM DUAL "
SI fSQL:mySQLExec(commande,lCurReq)
fSQL:mySQLPremier(lCurReq)
SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1)
SINON
fSQL:mySQLMsgBox(commande)
FIN
fSQL:mySQLFerme(lCurReq)
FIN
CAS cMYSQL
commande="SELECT LAST_INSERT_ID()"
SI fSQL:mySQLExec(commande,lCurReq)
fSQL:mySQLPremier(lCurReq)
SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1)
SINON
fSQL:mySQLMsgBox(commande)
FIN
fSQL:mySQLFerme(lCurReq)
CAS cSQLITE
chretour=fSQL:mySQLDernierId()
CAS cSQLSERVER
commande="SELECT @@IDENTITY AS 'Identity'"
SI fSQL:mySQLExec(commande,lCurReq)
fSQL:mySQLPremier(lCurReq)
SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1)
SINON
fSQL:mySQLMsgBox(commande)
FIN
fSQL:mySQLFerme(lCurReq)
FIN
RENVOYER chretour
Mais il me retourne 0 le pleutre !!!
Sur Internet on trouve des ex qui parlent d'envoyer le select dans le meme
recordset séparé par un ;. Mais je ne vois pas comment avec les accès
alternatifs ???
En plus pas facile de modifier mon code qui est le meme pour toutes mes
fenêtres et qui doit s'adapter au sgbd.
Merci de vos idées.
--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Au secours ! ça me bloque ma mise en prod ce truc. en allant sur cette adresse http://www.kamath.com/tutorials/tut007_identity.asp
j'ai essayé de passer l'ordre de recup de l'ident avec la commande insert. Cela ne plante pas mais je n'arrive pas à lire le resultat retourné.
INSERT INTO PEOPLE_TASK (PPL_ID,FOR_ID,TAC_TITRE,TAC_DATE,TAC_DATFIN,TAC_HHMM,TAC_HHMMFIN,TAC_TYPE,TAC_COMM,TAC_RAPPORT,TAC_DATRAPPORT,TAC_NOTE,TAC_APPREC,DATE_CREAT,LOGIN_CREAT,DATE_MODIF,LOGIN_MODIF,SRC_CREAT,SRC_MODIF,REF_IMPORT,OPE_ID,TAC_TYPEDATE,TAC_NBJOURS,TAC_NBHEURES,TAC_TYPEACT,TAC_ACTION,TAC_ETAT,TAC_CHOIXD1,TAC_CHOIXD2,TAC_CHOIXD3,TAC_CHOIXD4,TAC_CHOIXD5,TAC_DATECHOISIE,TAC_TYPE_CHOIXDATE,TAC_PERE_1,TAC_PERE_2,TAC_PERE_3,TAC_STAT1,TAC_STAT2,TAC_STAT3,TAC_STAT4,TAC_STAT5,TAC_STAT6,TAC_STAT7,TAC_VAL1,TAC_VAL2,TAC_VAL3) values (100315,25,'WELCOME ErSAv','20051128',Null,0,0,1,'','',Null,0,0,'20051208','Roumegou',Null,'','Saisie depuis PEOPLE_TASK_FIC','',0,54,1,0,100,1,'',1,Null,Null,Null,Null,Null,Null,7,100033,100022,100032,'1','PF','9','4','6','C','F',0,4813.081031186,5000);SELECT @@IDENTITY AS LAST_ID;
Dans un frontal SQL cela passe bien et mon enreg est à chaque fois bien créé. Alors j'essaie ce code mais mysqlendehors est à vrai. fSQL:mySQLPremier(lCurReq) SI PAS fSQL:mySQLEnDehors ALORS {PrimaryKey}=fSQL:mySQLCol(lCurReq,1)
Roumegou Eric a utilisé son clavier pour écrire :
Bonsoir, Gros blème pour moi ! J'ai une appli que j'ai du adapter à une base SQLServer (merci ADO4WD!) mais les id sont automatiques et j'ai besoin de récupérer la valeur de l'id auto généré. je pensais tenir la solution avec le select @@IDENTITY as 'Identity' et donc aménagé ma fn que j'envoie après l'ordre INSERT
FONCTION Rtv_Last_Insert_Id(pSeq="") commande est une chaîne lCurReq est un entier chretour est un entier=0 lCurReq=3 SELON gBase CAS cORACLE // sans objet !sauf si une sequence a été spécifiée SI pSeq<>"" ALORS commande="SELECT "+pSeq+".CURVAL FROM DUAL " SI fSQL:mySQLExec(commande,lCurReq) fSQL:mySQLPremier(lCurReq) SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1) SINON fSQL:mySQLMsgBox(commande) FIN fSQL:mySQLFerme(lCurReq) FIN
CAS cMYSQL commande="SELECT LAST_INSERT_ID()" SI fSQL:mySQLExec(commande,lCurReq) fSQL:mySQLPremier(lCurReq) SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1) SINON fSQL:mySQLMsgBox(commande) FIN fSQL:mySQLFerme(lCurReq)
CAS cSQLITE chretour=fSQL:mySQLDernierId()
CAS cSQLSERVER commande="SELECT @@IDENTITY AS 'Identity'" SI fSQL:mySQLExec(commande,lCurReq) fSQL:mySQLPremier(lCurReq) SI PAS fSQL:mySQLEnDehors ALORS chretour=fSQL:mySQLCol(lCurReq,1) SINON fSQL:mySQLMsgBox(commande) FIN fSQL:mySQLFerme(lCurReq) FIN RENVOYER chretour
Mais il me retourne 0 le pleutre !!! Sur Internet on trouve des ex qui parlent d'envoyer le select dans le meme recordset séparé par un ;. Mais je ne vois pas comment avec les accès alternatifs ???
En plus pas facile de modifier mon code qui est le meme pour toutes mes fenêtres et qui doit s'adapter au sgbd.
Merci de vos idées.
-- Eric Roumégou Webmaster des wtablettes http://cerbermail.com/?qE7t4Qvilo (cliquez sur le lien ci-dessus pour me contacter en privé)