Publicatie MSSQL -> ACC97 geeft incorrecte money

Pagina: 1
Acties:

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Topicstarter
Wij proberen, voor een evt. roll back, een SQL Server te laten repliceren met een Acc97 bestand.

Dit hebben we gedaan:
  • Een Linked Server aangemaakt voor de .mdb
  • Een publicatie aangemaakt voor de SQL database
  • Een nieuwe subscription toegevoegd
  • Een DTS-package gemaakt voor transformatie van SQL naar Access (die is nodig, verhaal apart :))
Als we de Snapshot en vervolgens de Push Agent uitvoeren, dan gaat het op zich goed. Hij gaat alleen over zijn nek bij money-waarden van 0: dan kapt hij de transformatie af.

Dit hebben we kunnen opvangen, maar als je nu in de acc97 mdb kijkt, zie je dat alle currencies vermenigvuldigd zijn met 10000. Dat gaat dus niet goed, ongeacht onze workaround om de nul-waarden op te vangen.

€ 7,10 wordt dus € 71.000

Nu weten we van deze site dat "[the] DBMONEY datatype [...] is a structure containing 2 long INTs", en "The internal storage of the DBMONEY datatype keeps track of 1/100 of a cent, which equates to .0001 of a dollar".
Dat geeft wel ongeveer een reden aan waarom het bedrag 10.000 keer te groot is.

Wat blijkt, is dat in een DTS, bij de ActiveX code van een Data Driven Query Task aanpassen, de DTSSource("bedrag")-waarde al te groot is. Dus door 10.000 delen lost het in principe op.

Maar dat is wel een heel vieze workaround die we gewoon niet willen hebben. Ducttape-method zeg maar :)

Iemand een clue waardoor dit komt? En een hint/oplossing?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

In de DTS kun je typeconversie uitvoeren. Volgens mij is het mogelijk om een money-type (SQL) in een Currency-type (Access) om te zetten. Ik ga even kijken...

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Topicstarter
Op dinsdag 07 mei 2002 16:07 schreef JeroenDega het volgende:
In de DTS kun je typeconversie uitvoeren. Volgens mij is het mogelijk om een money-type (SQL) in een Currency-type (Access) om te zetten. Ik ga even kijken...
Je bedoelt misschien dit?
code:
1
DTSDestination("geld")=CCur(DTSSource("geld"))

Werk helaas niet ... de waarde 'DTSSource("geld")' is gewoon al een factor 10.000 te groot.

Anyone?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Topicstarter
Laatste poging ;(

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • aj-san
  • Registratie: Februari 2001
  • Laatst online: 14-01 08:34
Money/currency datatypes... blah...
Volgende keer: gebruik gewoon numerieke datatypes (number/int) en sla bedragen op in centen!

Don't try... do. Or do not. There is no try. -- Master Yoda


Verwijderd

Toch maar voor de Ducttape oplossing gaan vrees ik. Ik heb niets waardevols voor je kunnen vinden...
Pagina: 1