Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbankabfrage mit Paradox - doch nur Fehler... (https://www.delphipraxis.net/36245-datenbankabfrage-mit-paradox-doch-nur-fehler.html)

stoermi 17. Dez 2004 15:10


Datenbankabfrage mit Paradox - doch nur Fehler...
 
Hallo Delphi-Datenbank-Freunde!!!

Ich habe wohl ein mächtiges Problem...
Bei mir kommen die dubiosesten Fehler (Bsp.: EOIeError,Variante referenziert keinen Automatisierungstyp, ...).
Dazu hab ich hier auch noch nichts gefunden.

Aber naja, vielleicht liegt der Fehler einfach bei mir.
Vielleicht könnt ihr mir jetzt mit einer Lösung helfen.

Ich habe eine Paradox7-Tabelle ohne Alias:

Buchungen {ID, Zimmer, Kunde, Anreise, Abreise,...}
Zimmer ist ein Alpha-Wert, Kunde ist Integer und An- und Abreise sind Datum-Werte.

Ich habe weiter in mein Formular ein TQuery (BuchungenQuery) eingebaut.

Nun möchte ich gern aus der Tabelle abfragen, ob ein bestimmtes Zimmer an einem Bestimmten Tag frei ist...
Delphi-Quellcode:
    with BuchungenQuery do
    begin
      active := false;
      sql.clear;
      sql.add('SELECT COUNT(id) AS belegt FROM daten\buchungen.db WHERE Zimmer=:zimmernummer AND anreise<=:pdatum AND abreise>:pdatum');
      ParamCheck := true;
      ParamByName ('pdatum').AsDate := datum;
      ParamByName ('zimmernummer').AsString := zimmerObj[i].zimNum;
      active := true;
      open;
      first;
      blgt := BuchungenQuery.FieldValues['belegt'].AsInteger;
      close;
    end;
Hier muss irgend wo schon der erste Fehler liegen.
Danach soll, wenn das Zimmer frei ist, geschaut werden, wie lange es noch frei ist, bzw. für wann die nächste Buchung vorliegt.

Wie gesagt, mein Delphi bombadiert mich mit undefinierbarenn Fehlermeldungen, selbst wenn ich einfach nur Test werte eingebe und ihne Parameter arbeite.
Deshalb denke ich schon, das da was im Code nicht stimmt. Komischerweise haben aber schon abfregen über das Query funktioniert. Hab aber leider keine Ahnung, was ist soll ist.

Deshalb würde ich mich auch freuen, wenn ihr mir einen neuen Ansatz bzw. Lösungsvorschlag geben könntet.

Diese Paradox-SQL ist ja sehr abgespeckt. Doch ich weiss leider auch nicht, was alles zuläßig ist, und was nicht...

Schon einmal Danke für euere hoffentlich umfangreiche Hilfe...

Die Muhkuh 17. Dez 2004 15:13

Re: Datenbankabfrage mit Paradox - doch nur Fehler...
 
Zitat:

Zitat von stoermi
Delphi-Quellcode:
    with BuchungenQuery do
    begin
      active := false;
      sql.clear;
      sql.add('SELECT COUNT(id) AS belegt FROM daten\buchungen.db WHERE Zimmer=:zimmernummer AND anreise<=:pdatum AND abreise>:pdatum');
      ParamCheck := true;
      ParamByName ('pdatum').AsDate := datum;
      ParamByName ('zimmernummer').AsString := zimmerObj[i].zimNum;
      active := true;
      open;
      first;
      blgt := BuchungenQuery.FieldValues['belegt'].AsInteger;
      close;
    end;

Hi,

ich weis nicht ob jetzt DAS Problem ist, aber eigentlich sollte das so heißen:
Delphi-Quellcode:
    with BuchungenQuery do
    begin
      Close;
      //active := false; // Das kann man sich sparen
      sql.clear;
      sql.add('SELECT COUNT(id) AS belegt FROM daten\buchungen.db WHERE (Zimmer=:zimmernummer) AND (anreise<=:pdatum) AND (abreise>:pdatum)');
      ParamCheck := true;
      ParamByName ('pdatum').AsDate := datum;
      ParamByName ('zimmernummer').AsString := zimmerObj[i].zimNum;
      //active := true; // kann man sich sparen.
      open;
      first;
      blgt := BuchungenQuery.FieldValues['belegt'].AsInteger;
      close;
    end;

stoermi 17. Dez 2004 15:22

Re: Datenbankabfrage mit Paradox - doch nur Fehler...
 
Hallo Manuel!

Also, der Fehler kommt weiter, übrigens beim zweiten close!

Tschüß

Die Muhkuh 17. Dez 2004 15:24

Re: Datenbankabfrage mit Paradox - doch nur Fehler...
 
Hi,

was passiert wenn du das zweite Close weglässt?

Kannst du mal ein paar von den Fehlermeldungen posten? Vielleicht wissen wir ja was darüber.

Die Muhkuh 17. Dez 2004 15:28

Re: Datenbankabfrage mit Paradox - doch nur Fehler...
 
Hi,


schreib mal statt:

Delphi-Quellcode:
blgt := BuchungenQuery.FieldValues['belegt'].AsInteger;
mal:

Delphi-Quellcode:
blgt := BuchungenQuery.FieldByName('belegt').AsInteger;
[edit]

Bin mir jetzt nicht sicher, aber sollte es nicht so:

Delphi-Quellcode:
sql.add('SELECT COUNT(id) AS belegt FROM "daten\buchungen.db" WHERE Zimmer=:zimmernummer AND anreise<=:pdatum AND abreise>:pdatum');
btw. so:

Delphi-Quellcode:
sql.add('SELECT COUNT(id) AS belegt FROM ' + QuotedStr('daten\buchungen.db') + ' WHERE (Zimmer=:zimmernummer) AND (anreise<=:pdatum) AND (abreise>:pdatum)');
Desweiten, warum machst du Count(id)? Sollte es nicht langen mit einem SELECT id FROM.... Ausserdem muss die SQL-Abfrage so heißen: SELECT id, Zimmer, anreise, abreise FROM .... Du musst glaub ich auch die Felder auswählen mit denen du den WHERE-Vergleich machst. Da hab ich sonst auch Fehlermeldungen bekommen. Werde das grad nochmal testen, nicht das ich was falschen sage :stupid:.

[/edit]

stoermi 17. Dez 2004 15:29

Re: Datenbankabfrage mit Paradox - doch nur Fehler...
 
Also, nochmal: Der Fehler Fehler tritt jetzt auf einmal, nach dem ich das Close weggelassen habe, bei der Belegung von blgt auf.
Er lautet: EOIeError: Variante referenziert kein Automatisierungsobjekt!

stoermi 17. Dez 2004 15:35

Re: Datenbankabfrage mit Paradox - doch nur Fehler...
 
Jetzt tritt der Fehler erst wieder bei meiner zweiten Abfrage auf, die ich allerdings noch nicht bearbeitet habe...

Was mich iritiert ist, dass mir die Programierhilfedas FieldByName nicht anzeigt...

Bevor ich die Zwiete Abfrege macht: Wie würdet ihr das in SQL formulieren? Mein Problem ist, dass beispielsweise in der Zukunft noch kein Termin vorliegt. So wird natürlich auch nichts gefunden. Delphi zeigt mir dann als Termin den 30.12.1899 an...
Durch ne Schachtelung kann ich es ja auch nicht ausschliessen, da Paradox das nicht verarbeiten kann...

stoermi 17. Dez 2004 15:39

Re: Datenbankabfrage mit Paradox - doch nur Fehler...
 
Zitat:

Zitat von Spider
Desweiten, warum machst du Count(id)? Sollte es nicht langen mit einem SELECT id FROM.... Ausserdem muss die SQL-Abfrage so heißen: SELECT id, Zimmer, anreise, abreise FROM .... Du musst glaub ich auch die Felder auswählen mit denen du den WHERE-Vergleich machst. Da hab ich sonst auch Fehlermeldungen bekommen. Werde das grad nochmal testen, nicht das ich was falschen sage :stupid:.

Also bei mySQL muss im SELECT eigentlich nur auch das drin stehen, nach dem sortiert wird: ORDER BY!!!

Die Muhkuh 17. Dez 2004 15:39

Re: Datenbankabfrage mit Paradox - doch nur Fehler...
 
Hi,

dass das die ProgrammierHilfe nicht anzeigt ist kein Fehler von dir. Das ist ein Bug in Delphi, der mit dem Update behoben werden sollte ;).

Du könntest ja doch nachschauen ob was gefunden wurde. Ich mach das immer so:

Delphi-Quellcode:
If Query.RecordCount > 0 then
begin
  // Wenn etwas gefunden wurde
end
else
begin
  // Wenn nichts gefunden wurde
end;

Die Muhkuh 17. Dez 2004 15:42

Re: Datenbankabfrage mit Paradox - doch nur Fehler...
 
Zitat:

Zitat von stoermi
Zitat:

Zitat von Spider
Desweiten, warum machst du Count(id)? Sollte es nicht langen mit einem SELECT id FROM.... Ausserdem muss die SQL-Abfrage so heißen: SELECT id, Zimmer, anreise, abreise FROM .... Du musst glaub ich auch die Felder auswählen mit denen du den WHERE-Vergleich machst. Da hab ich sonst auch Fehlermeldungen bekommen. Werde das grad nochmal testen, nicht das ich was falschen sage :stupid:.

Also bei mySQL muss im SELECT eigentlich nur auch das drin stehen, nach dem sortiert wird: ORDER BY!!!


Jupp, sorry. Hatte damals bei mir nen Fehler in meiner SQL-Abfrage. Deswegen dachte ich das es nur so geht. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Seite 1 von 2  1 2      

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