Delphi-Abfrage

Hallo,

nach einem Beispiel aus dem Buch Grundlagen und Profiwissen Borland Delphi 5 von Walter Doberenz und Thomas Kowalski habe ich mir meine Datenbank ab der Seite 1078 aufgebaut.

Nun möchte ich eine Abfrage von PLZ bis PLZ (Eingabe realisiert durch 2 Editfelder) durchführen. Die ausgelesenen Daten möchte ich über eine Druckfunktion ausgeben.

Die Datenbank hat den Namen Adress, das dbEditfeld hat den Namen PLZ.

Wie muss ich die Abfrage definieren???

Danke,

Ralf Funke

Hallo,

Nun möchte ich eine Abfrage von PLZ bis PLZ (Eingabe
realisiert durch 2 Editfelder) durchführen. Die ausgelesenen
Daten möchte ich über eine Druckfunktion ausgeben.

Die Datenbank hat den Namen Adress, das dbEditfeld hat den
Namen PLZ.

Wie muss ich die Abfrage definieren???

'SELECT * FROM Adress WHERE PLZ >= ’ + Edit1.text + ’ AND PLZ

Hallo Niels

Danke für deine Unterstützung!!!

Ich habe die Suche hinter einem Button unter begin geschrieben. Es erfolgten folgende Meldungen:

[Warnung] UNIT1.PAS(8): Unit ‚FileCtrl‘ ist plattformspezifisch
[Fehler] UNIT1.PAS(261): Anweisung erforderlich, aber Ausdruck vom Typ ‚String‘ gefunden
[Fataler Fehler] Project.dpr(7): Verwendete Unit ‚UNIT1.PAS‘ kann nicht compiliert werden

Kannst du mir sagen, was falsch ist bzw. was ich ändern muss, dass es funktioniert.

Mit freundlichen Grüßen
Ralf

Hi!
Poste mal bitte die Zeile 261, die davor und die danach :smile: So können wir uns ein bild machen…
danke

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Poste mal bitte die Zeile 261, die davor und die danach :smile: So
können wir uns ein bild machen…
danke

na, wenn ich richtig schätze, hat er in Zeile 261 ungefähr sowas stehen:

'SELECT \* FROM Adress WHERE PLZ \>= ' + Edit1.text + ' AND PLZ 

no comment :smile:))

Gruss, Niels

procedure TForm1.Button5Click(Sender: TObject);

begin
'SELECT * FROM Adress WHERE PLZ >= ’ + Edit3.text + ’ AND PLZ

na, wenn ich richtig schätze, hat er in Zeile 261 ungefähr
sowas stehen:

'SELECT * FROM Adress WHERE PLZ >= ’ + Edit1.text + ’ AND
PLZ

no comment :smile:))

Gruss, Niels

hmm und wo wäre hier eine erwartete anweisung?

Hallo,

lies die Antwort von Ralf, dann weißt du, was ich meine.

Gruss, Niels

Hallo,

procedure TForm1.Button5Click(Sender: TObject);

begin
'SELECT * FROM Adress WHERE PLZ >= ’ + Edit3.text + ’ AND
PLZ

MyQuery.Close; //falls die Abfrage noch offen
MyQuery.SQL.Clear; //Löscht die bisher verwendete SQL
MyQuery.SQL.Add('SELECT * FROM Adress WHERE PLZ >= ’ + Edit3.text + ’ AND PLZ

wenn du alles anzeigen willst, ersetzt du den Text einfach durch ‚SELECT * FROM Adress‘.

Ich dachte einfach, du hättest schon eine Query, wüsstest nur den SQL-Befehl nicht.

Es gibt auch noch Möglichkeiten, die Abfrage zu beschleunigen, wenn die ANgaben häufig wechseln, aber jetzt schau erst mal, dass das obige funktioniert und dann sehen wir weiter.

Gruss, Niels

Hallo

Ich versuche es dir zu erklären, wie ich meine Datenbank aufgebaut habe.

Ich habe eine Query1: die erstellt meine Datenbank

CREATE TABLE „adress.db“
(
Nr AUTOINC,
Name CHAR(30),
Vorname CHAR(30),
Strasse CHAR(30),
PLZ CHAR(5),
Ort CHAR(30),
Telefon CHAR(30),
Handy CHAR(15),
Firma CHAR(30),
HU CHAR(10),
Kennzeichen CHAR(10),
Durchsichtkm CHAR(10),
Durchsichtdate DATE,
Geburtsdatum DATE,
Kilometerstand FLOAT,
ASUS DATE,
Farbcode CHAR(20),
Fahrgestellnummer CHAR(30),
Typ CHAR(25),
Bemerkung BLOB(20,1),
PRIMARY KEY(nr)
);

Danach habe ich eine TTable1 angelegt .
Auf ein PageControl1 habe ich je Tabellenspalte (ASUS; Typ:stuck_out_tongue_winking_eye:LZ usw)ein DBEDIT Feld angelegt und zugewiesen.

Alles ist voll funktionstüchtig und läuft ohne Fehler auch die eingearbeitete Suchfunktion.

In einem weiteren TabSheet habe ich 2 Edit Felder und ein Button und ein DBGRID4 eingearbeitet.

Ich möchte nun folgendes im DBGRID4 angezeigt haben.
Eine Auswahl von Postleitzahlen die ich durch die Eingabe im EDIT3 und EDIT5 Feld begrenze und bein Betätigen des Button5 soll die Ausgabe im DBGRID Feld erscheinen.
Oder:
Durch betätigen des Button5 sollen die ausgefilterten Daten über ein Quickreport ausgegeben werden.

Nun zu Deiner letzten Antwort:
Ich habe ein Query2 eingearbeitet und beim Objektinspektor im Feld SQL (TString) das eingearbeitet, was du mir geschickt hast .

MyQuery.Close; //falls die Abfrage noch offen
MyQuery.SQL.Clear; //Löscht die bisher verwendete SQL
MyQuery.SQL.Add('SELECT * FROM Adress WHERE PLZ >= ’ + Edit3.text + ’ AND PLZ = ’ + Edit3.text + ’ AND PLZ

Hallo Niels

Ich habe die Telefonnummer vergessen 09721 948262

Ralf

Ich habe die Telefonnummer vergessen 09721 948262

Nein, nein, so geht das nicht, da musst du schon bei mir anrufen:

00491905622 :smile:)

Gruss, Niels

Hallo,

Query1.Close; //falls die Abfrage noch offen
Query1.SQL.Clear; //Löscht die bisher verwendete SQL
Query1.SQL.Add('SELECT * FROM Adress WHERE PLZ >= ’ + Edit3.text + ’ AND PLZ

Habe das problem jetzt folgendermaßen gelöst. So wie es da steht, funktioniert es, aber ich möchte jetzt nicht das datum hier fest einstellen, sondern durch editfelder einlesen lassen. wie muss der quelltext dann lauten??

SELECT name + ', ’ + vorname AS namevorname,
Durchsichtkm,
Durchsichtdate,
Ort,
Strasse,
Plz
FROM Adress
WHERE durchsichtdate BETWEEN ‚11.11.2003‘ AND ‚15.11.2003‘
ORDER BY namevorname

Ralf

Hallo,

SELECT name + ', ’ + vorname AS namevorname,
Durchsichtkm,
Durchsichtdate,
Ort,
Strasse,
Plz
FROM Adress
WHERE durchsichtdate BETWEEN ‚11.11.2003‘ AND ‚15.11.2003‘
ORDER BY namevorname

die Lösung steht weiter oben. Mit TQuery.SQL.Add kannst du einer Query eine neue SQL-Abfrage zuweisen und mit SQL.Open starten. Und wenn du es besonders schnell haben willst, lies dir mal die Hilfe zur Methode TQuery.prepare durch.

Gruss, Niels