03. november 2009 - 15:32Der er
10 kommentarer og 1 løsning
ADOintegrationsfejl
Hej
Jeg har lavet en række ADO forbindelser i Delphi til en Access 2000 Database. Forbindelserne kobler op til en række undertabeller i Accesdatabasen. Jeg går ind og kopierer linier fra databasen til en anden database og sletter dem derefter i den oprindelige database. Men nu har jeg fået en ny version af databasen og lige pludselig opstår der en fejl omkring forkert værdiangivelse i forbindelse med at jeg vil slette en linie i en af tabellerne. Fejlen kommer på linjen
ADOTable8.Delete
Hvis jeg retter linjen til Adotable8.Next kommer jeg videre men får jo så ikke ryddet op efter kopieringen.
Fejlen opstår kun ved sletning i den ene tabel?
Jeg har prøvet at tilrette et af de andre ADO kald, således at de kalder tabellen og resultatet er samme fejl. Jeg har prøvet at tilrette det pågældende ADO kald, således at det peger på en anden tabel og derved får jeg ingen fejl.
Jeg har prævet det af på 3 forskellige maskiner og på alle tre maskiner opstår fejlen idet jeg lægger den nye tabelversion ind.
Hvad kan denne fejl skyldes? Og hvordan får jeg den løst?
Det drejer sig om Dandomains DWI-database version 2.0.5.3. Selve databasen er i Access 2000 format. Jeg har kontaktet Dandomain flere gange og de afviser bare at der kan være en fejl i deres database og henviser til at jeg selv må finde fejlen.
Dandomains DWI-database er en standard Access database der er kædet sammen med Dandomains integration til deres webshops. Dvs. hvis man vil have oplysninger overført til webshoppen lægger man dem ind i databasen. Når der kommer ordrer ind på webshoppen dukker de op i databasen som linjer. Databasen består derfor af en række tabeller der kan indeholde produkter, priser, kunder, ordrehoveder og ordrelinier. Dandomain har leveret en ny database hvor de siger at de i forhold til den tidligere version har tilføjet nogle ekstra tabeller samt enkelte felter i nogle af de eksisterende tabeller. Efter de har gjort dette kan man ikke længere slette linier i ordrehovedtabellen.
If DanDomain say they dont have an error then I think you have to assume that no other users of the DWI-system have the same error and that the problem lies with you or at least the dB/code which you have.
Derefter kopieres felterne tabellens indhold med følgende kode:
while not ADOTable1.EOF do begin Table9.Edit; Table9.Append; if Table11.Locate('WebIndex','1',[loPartialKey]) then begin Table9.FieldValues['BilagsType']:=130; Table9.FieldValues['BilagsNr']:=Table11.FieldValues['IndexVærdi']; Table11.Edit; Table11.FieldValues['IndexVærdi']:=Table11.FieldValues['IndexVærdi']+1; Table11.Post; Table9.FieldValues['BilagsDato']:=AdoTable1.FieldValues['OrderDate']; Table9.FieldValues['FakKundeNr']:=AdoTable1.FieldValues['CUSPhone']; Table9.FieldValues['FakKundeNavn']:=AdoTable1.FieldValues['CUSCompany']; Table9.FieldValues['FakKundeAtt']:=AdoTable1.FieldValues['CUSName']; Table9.FieldValues['FakKundeAdr1']:=AdoTable1.FieldValues['CUSAddress']; Table9.FieldValues['FakKundeAdr2']:=''; Table9.FieldValues['FakKundePostNr']:=AdoTable1.FieldValues['CUSZipCode']; Table9.FieldValues['FakKundeBy']:=AdoTable1.FieldValues['CUSCity']; end; Table9.Post; ADOTable1.Delete; end;
Programmet stopper på linien ADOTable1.Delete med fejlmeddelelsen: project webshop.exe raised exception class EOleException with message "datatyperne stemmer ikke overens i kriterieudtrykket". Proces stopped.
Programmet har kopieret alle værdierne i første linie i ADOTable1 over i Table 9 og opdateret Table 11.
Hvis jeg udskifter ADOTable.Delete med ADOTable.next kører programmet igennem og kopierer posterne - men det bliver jo ikke slettet i databasen.
Nu bruger jeg ikke selv ADO i Delphi (jeg bruger UniDAC da den uden kode ændring virker med MySQL, MS SQL, Access og SQLite som er de databaser jeg bruger) men umiddelbart vil jeg måske undersøge om der er sneget sig en ekstra relation ind i den nye database der gør at data ikke bare kan slettes. Alternativt ville jeg måske lave rutinen om så den looper alle records og kopierer dem til de nye tabeller og derefter sletter/tømmer din sourcetabel. Det er rimelig nemt at gøre med lidt SQL.
Der er tilføjet to nye felter i en af tabellerne af typen float. det var denne type der ikke kunne accepteres og gav fejlen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.