![]() |
Datenbank: Dbase • Version: 5.0 • Zugriff über: BDE
EDatabaseError - auslesen aus DB
Hallo
ich versuche schon seit einiger Zeit aus einer *.dbf Datei alle Rechnungsnummern herauszusuchen die ihre Rechnung noch nicht bezahlt haben, das mache ich so:
Delphi-Quellcode:
Klappt überhaupt nicht, erhalte folgende Fehlermeldung:
procedure TForm1.Button1Click(Sender: TObject);
begin With Query1 do begin sql.add('select * from Rechnungen where BEZAHLT = BEZAHLT '); Open; While not EOF do begin memo1.Lines.Add(FieldByName('N').AsString + ' => gefunden!'); // N = Nein Next; End; Close; end; end; Zitat:
Da weiss ich auch noch nicht wie. gruesse capo |
Re: EDatabaseError - auslesen aus DB
Hallo Capo,
dann scheint es das Feld "N" wohl nicht zu geben. Was meinst Du mit N = Nein? Grüsse ...Doc |
Re: EDatabaseError - auslesen aus DB
Hallo,
du wirfst hier etwas durcheinander. ändere deine Query (vor dem 2. BEWZAHLT kommt ein Doppelpunkt).
Delphi-Quellcode:
das select N geht davon aus, dass das Rechnungsnummer Feld N heisst,
sql.add('select N from Rechnungen where BEZAHLT = :BEZAHLT ');
ParamByName('BEZAHLT').AsString:= 'N'; // falls es ein Char ist Open; try while not EOF // usw. finally Close; end; falls nicht, ändern. Heiko |
Re: EDatabaseError - auslesen aus DB
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Heiko
Danke für deine Hilfe. Ich verwechsel da glaub ich immer noch was:
Delphi-Quellcode:
Schau dir bitte mal die Struktur an:
procedure TFRechnung.Button1Click(Sender: TObject);
begin With Query1 do begin sql.add('select RGNR from Rechnungen where BEZAHLT = :BEZAHLT '); ParamByName('BEZAHLT').AsString:= 'N'; // falls es ein Char ist Open; try while not EOF do begin memo1.Lines.Add(FieldByName('N').AsString + ' => gefunden!'); Next; End; finally Close; end; end; end; |
Re: EDatabaseError - auslesen aus DB
Das Feld heißt BEZAHLt also muß es
Delphi-Quellcode:
heißen.
memo1.Lines.Add(FieldByName('BEZAHLT').AsString + ' => gefunden!');
|
Re: EDatabaseError - auslesen aus DB
hi, irgendwie nicht, erhalte dann als Meldung:
Zitat:
capo |
Re: EDatabaseError - auslesen aus DB
Du läßst dir ja auch nur ein Feld zurückgeben:
Zitat:
|
Re: EDatabaseError - auslesen aus DB
Das liegt daran:
Delphi-Quellcode:
Du musst die Felder, auf die Du zugreifen möchtest auch abfragen, z.B. mit
sql.add('select RGNR from Rechnungen where BEZAHLT = :BEZAHLT ');
Delphi-Quellcode:
oder
sql.add('select RGNR,BEZAHLT from Rechnungen where BEZAHLT = :BEZAHLT ');
Delphi-Quellcode:
Grüsse
sql.add('select * from Rechnungen where BEZAHLT = :BEZAHLT ');
...Doc |
Re: EDatabaseError - auslesen aus DB
Ich fang gerade erst damit an.
Danke das war es! Gruss Capo |
Re: EDatabaseError - auslesen aus DB
Ich doch nochmal. :)
Was muss ich tun wenn ich alle Daten der Zeile in der (N) sich befindet in ein DBGrid bekommen will? Oder hat jemand ein kleines Tutorial speziell für Delphi & Dbase? gruss capo |
Re: EDatabaseError - auslesen aus DB
Im Prinzip musst Du nur eine DataSource auf das Formular ziehen, diese mit der Query verknüpfen und ein DBGrid welches mit der DataSource verknüpft wird...
Grüsse ...Doc |
Re: EDatabaseError - auslesen aus DB
Hallo DocE
danke, hab ich gemacht, bekomme folgende Meldung: Zitat:
|
Re: EDatabaseError - auslesen aus DB
Du scheinst immer mehr Änderungen zu machen, als man dir vorschlägt. Poste mal den ganzen aktuellen Code.
|
Re: EDatabaseError - auslesen aus DB
...und vielleicht dazu noch, wann die Fehlermeldung auftritt (beim Starten, wenn Du Änderungen im DBGrid vornehmen möchtest). Die Meldung deutet daraufhin, dass Du versuchst im DBGrid Daten anzuzueigen/zu ändern, obwohl die Query noch keine SQL-Anweisung hat...
|
Re: EDatabaseError - auslesen aus DB
Hallo,
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin With Query1 do begin sql.add('select * from Rechnungen where BEZAHLT = :BEZAHLT '); // sql.add('select RGNR,BEZAHLT from Rechnungen where BEZAHLT = :BEZAHLT '); ParamByName('BEZAHLT').AsString:= 'N'; // falls es ein Char ist Open; try while not EOF do begin memo3.Lines.Add(FieldByName('BEZAHLT').AsString + ' => gefunden!'); Next; End; finally Close; end; end; end; |
Re: EDatabaseError - auslesen aus DB
Das "Close" ist das Problem. Dann ist die Datenmenge ja wieder geschlossen und kann auch nicht mehr angezeigt werden...
|
Re: EDatabaseError - auslesen aus DB
Das
Close muss weg, die Query muss offen bleiben, wenn du die Daten im DBGrid anzeigen möchtest. Ausserdem prüfe, ob alles verknüpft ist. DBGrid.DataSource -> TDataSource.DataSet -> Query Heiko |
Re: EDatabaseError - auslesen aus DB
hallo und danke nun klappt es... bis auf eine kleine Fehlermeldung wenn ich zweimal hintereinander auf den Button klick:
Zitat:
Nunja, jedenfalls klappt das auslesen. Nochmal Danke dafür :-D |
Re: EDatabaseError - auslesen aus DB
Hallo,
naja, das habe ich nun nicht noch gesagt :wall: ) ein bissel solltest du aich selber was machen .. ;) beim zweiten Drücken ist die Query schon offen, dann muss man die vorher zumachen if Query.Active then Query.Active:= False; oder sogar als 1. Befehl im OnButton if Query.Active then Exit; Das kommt aber auf deine Logik an, bisher macht es ja keinen Sinn, überhaupt einen Button reinzupacken, da die Query ja immer offen sein muss. Heiko PS: Übrigens würde ich schleunigst die DB wechseln. Paradox ist out. Sobald ein "index out of date" kommt, sprechen wir weiter ;) |
Re: EDatabaseError - auslesen aus DB
Zitat:
in deinem Code steht Query1.SQL.Add(...), d.h. bei jedem Click auf den Button wird zur bereits bestehenden SQL-Anweisung eine neue (in diesem Fall die gleiche) hinzugefügt :-). Das Ergebnis ist: select * from Rechnungen where BEZAHLT = :BEZAHLT select * from Rechnungen where BEZAHLT = :BEZAHLT Auf der sicheren Seite bist du, wenn du entweder
Delphi-Quellcode:
oder
Query1.SQL.Clear; // alle Anweisungen löschen
Query1.SQL.Add('select * from Rechnungen where BEZAHLT = :BEZAHLT ') // Anweisung hinzufügen Query1.SQL.Add('ORDER BY KDNR') // 2. Zeile (hier nur mal als Beispiel) Query1.Open;
Delphi-Quellcode:
Im Übrigen wird eine offene Query automatisch geschlossen, sobal das SQL-Statement geändert wird; auf der sicheren Seite (und für den Fall des Debuggens) ist es immer besser, expliziet
//--neue Anweisung zuweisen: vorhandene Anweisung wird durch die neue ersetzt
Query1.SQL.Text := 'SELECT * FROM Rechnungen WHERE BEZAHLT = :BEZAHLT ORDER BY KDNR'; Query1.Open;
Code:
zu schreiben ;-)
Query1.Close
Zitat:
|
Re: EDatabaseError - auslesen aus DB
danke für eure hilfe. :kiss:
ich hab bestimmt in den nächsten tagen noch die eine oder andere Frage zu dem Thema. [edit]Auch jetzt schon... kann ich anstatt einer TQuery auch eine TTable nehmen, damit kann ich mir die Daten so schön während der Entwurfszeit anzeigen lassen um mir das DBGrid so anzeigen zu lassen wie ich es will. Zitat:
ohne gross iregndwelche DB-Server installieren zu müssen. Grüsse vom capo |
Re: EDatabaseError - auslesen aus DB
Zitat:
BTW. Da Paradox und DBase die BDE benötigen, mußt du ja auch etwas installieren. |
Re: EDatabaseError - auslesen aus DB
Hallo,
falls du mal einen SQL-Server im Kopf hast, lass TTable gleich weg, auch wenn es sich jetzt so schön benutzen lässt, die Probleme bekommst du dann später. Ich benutze übrigens FB 1.5, dort könntest du auch erst mal die embedded version benutzen. Ich rate allerdings davon ab. Wenn du vorhast, mehrere Benutzer auf deine DB zugreifen zu lassen, solltest du das auch von Anfang an so im Kopf haben. Performance-Probleme wegen zu viel Netzlast bekommst du nur mit, wenn du deine DB im Netz laufen lässt. Heiko |
Re: EDatabaseError - auslesen aus DB
Zitat:
|
Re: EDatabaseError - auslesen aus DB
Zitat:
|
Re: EDatabaseError - auslesen aus DB
Hallo mkinzler,
abraten, falls er später was im Netz machen will, siehe mein voriges Posting (Netzlast) Dann kommen wieder die Fragen "Lokal läuft es schnell, im Netz extrem langsam" Heiko |
Re: EDatabaseError - auslesen aus DB
Okay ich hatte das falsch verstanden. Seine Frage war ja aber nach alternativen Desktopdatenbanken ohne Installation eines Servers.
|
Re: EDatabaseError - auslesen aus DB
Jo,
aber man sollte rookies ja schnell an die Probleme ranführen ;) Heiko |
Re: EDatabaseError - auslesen aus DB
Möchte mich bei allen bedanken für die Hilfe und das Interesse,
Zitat:
ich will ja nicht unverschämt sein aber wie muss ich das machen, hast du noch ein Beispiel. grüsse capo |
Re: EDatabaseError - auslesen aus DB
Na einfach
SQL-Code:
Je nach verwendetem DBMS brauchst du u.U. noch Ein TUpdateSQL, welches du per .UpdateObject verknüpfst,
Select * from <Tabellennamen>;
|
Re: EDatabaseError - auslesen aus DB
yep hab ich nun so einigermaßen verstanden mach es aber momentan so:
Delphi-Quellcode:
eine/zwei frage(n) habe ich noch und zwar.
procedure TForm1.Button1Click(Sender: TObject);
begin with Query1 do begin SQL.Clear; sql.add('select * from Rechnungen,Kunden where BEZAHLT = :BEZAHLT'); ParamByName('BEZAHLT').AsString := 'N'; // falls es ein Char ist Open; try while not EOF do begin // memo3.Lines.Add(FieldByName('BEZAHLT').AsString + ' => gefunden!'); Next; end; finally // Close; end; end; end; bekomme ich so ja "nur" die kundennummer und die noch offenen rechungen im dbgrid angezeigt. frage: wie kann ich mir den dazugehörigen namen mit adresse aus einer db mit namen kunden.dbf dazuholen und wahnsinnig toll wäre es dann mit einem klick auf die entsprechende zeile dann auch die entsprechende rechnung angezeigt zu bekommen? capo |
Re: EDatabaseError - auslesen aus DB
Zitat:
|
Re: EDatabaseError - auslesen aus DB
Das
Delphi-Quellcode:
kannst Du Dir im Prinzip sparen, da Du jetzt ja nur noch mit "Next;" die gesamte Tabelle "durchläufst" ohne irgendetwas zu machen. Möchtest Du nach dem Öffnen direkt zum Ende der Tabelle springen reicht ein Aufruf von "Last;"
try
while not EOF do begin // memo3.Lines.Add(FieldByName('BEZAHLT').AsString + ' => gefunden!'); Next; end; finally // Close; end; Grüsse ...Doc |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 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