|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Accueil → WINDEV 2024 → Insertion impossible dans une base SQL server 2000 (Base SAGE) via OLE DB : "ARITHABORT" |
Insertion impossible dans une base SQL server 2000 (Base SAGE) via OLE DB : "ARITHABORT" |
Débuté par Wolfgang, 07 déc. 2004 17:40 - 7 réponses |
| |
| | | |
|
| |
Posté le 07 décembre 2004 - 17:40 |
Hello,
J'ai lu sur ce forum (et d'autres) qu'il faut executer la requete SQL "SET ARITHABORT ON" avant une modification ou insertion d'un enregistrement d'une base SAGE sous SQL Server 2000 (via OLE DB).
Meme en executant cette requete, j'obtiens l'erreur suivante : ******************************************************** Echec de la mise à jour de l'enregistrement sur la base de données.
Détail de l'erreur système :
Description = INSERT a échoué car les options SET suivantes comportent des paramètres incorrects : 'ARITHABORT'. ********************************************************
Aurriez vous une solution ? Est ce que je l'execute au mauvais moment ? Y a t'il moyen de forcer l'execution de cette requete dans la meme connexion que mes autres requetes (réalisées sous l'editeur) ?
Car en analysant les traces des requetes envoyées au serveur, cette derniere est bien executée (entre un Audit Login et un Audit Logout) et j'ai l'impression que le "lien" est perdu a cet endroit ci.
Merci d'avance pour votre aide (aidez moi, je vais peter un plomb) |
| |
| |
| | | |
|
| | |
| |
Posté le 07 décembre 2004 - 18:18 |
je peux t'aider peux tu me donner ta requete
"Wolfgang" <guest@newsgroup.fr> a écrit dans le message de news:41b5c4fd@news.pcsoft.fr...
Hello,
J'ai lu sur ce forum (et d'autres) qu'il faut executer la requete SQL "SET
ARITHABORT ON" avant une modification ou insertion d'un enregistrement d'une base SAGE sous SQL Server 2000 (via OLE DB).
Meme en executant cette requete, j'obtiens l'erreur suivante : ******************************************************** Echec de la mise à jour de l'enregistrement sur la base de données.
Détail de l'erreur système :
Description = INSERT a échoué car les options SET suivantes comportent des
paramètres incorrects : 'ARITHABORT'.
********************************************************
Aurriez vous une solution ? Est ce que je l'execute au mauvais moment ? Y a t'il moyen de forcer l'execution de cette requete dans la meme connexion que mes autres requetes (réalisées sous l'editeur) ?
Car en analysant les traces des requetes envoyées au serveur, cette
derniere est bien executée (entre un Audit Login et un Audit Logout) et j'ai l'impression que le "lien" est perdu a cet endroit ci.
Merci d'avance pour votre aide (aidez moi, je vais peter un plomb) |
| |
| |
| | | |
|
| | |
| |
Posté le 08 décembre 2004 - 11:33 |
Bonjour Pierre,
Voici les differentes requetes que j'execute : - HExécuteRequêteSQL(SourceRequete, ConnexionSQLServerEditeur, hRequêteSansCorrection, "SET ARITHABORT ON") - HExécuteRequête(ReqTarifFonctionArticle, ConnexionSQLServerEditeur) - HExécuteRequête(ReqListeArticle, ConnexionSQLServerEditeur)
ReqListeArticle (générée avec l'editeur de requetes) SELECT F_ARTICLE.AR_Ref AS AR_Ref FROM F_ARTICLE WHERE F_ARTICLE.AR_Ref BETWEEN {ParamArticle} AND {ParamAArticle}
RqTarifFonctionArtcile (générée avec l'editeur de requetes) SELECT F_ARTCLIENT.AR_Ref AS AR_Ref, F_ARTCLIENT.AC_Categorie AS AC_Categorie, F_ARTCLIENT.AC_PrixVen AS AC_PrixVen, F_ARTCLIENT.AC_QteMont AS AC_QteMont, F_ARTCLIENT.EG_Champ AS EG_Champ FROM F_ARTCLIENT WHERE F_ARTCLIENT.AC_Categorie = {ParamCategorieTarifaire} AND F_ARTCLIENT.AR_Ref = {ParamArticle}
Le code plante lors de l'ajout (ou modification) de l'enregistrement avec hmodifie() ou hajoute().
Ci joint le code : ********************************************************************** ResExecution est un booléen SourceRequete est une Source de Données
ReqListeArticle.ParamArticle = Combo_Article ReqListeArticle.ParamAArticle = Combo_AArticle ResExecution = HExécuteRequête(ReqListeArticle)
SI ResExecution = Vrai ALORS HLitPremier(ReqListeArticle) TANTQUE HEnDehors(ReqListeArticle) = Faux // TRAITEMENT DES TARIFS ReqTarifFonctionArticle.ParamArticle = ReqListeArticle.AR_Ref ReqTarifFonctionArticle.ParamCategorieTarifaire = Combo_CategorieTarifaire HExécuteRequête(ReqTarifFonctionArticle, ConnexionSQLServerEditeur) HLitPremier(ReqTarifFonctionArticle) HExécuteRequêteSQL(SourceRequete, ConnexionSQLServerEditeur, hRequêteSansCorrection, "SET ARITHABORT ON") SI HEnDehors(ReqTarifFonctionArticle) = Vrai ALORS // INSERTION du tarif dans la table F_ARTCLIENT ReqTarifFonctionArticle.ParamArticle = ReqListeArticle.AR_Ref ReqTarifFonctionArticle.ParamCategorieTarifaire = Combo_CategorieTarifaire ReqTarifFonctionArticle.AC_PrixVen = SaisieNouveauTarif SI SaisieRemiseQuantite = 0 ALORS ReqTarifFonctionArticle.AC_QteMont = 0 ReqTarifFonctionArticle.EG_Champ = 0 SINON ReqTarifFonctionArticle.AC_QteMont = 1 ReqTarifFonctionArticle.EG_Champ = 1 FIN HAjoute(ReqTarifFonctionArticle) SINON // MAJ du tarif dans la table F_ARTCLIENT ReqTarifFonctionArticle.AC_PrixVen = SaisieNouveauTarif SI SaisieRemiseQuantite = 0 ALORS ReqTarifFonctionArticle.AC_QteMont = 0 ReqTarifFonctionArticle.EG_Champ = 0 SINON ReqTarifFonctionArticle.AC_QteMont = 1 ReqTarifFonctionArticle.EG_Champ = 1 FIN HModifie(ReqTarifFonctionArticle) FIN HLitSuivant(ReqListeArticle) FIN FIN ********************************************************************** Désolé pour la mise en forme... :/ Cordialement, Wolfgang |
| |
| |
| | | |
|
| | |
| |
Posté le 08 décembre 2004 - 12:24 |
je ne comprends pas bien la ligne HAjoute(ReqTarifFonctionArticle) tu dis vouloir ajouter dans F_ARTCLIENT, il faudrait donc faire un hajoute(F_ARTCLIENT) idem pour hmodifie()
sinon pour éviter pas mal de problèmes en ajout et modification (je parle surtout de F_DOCLIGNE) je desactive les triggers
SI PAS SQLExec("ALTER TABLE F_DOCLIGNE disable TRIGGER TG_INS_F_DOCLIGNE","Query") ALORS SQLInfoGene("Query") ::MessageErreurSAGE = SQL.MesErreur RENVOYER Faux FIN SQLFerme("Query")
SI PAS SQLExec("ALTER TABLE F_DOCLIGNE disable TRIGGER TG_CBINS_F_DOCLIGNE","Query") ALORS SQLInfoGene("Query") ::MessageErreurSAGE = SQL.MesErreur RENVOYER Faux FIN SQLFerme("Query")
regarde si certains triggers ne genent pas sur F_ARTCLIENT et surtout n'oublie pas de les réactiver après!!!!
en espérant t'avoir aidé...
"Wolfgang" <guest@newsgroup.fr> a écrit dans le message de news:41b6c060@news.pcsoft.fr...
Bonjour Pierre,
Voici les differentes requetes que j'execute : - HExécuteRequêteSQL(SourceRequete, ConnexionSQLServerEditeur,
hRequêteSansCorrection, "SET ARITHABORT ON")
- HExécuteRequête(ReqTarifFonctionArticle, ConnexionSQLServerEditeur) - HExécuteRequête(ReqListeArticle, ConnexionSQLServerEditeur)
ReqListeArticle (générée avec l'editeur de requetes) SELECT F_ARTICLE.AR_Ref AS AR_Ref FROM F_ARTICLE WHERE F_ARTICLE.AR_Ref BETWEEN {ParamArticle} AND {ParamAArticle}
RqTarifFonctionArtcile (générée avec l'editeur de requetes) SELECT F_ARTCLIENT.AR_Ref AS AR_Ref, F_ARTCLIENT.AC_Categorie AS AC_Categorie, F_ARTCLIENT.AC_PrixVen AS AC_PrixVen, F_ARTCLIENT.AC_QteMont AS AC_QteMont, F_ARTCLIENT.EG_Champ AS EG_Champ FROM F_ARTCLIENT WHERE F_ARTCLIENT.AC_Categorie = {ParamCategorieTarifaire} AND F_ARTCLIENT.AR_Ref = {ParamArticle}
Le code plante lors de l'ajout (ou modification) de l'enregistrement avec hmodifie() ou hajoute().
Ci joint le code : ********************************************************************** ResExecution est un booléen SourceRequete est une Source de Données
ReqListeArticle.ParamArticle = Combo_Article ReqListeArticle.ParamAArticle = Combo_AArticle ResExecution = HExécuteRequête(ReqListeArticle)
SI ResExecution = Vrai ALORS HLitPremier(ReqListeArticle) TANTQUE HEnDehors(ReqListeArticle) = Faux // TRAITEMENT DES TARIFS ReqTarifFonctionArticle.ParamArticle = ReqListeArticle.AR_Ref ReqTarifFonctionArticle.ParamCategorieTarifaire =
Combo_CategorieTarifaire
HExécuteRequête(ReqTarifFonctionArticle, ConnexionSQLServerEditeur)
HLitPremier(ReqTarifFonctionArticle) HExécuteRequêteSQL(SourceRequete, ConnexionSQLServerEditeur, hRequêteSansCorrection, "SET ARITHABORT ON")
SI HEnDehors(ReqTarifFonctionArticle) = Vrai ALORS // INSERTION du tarif dans la table F_ARTCLIENT ReqTarifFonctionArticle.ParamArticle = ReqListeArticle.AR_Ref ReqTarifFonctionArticle.ParamCategorieTarifaire = Combo_CategorieTarifaire
ReqTarifFonctionArticle.AC_PrixVen = SaisieNouveauTarif SI SaisieRemiseQuantite = 0 ALORS ReqTarifFonctionArticle.AC_QteMont = 0 ReqTarifFonctionArticle.EG_Champ = 0 SINON ReqTarifFonctionArticle.AC_QteMont = 1 ReqTarifFonctionArticle.EG_Champ = 1 FIN HAjoute(ReqTarifFonctionArticle) SINON // MAJ du tarif dans la table F_ARTCLIENT ReqTarifFonctionArticle.AC_PrixVen = SaisieNouveauTarif SI SaisieRemiseQuantite = 0 ALORS ReqTarifFonctionArticle.AC_QteMont = 0 ReqTarifFonctionArticle.EG_Champ = 0 SINON ReqTarifFonctionArticle.AC_QteMont = 1 ReqTarifFonctionArticle.EG_Champ = 1 FIN HModifie(ReqTarifFonctionArticle) FIN HLitSuivant(ReqListeArticle) FIN FIN ********************************************************************** Désolé pour la mise en forme... :/ Cordialement, Wolfgang
|
| |
| |
| | | |
|
| | |
| |
Posté le 08 décembre 2004 - 16:37 |
je ne comprends pas bien la ligne HAjoute(ReqTarifFonctionArticle) tu dis vouloir ajouter dans F_ARTCLIENT, il faudrait donc faire un hajoute(F_ARTCLIENT) idem pour hmodifie()
Normalement, les fonctions hajoute et hmodifie accepte comme parametre une requete.. Dans le doute, j'ai fait un hajoute(F_ARTCLIENT) et ca ne change rien, toujours le meme problème... :'(
sinon pour éviter pas mal de problèmes en ajout et modification (je parle surtout de F_DOCLIGNE) je desactive les triggers
Ca ne fonctionne pas non plus, toujours la meme erreur... :'(
Sinon, connais tu un moyen d'effectuer un "SET ARITHABORT ON" a la connexion ? |
| |
| |
| | | |
|
| | |
| |
Posté le 08 décembre 2004 - 17:07 |
juste après la connexion je fais SI PAS SQLExec("SET ARITHABORT ON","Query") ALORS SQLInfoGene("Query") ::MessageErreurSAGE = SQL.MesErreur RENVOYER Faux FIN SQLFerme("Query")
....TRAITEMENT...
"Wolfgang" <guest@newsgroup.fr> a écrit dans le message de news:41b7079a@news.pcsoft.fr...
je ne comprends pas bien la ligne HAjoute(ReqTarifFonctionArticle) tu dis vouloir ajouter dans F_ARTCLIENT, il faudrait donc faire un hajoute(F_ARTCLIENT) idem pour hmodifie()
Normalement, les fonctions hajoute et hmodifie accepte comme parametre une requete.. > Dans le doute, j'ai fait un hajoute(F_ARTCLIENT) et ca ne change rien, toujours le meme problème... :'(
sinon pour éviter pas mal de problèmes en ajout et modification (je parle surtout de F_DOCLIGNE) je desactive les triggers
Ca ne fonctionne pas non plus, toujours la meme erreur... :'( Sinon, connais tu un moyen d'effectuer un "SET ARITHABORT ON" a la connexion ?
|
| |
| |
| | | |
|
| | |
| |
Posté le 08 décembre 2004 - 19:19 |
Bon, me revoila avec le sourire (après 3 jours de dev de perdu... :/)
Je n'arrive toujours pas à inserer ou modifier les données de ma bases avec les fonctions hyperfile (hexecuterequete, hexecuterequetesql).
Par contre, l'insertion fonctionne en utilisant la fonction SQLExec : SQLExec("INSERT INTO F_ARTCLIENT (AR_Ref, AC_Categorie, AC_PrixVen, AC_QteMont, EG_Champ) VALUES ('"+ReqListeArticle.AR_Ref+"', '"+Combo_CategorieTarifaire+"', '"+SaisieNouveauTarif+"', '"+ReqTarifFonctionArticle.AC_QteMont+"', '"+ReqTarifFonctionArticle.EG_Champ+"')", "query")
Apparement, les fonctions hyperfile lancent plusieurs connexions ce qui fait perdre l'execution du "SET ARITHABORT ON" (cette requete doit etre executé avant une insertion et cela dans la meme connexion).
En tout cas, merci pour ton aide Pierre, tu m'as sacrément rendu service ! |
| |
| |
| | | |
|
| | |
| |
Posté le 08 décembre 2004 - 19:31 |
Un conseil, lorsque tu travailles sur une base SQL pure, jette les commandes HF ca vaut mieux...
"Wolfgang" <guest@newsgroup.fr> a écrit dans le message de news:41b72db9@news.pcsoft.fr...
Bon, me revoila avec le sourire (après 3 jours de dev de perdu... :/)
Je n'arrive toujours pas à inserer ou modifier les données de ma bases
avec les fonctions hyperfile (hexecuterequete, hexecuterequetesql).
Par contre, l'insertion fonctionne en utilisant la fonction SQLExec : SQLExec("INSERT INTO F_ARTCLIENT (AR_Ref, AC_Categorie, AC_PrixVen,
AC_QteMont, EG_Champ) VALUES ('"+ReqListeArticle.AR_Ref+"', '"+Combo_CategorieTarifaire+"', '"+SaisieNouveauTarif+"', '"+ReqTarifFonctionArticle.AC_QteMont+"', '"+ReqTarifFonctionArticle.EG_Champ+"')", "query")
Apparement, les fonctions hyperfile lancent plusieurs connexions ce qui
fait perdre l'execution du "SET ARITHABORT ON" (cette requete doit etre executé avant une insertion et cela dans la meme connexion).
En tout cas, merci pour ton aide Pierre, tu m'as sacrément rendu service !
> |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|