Avatar billede nicholaslundgren Nybegynder
03. november 2009 - 15:32 Der 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?
Avatar billede terry Ekspert
03. november 2009 - 16:18 #1
"Men nu har jeg fået en ny version af databasen"

Well there are obviously differences between the new and the old so you could start by asking the person who has made the changes.

What version is the new dB?
Avatar billede nicholaslundgren Nybegynder
03. november 2009 - 19:41 #2
Hej

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.
Avatar billede terry Ekspert
03. november 2009 - 20:35 #3
Sorry I'm a bit lost now.

I know NOTHING about Dandomains DWI-database

You said the database is new, is it the Access database which is new or Dandomains DWI-database?
Avatar billede nicholaslundgren Nybegynder
03. november 2009 - 20:58 #4
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.
Avatar billede terry Ekspert
03. november 2009 - 21:14 #5
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.

Can you be more specific as to the error you get?
Avatar billede nicholaslundgren Nybegynder
03. november 2009 - 22:17 #6
Tabellen kaldes i programmet med:

ADOConnection1.ConnectionString := 'Data Source=c:\DWIDB.mdb;Mode=ReadWrite;Persist Security Info=False';
    ADOTable1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\DWIDB.mdb;Mode=ReadWrite;Persist Security Info=False';
    AdoTable1.Active := True;


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.
Avatar billede hugopedersen Nybegynder
04. november 2009 - 09:04 #7
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.
Avatar billede terry Ekspert
04. november 2009 - 09:20 #8
I agree with Hugo, check the realationships and then empty (delete) the table after you have copied all lines.

Only thing I find strange is your error.

"datatyperne stemmer ikke overens i kriterieudtrykket".

Which indicates that the data you are copying isnt valid (wrong types) but that doesnt seem logical when the error occurs on the  delete.
Avatar billede nicholaslundgren Nybegynder
04. november 2009 - 09:27 #9
Jeg har ptøvet at lave følgende simple kode istedet:

  while not ADOTable1.EOF do
  begin
    ADOTable1.Delete;
  end;

Den virker på de andre tabeller i databasen - bare ikke på den ene tabel.

Jeg får nøjagtigt samme fejlmeddelelse.
Avatar billede terry Ekspert
04. november 2009 - 09:32 #10
Is it possible for you to send me the access dB?

ekspertenATsanthell.dk
AT = @
Avatar billede nicholaslundgren Nybegynder
28. oktober 2010 - 23:33 #11
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester