![]() |
Datenbank: Access • Zugriff über: ADO
Access: Datentypen in Kriterienausdruck unverträglich
Hallo,
ich habe folgendes Problem. Ich lese mit der Funktion blubb Daten ein. Das erste einlesen funktioniert auch tadellos. Wenn ich diese Daten dann aber lösche und gleich danach wieder einlese, dann bekomme ich die Fehlermeldung: "Datentypen in Kriterienausdruck unverträglich." Wenn ich nach dem löschen das Programm neu starte, dann bekomme ich die Fehlermeldung nicht. Die anderen Beiträge die sich mit dieser Fehlermeldung beschäftigen haben mir alle nicht weitergeholfen, bei den meisten lags am Format des Datums, aber ich hab nur string und integer werte.
Delphi-Quellcode:
Das ist die aufgerufene myStoredProc in der Access Datenbank:
function Blubb(var1, var2: String): TStringList;
var id: integer; begin result := TStringList.Create; self.myStoredProc.Parameters.Items[0].Value := var1; self.myStoredProc.Parameters.Items[1].Value := var2; self.myStoredProc.Prepared := true; self.myStoredProc.Open; //Hier kommt der Fehler self.myStoredProc.First; while not self.myStoredProc.Eof do begin id := self.blubb2(var1, 'STR', self.myStoredProc.Fields[2].asInteger); result.Add(self.myStoredProc.fields[1].asString + '=' + intToStr(id)); self.myStoredProc.Next; end; self.myStoredProc.Close; end; SELECT te.id, tp.start_byte, ta.val FROM (tp INNER JOIN ta ON tp.id=ta.p_id) INNER JOIN te ON te.id=ta.e_id WHERE (tp.start_byte between 23 AND 30) AND ta.val <> 0 AND te.id in ( SELECT te.id FROM (((tp INNER JOIN ta ON tp.id = ta.p_id) INNER JOIN te ON te.id = ta.e_id) INNER JOIN te ON tp.e_id = te.id) where te.vers = var1 AND te.kennung = 34 AND tp.start_byte = 13 AND ta.val = var2) ORDER BY te.id, tp.start_byte; te.vers ist String ta.val ist integer Ich hoffe ihr könnt mit dieser Beschreibung etwas anfangen. Ich kann mir diesen Fehler einfach nicht erklären. Gibt es eine Möglichskeit self.myStoredProc wieder auf die Standartwerte, die es zum Programmstart hat zu setzen? Denn wenn ich das Programm neu starte geht es ja ohne Fehlermeldung. Danke an alle die sich daran probieren MfG flippo |
Re: Access: Datentypen in Kriterienausdruck unverträglich
Brich die Abfrage mal in Teilabfragen auf
|
Re: Access: Datentypen in Kriterienausdruck unverträglich
werd ich mal probieren. Aber was bringt das dann, hast du eine Vermutung woran es liegen kann? Oder soll das der Fehlerfindung dienen?
|
Re: Access: Datentypen in Kriterienausdruck unverträglich
So gehe ich immer bei fehlerhaften Abfragen vor
|
Re: Access: Datentypen in Kriterienausdruck unverträglich
Ich bin leider noch recht unerfahren was das ganze mit den Datenbanken angeht. Werde das bei nächster Gelegenheit mal so probieren und hoffe das ich was rausfinde. Wird bis dahin leider etwas(bis nächste Woche) dauern, ich meld mich dann wieder und hoffe das der Thread noch nicht eingeschlafen ist.
Falls jemand bis dahin noch einen heißen Tipp hat oder sieht woran es liegen könnte, wäre ich natürlich dankbar :-D MfG flippo |
Re: Access: Datentypen in Kriterienausdruck unverträglich
Hallo Flippo,
die Fehlermeldung bezieht sich nicht auf den Rumpf deiner Stored Procedure, denn die funktioniert ja unter bestimmten Bedingungen. Es geht mehr um die Parameter. Die von der Komponente müssen genau mit denen aus der SP-Deklaration übereinstimmen - Richtung und Typ, evtl. auch Größe. Folgende Vorgehensweise ist ratsam: (1) TDAOStoredProc über den Object Inspector konfigurieren. (2) Insbesondere die Parameter korrekt typisieren. (3) Prepared auf True setzen Speziell das mehrfache Setzen von Prepared auf True ist unnötig. Es passiert nach dem ersten Mal auch nichts mehr, weil der VCL Code unsinnige Änderungen an Properties außer Acht lässt. Hier noch ein paar Denkanstöße:
Delphi-Quellcode:
Getippt und nicht getestet.
procedure TDataModel.GetMapping(const param1, param2: string; strings: TStrings);
var id: Integer; begin with myStoredProc do begin Parameters.ParamValues['param1'] := param1; Parameters.ParamValues['param2'] := param2; Open; while not Eof do begin id := GetId(param1, 'STR', FieldByName('TheValue').AsInteger); strings.Values[FieldByName('TheName')] := IntToStr(id); Next; end; Close; end; end; Freundliche Grüße |
Re: Access: Datentypen in Kriterienausdruck unverträglich
Ok, thx
|
Re: Access: Datentypen in Kriterienausdruck unverträglich
Vielen Dank!
Hab das Problem Heute dank, eurer Tipps lösen können. :bounce2: So wie die Parameter typisiert waren, war es nicht überraschend, dass beim zweiten Einlesen eine Fehlermeldung kam. Sonderbar ist, das es überhaupt beim ersten Einlesevorgang funktioniet hat :stupid: Also bis zum nächsten mal, flippo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz