PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV 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 !

:)
>