WD12 et Acces SQLserver OLEDB

Le
tjfromparis
Bonjour,

Je suis en train de faire un programme (jetable) qui charge les tables
d'un ERP.
Si j'ai une duplicate key, il me jette (normal) mais le message
intercepter n'est pas top (ci-dessous)

Personne n'a une idée sur la facon de recuperer le message de la base,
donc
"Impossible d'insérer une ligne de clé en double dans l'objet
'dbo.OAS_LINKLINE' avec un index unique 'oas_linkline_index1'. "
plutot que le roman ci-dessous ?

Sinon, je me ferais une p'tite methode pour parser le texte et
recuperer la premiere "description" du message mais c'est rigolo que
ca ne me renvoit pas juste la cause de l'erreur au lieu d'un pavé
pareil.

Evidemment j'ai testé les variantes du sql.erreur, sql.meserreur
etc

Merci

INSERT INTO OAS_LINKLINE
(Linkcode,CmpCode,DocCode,DocNum,DocLineNum,AcCode,ValueDoc,ValueDoc_dp,Lin=
eType,DebitCredit,Extref1,DueDate,Descr,ValDate,TaxCode1,TaxValue1,TaxValue=
1_dp,TaxLineCode,DocTaxTurn)
VALUES ( 'IS0831038181 ', 'ARVEL ', 'VFIN ', 'ARVEL8000002 ', '2 ',
'CG.Z.DEGRISON01.IN0622604.IN0622604.Z.Z.Z.Z ', '274.43 ', '2 ', '158
', '160 ', ' ', ' ', ' ', ' ', 'CHVZDO076 ', '20.86 ', '3 ', ' ', '0
' )
Echec de l'ouverture du fichier.

Description = Impossible d'insérer une ligne de clé en double dans
l'objet 'dbo.OAS_LINKLINE' avec un index unique 'oas_linkline_index1'.
Source = Microsoft OLE DB Provider for SQL Server
SQL State = 23000
Error Number = -2147217873
Native Error Number = 2601


Description = L'instruction a été arrêtée.
Source = Microsoft OLE DB Provider for SQL Server
SQL State = 01000
Error Number = -2147217873
Native Error Number = 3621


Requête exécutée sur la base <SRV_SUISS> :
Texte de la requête : INSERT INTO OAS_LINKLINE
(Linkcode,CmpCode,DocCode,DocNum,DocLineNum,AcCode,ValueDoc,ValueDoc_dp,Lin=
eType,DebitCredit,Extref1,DueDate,Descr,ValDate,TaxCode1,TaxValue1,TaxValue=
1_dp,TaxLineCode,DocTaxTurn)
VALUES ( 'IS0831038181 ', 'ARVEL ', 'VFIN ', 'ARVEL8000002 ', '2 ',
'CG.Z.DEGRISON01.IN0622604.IN0622604.Z.Z.Z.Z ', '274.43 ', '2 ', '158
', '160 ', ' ', ' ', ' ', ' ', 'CHVZDO076 ', '20.86 ', '3 ', ' ', '0
' )
Nombre de paramètres :=0

IEWDOLDB=111005
Module=<WDOLDB>
Version=<12.00Bj>

Version du MDAC = <2.81.1132.0>.



[Current Recordset parameters]
Wanted = LockType = <adLockOptimistic>, Location = <adUseServer>, Typ=
e
= <adOpenKeyset>, Capacities = <ffffffff>
Got = LockType = <adLockUnspecified>, Location = <adUseNone>, Type =
=
<adOpenUnspecified>, Capacities = <ffffffff>



[Connection parameters]
DataSource = <SRV_SUISS>
Initial Catalog = <>
Provider = <SQLOLEDB>
User = <AMOA_CODA>
Password = <,###>
Extended Info = <Initial Catalog=CODACH;>
Access = <Read/Write>

[Connection settings]
ConnectionTimeout = <-1>
CommandTimeout = <0>

[Data format]
Query Parameter Checked = <0> = <>
Query Parameter Needing conversion = <64> = <DECIMAL>
DecimalSeparator = <Undefined>
DateFormat = <>

[Cursor settings Match]
LockType = <adLockUnspecified>, Location = <adUseNone>, Type =
<adOpenUnspecified>, Capacities = <ffffffff>
LockType = <adLockUnspecified>, Location = <adUseNone>, Type =
<adOpenUnspecified>, Capacities = <ffffffff>
LockType = <adLockUnspecified>, Location = <adUseNone>, Type =
<adOpenUnspecified>, Capacities = <ffffffff>
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Thumain Th.
Le #17833011
Le Thu, 13 Nov 2008 17:14:11 +0100,

Bonjour,

Je suis en train de faire un programme (jetable) qui charge les tables
d'un ERP.
Si j'ai une duplicate key, il me jette (normal) mais le message
intercepter n'est pas top (ci-dessous)

Personne n'a une idée sur la facon de recuperer le message de la base,
donc
"Impossible d'insérer une ligne de clé en double dans l'objet
'dbo.OAS_LINKLINE' avec un index unique 'oas_linkline_index1'. "
plutot que le roman ci-dessous ?

Sinon, je me ferais une p'tite methode pour parser le texte et
recuperer la premiere "description" du message mais c'est rigolo que
ca ne me renvoit pas juste la cause de l'erreur au lieu d'un pavé
pareil.

Evidemment j'ai testé les variantes du sql.erreur, sql.meserreur
etc...

Merci



Bonjour

Ce que nous faisons avec Oracle:

gnres=HExécuteRequêteSQL(Req,"gcORA",hRequêteSansCorrection,sOrdSql)
nErr=HErreurInfo(hErrBase)
SI nErr DANS (1400,1,2292) ALORS //null ou violation d'unique //002
2292
SELON nErr
CAS 1: sErr=" enregistrement existe déjà"
CAS 1400: sErr=" valeur obligatoire"
CAS 2292: sErr=" possède des enregistrements liés"
AUTRE CAS

FIN
sChn=HErreurInfo(hErrMessageSystème)
sChn1=ExtraitChaîne(ExtraitChaîne(sChn,2,"("),1,")") //
"compte"."table"."champ"
Erreur("Champ "+ExtraitChaîne(sChn1,6,"""")+" incorrect
:"+sErr+"(ORA-"+nErr+")")
// ExtraitChaîne(HErreurInfo(hErrMessageSystème),1,CR))
RENVOYER Faux
FIN

--
TT
tjfromparis
Le #17838351
Ouaip mais suis plus à l'aise sur oracle que sur SQL (et j'utilise
l'access alter-natif : donc pas ce genre de pb)

vais me parser les messages d'erreurs pour faire un premier tri sur
les erreurs les plus courantes et j'utiliserais le long barratin pour
les erreurs "imprevues"

merci
Publicité
Poster une réponse
Anonyme