Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

WD12 et Acces SQLserver OLEDB

2 réponses
Avatar
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=E9e sur la facon de recuperer le message de la base,
donc
"Impossible d'ins=E9rer une ligne de cl=E9 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=E9
pareil.

Evidemment j'ai test=E9 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 =3D Impossible d'ins=E9rer une ligne de cl=E9 en double dans
l'objet 'dbo.OAS_LINKLINE' avec un index unique 'oas_linkline_index1'.
Source =3D Microsoft OLE DB Provider for SQL Server
SQL State =3D 23000
Error Number =3D -2147217873
Native Error Number =3D 2601


Description =3D L'instruction a =E9t=E9 arr=EAt=E9e.
Source =3D Microsoft OLE DB Provider for SQL Server
SQL State =3D 01000
Error Number =3D -2147217873
Native Error Number =3D 3621


Requ=EAte ex=E9cut=E9e sur la base <SRV_SUISS> :
Texte de la requ=EAte : 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=E8tres :=3D0

IEWDOLDB=3D111005
Module=3D<WDOLDB>
Version=3D<12.00Bj>

Version du MDAC =3D <2.81.1132.0>.



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



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

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

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

[Cursor settings Match]
LockType =3D <adLockUnspecified>, Location =3D <adUseNone>, Type =3D
<adOpenUnspecified>, Capacities =3D <ffffffff>
LockType =3D <adLockUnspecified>, Location =3D <adUseNone>, Type =3D
<adOpenUnspecified>, Capacities =3D <ffffffff>
LockType =3D <adLockUnspecified>, Location =3D <adUseNone>, Type =3D
<adOpenUnspecified>, Capacities =3D <ffffffff>

2 réponses

Avatar
Thumain Th.
Le Thu, 13 Nov 2008 17:14:11 +0100,
a écrit:

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
Avatar
tjfromparis
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