Type mismatch in expression.

0

Witam

Mam komponenty:

Database1 z ustawieniami:
DatabaseName = DBQuery1

Query1 z ustawieniami:
CachedUpdates = True
DatabaseName = DBQuery1
UpdateMode = UpWhereKeyOnly

Kiedy chce zatwierdzic zmiany i zapisać je w bazie za pomocą:

Datamodule1.Database1.ApplyUpdates([datamodule1.Query1]);

otrzymuje błąd:


Debugger Exception Notification

Project Proj.exe raised exception class EDBEngineError with message 'Type mismatch in expression.'. Process stopped. Use Step or Run to continue.

OK Help

ten sam błąd otrzymuje gdy zrobie:

Datamodule1.Database.StartTransaction();
  try
    DataModule1.Query1.ApplyUpdates();
    DataModule1.Database1.Commit();
  except
    datamodule1.Database1.Rollback();
  raise;
  end;
  datamodule1.Query1.CommitUpdates();

Moze ktos wie dlaczego otrzymuje ten błąd? Chce zatwierdzic zmiany. Jak to zrobic prawidłowo i miare prosto?
Dzięki za pomoc.

0

to może z kwerendą jest coś nie tak? miałem ten sam problem gdy mi się typy pól bodajże niezgadzały.

0

Dokładnie tak
Zobacz czy pod wszystkie pola przypisujesz prawidłowe typy. Ja kiedyś walnąłem się na tym, że w pole daty wpisywałem wartość jako AsString a nie AsDateTime i też wywalało mi tym błędem.
"Drugą razą" wywalało mi błędem bo miałem kolumnę ROK, ale ja usilnie wpychałem tam integera pomimio, że w bazie zdefiniowałem to jako string (bez sensu zresztą).

0

Dokładnie tak
Zobacz czy pod wszystkie pola przypisujesz prawidłowe typy.

Ale mi ten błąd wywala nawet jak nic nie zmienie i wywołam w/w procedure lub gdy na pewno wpisuje dobrą wartość i zatwierdze zmiany.

0

no to może przedstaw nam strukture bazy danych (tabeli) i zarzuć kodem.

PS. Czesto przy tym można zauwarzyć swoje błędy i rozwiązać problem :)

0

Z tego co widzę to używasz BDE. To spróbuj skorzystać z obiektu TUpdateSQL. Może to Ci coś pomoże.

  1. Wrzuć TTable lub TQuery na formę
  2. Wrzuć TUpdateSQL
  3. Jeśli używasz TQuery to wpisz jawnie zapytanie
  4. Dla sprawdzenia typów dodaj pola tablicy lub zapytania do klasy formy (kliknij ten obiekt dwukronie a potem spod prawego klawisza wybierz Add all fields)
  5. Dołącz TUpdateSQL-a do tablicy lub zapytania (ustaw ich UpdateObject na Twój TUpdateSQL)
  6. Kliknij UpdateSQL1 dwukrotnie i otworzy Ci się okienko, potem wciskaj po kolei klawisze od góry do dołu, aż wygenerujesz automatycznie SQL (generowany jest wartości parametrów DeleteSQL, InsertSQL i ModifySQL).
  7. Zobacz czy nadal się sypie program
    Jeśli tak to bez analizy zdefiniowanej bazy i kodu raczej się nie obędzie
0

Już jest ok. Zwracam honor, bo rzeczywiscie problem byl w typach danych :) Problem w tym, ze gdy aktualizowalem typ Memo, to wtedy wyskakiwał błąd. na razie pozbylem sie tego typu i jest ok. Mam nadzieje, ze nie bedę musiał sie go pozbyc na stałe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1