Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Suchen in Datenbank DBase


Arne Danikowski - Do 25.01.07 18:44
Titel: Suchen in Datenbank DBase
Hallo Leute,

ich habe eine kleines Datenbanktool (DBAse für Windows) erstellt und habe nun probleme mit dem Suchen.

hier der Quelltext, mit dem ich bisher suche:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Panel1Click(Sender: TObject);
begin
table1.Locate('Name', edit1.text,[]);
table1.Locate('Vorname', edit2.text,[]);
table1.Locate('Verwendung', edit3.text,[]);
table1.Locate('Ort', edit4.text,[]);
table1.Locate('Bemerkung', edit5.text,[]);


Folgende Probleme tauchen auf:

1.) Wenn nach einem Suchbegriff gesucht wird, der nicht vorhanden ist kommt es zu einer Fehlermeldung
2.) Es wird zwischen Groß- und Kleinschreibung unterschieden
3.) Nur 100% Übereinstimmung wird gefunden (Zuche ich zum Beispiel nach meinem Namen, muss ich "Danikowski" eingeben.
"Dani" bringt keine Ergebnisse
4.) Es wird nur ein Datensatz gefunden

Kann da jemand helfen?

mfg Arne


mkinzler - Do 25.01.07 18:50

Zitat:
1.) Wenn nach einem Suchbegriff gesucht wird, der nicht vorhanden ist kommt es zu einer Fehlermeldung

Dürfte eigentlich nicht, es wird nur ein entsprechenden Rückgabecode geliefert.
Welcher Fehler kommt?
Zitat:

2.) Es wird zwischen Groß- und Kleinschreibung unterschieden
3.) Nur 100% Übereinstimmung wird gefunden (Zuche ich zum Beispiel nach meinem Namen, muss ich "Danikowski" eingeben.

Schau dir mal den 3. Parameter an, da kannst du einstellen, daß auch Teilstrings gefunden werden und Groß-Kleinschreibung nicht mehr unterschieden wird.


Arne Danikowski - Do 25.01.07 19:07

Danke für die Antwort

Zitat:

Dürfte eigentlich nicht, es wird nur ein entsprechenden Rückgabecode geliefert.
Welcher Fehler kommt?


Siehe Bild
Zitat:

Schau dir mal den 3. Parameter an, da kannst du einstellen, daß auch Teilstrings gefunden werden und Groß-Kleinschreibung nicht mehr unterschieden wird.


Und wie funktioniert das?

mfg
Arne


mkinzler - Do 25.01.07 19:49


Delphi-Quelltext
1:
2:
3:
4:
if table1.Locate('Name', edit1.text,[loCaseInsensitive,loPartialKey]) then 
   //gefunden
else
   //nicht gefunden


Arne Danikowski - Fr 26.01.07 13:29

Ok das funktioniert!

So habe ich das nun:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure TForm1.Button1Click(Sender: TObject);
begin
     if table1.Locate('Name', edit1.text,[loCaseInsensitive,loPartialKey]) then
     begin
     form2.show
     end
     else
     if table1.Locate('HAUPTBERUF', edit2.text,[loCaseInsensitive,loPartialKey])
     then
     form2.show
     else
     if table1.Locate('VERWENDUNG', edit3.text,[loCaseInsensitive,loPartialKey])
     then
     form2.show
     else
     if table1.Locate('ORT', edit4.text,[loCaseInsensitive,loPartialKey])
     then
     form2.show
     else
     if table1.Locate('Bemerkung', edit5.text,[loCaseInsensitive,loPartialKey])
     then
     form2.show


     else

     ShowMessage ('Keine Daten gefunden')

end;


1.) nun möchte ich in form2 alle gefundenen datensätze in einem DBGrid feld anzeigen lassen.
2.) Wie sortiere ich die Tabele in einem DBGRID?

Ich denke ich muss irgendwie die Daten Filtern?


Arne Danikowski - So 28.01.07 01:43

keiner ne Idee?


Delete - So 28.01.07 10:26

entweder du nimmst SQL oder du setzt den entsprechenden index vor der suche um. ich empfehle dir SQL. Ist zwar etwas mehr aufwand, dein Progy umzustellen, aber du kannst dich bei dieser gelegenheit auch gleich von der BDE verabschieden... entsprechendes findest du zu hauf im forum. <HTH>


Arne Danikowski - So 28.01.07 14:04

Ich kann leider nicht auf SQL umsteigen, da diese Datenbankform ja einen SQL Server benötigt. Die Anwendung läuft aber auf einem Client, auf dem ich keine Software istallieren kann.


mkinzler - So 28.01.07 14:17

user profile iconArne Danikowski hat folgendes geschrieben:
Ich kann leider nicht auf SQL umsteigen, da diese Datenbankform ja einen SQL Server benötigt. Die Anwendung läuft aber auf einem Client, auf dem ich keine Software istallieren kann.

Auch für die BDE gibt es SQL (LocalSQL) beim Einsatz von TQuery statt TTable.
Bei Verwendung einer embedded-Datenbank z.B. FB embedded oder sqlite ist auf dem Client keine Installation nötig.


Arne Danikowski - So 28.01.07 19:22

Das hört sich interessant an damit werde ich mich mal beschäftigen