Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Access: Datentypen in Kriterienausdruck unverträglich (https://www.delphipraxis.net/119364-access-datentypen-kriterienausdruck-unvertraeglich.html)

Flippo 25. Aug 2008 14:03

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:
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;
Das ist die aufgerufene myStoredProc in der Access Datenbank:

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

mkinzler 25. Aug 2008 14:11

Re: Access: Datentypen in Kriterienausdruck unverträglich
 
Brich die Abfrage mal in Teilabfragen auf

Flippo 25. Aug 2008 14:57

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?

mkinzler 25. Aug 2008 14:58

Re: Access: Datentypen in Kriterienausdruck unverträglich
 
So gehe ich immer bei fehlerhaften Abfragen vor

Flippo 25. Aug 2008 15:04

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

marabu 25. Aug 2008 15:57

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:
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;
Getippt und nicht getestet.

Freundliche Grüße

Flippo 25. Aug 2008 16:21

Re: Access: Datentypen in Kriterienausdruck unverträglich
 
Ok, thx

Flippo 3. Sep 2008 11:11

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 23:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz