Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Suche in einer Access Datenbank mit Delphi (https://www.delphipraxis.net/54562-suche-einer-access-datenbank-mit-delphi.html)

Avax2k 6. Okt 2005 17:30

Datenbank: Access • Version: 2003 • Zugriff über: über ADO

Suche in einer Access Datenbank mit Delphi
 
Hallo, ich habe folgendes problem und zwar möchte ich in meiner Delphianwendung eine Access Datenbank durchsuchen. Habe dazu schon folgende Seite gefunden:

http://www.delphipraxis.net/internal...tenbank+suchen

leider habe ich es nicht geschafft, dass irgendetwas durchsucht wird auch wenn ich alles so schreibe, wie in diesem beitrag steht. Wenn ich auf den Knopf drücke, passiert einfach GAR NICHTS !!
wenn ich ein paar Argumente wie '' oder '%' weglasse kommt ein Fehler der sagt dass die Parameter falsch gesetzt sind..

hoffe jemand kann mir helfen und vielleicht sagen woran es liegt!

im Programm wird ADOConnection, ADOQuery, ADODataSet und DBGrid verwendet..alles ist richtig eingestellt und die Datenbank wird auch im DBGrid angezeigt..nur suchen lässt sich eben nicht :(

dfried 6. Okt 2005 19:46

Re: Suche in einer Access Datenbank mit Delphi
 
Ein bisserl Sourcecode wie du das machst und vor allem der SQL wären für eine LÖsungssuche extrem hilfreich!!! :zwinker:

Avax2k 6. Okt 2005 20:04

Re: Suche in einer Access Datenbank mit Delphi
 
SourceCode und SQL Text sind die gleichen wie bei dem Link den ich in meinem ersten Post angeheftet habe..ausgenommen den Tabellennamen und die Spaltenbezeichnung ist alles gleich.

Avax2k 7. Okt 2005 02:00

Re: Suche in einer Access Datenbank mit Delphi
 
hier der Quelltext des Buttons:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Text : String;
begin
  with ADODataSet1 do begin
  Close;
  Text := 'SELECT * FROM Datenbank WHERE Bezeichnung = "%' + Edit1.Text + '%" ';
  Open;
  end;
end;

end.
verwendet werden in der VCL Form nur TEdit, TButton, DataSource1, ADOConnection1 und ADODataSet1

so eingegeben tut sich nichts wenn man auf den Knopf klickt nachdem man in das Edit.Text Feld seine Eingabe gemacht hat. Ihr seht es ist somit so simpel, wie es eben nur sein kann und trotzdem geht es nicht.

[edit=Sharky]Quote-Tags durch Delphi-Tags ersetzt Mfg, Sharky[/edit]

mikhal 7. Okt 2005 07:31

Re: Suche in einer Access Datenbank mit Delphi
 
Tausche das Gleichheitssymbol durch den Operator LIKE, dann sollte es funktionieren.

Also:
Delphi-Quellcode:
...
Text := 'SELECT * FROM Datenbank WHERE Bezeichnung LIKE "%' + Edit1.Text + '%" ';
...
Grüße
Mikhal

r_kerber 7. Okt 2005 08:20

Re: Suche in einer Access Datenbank mit Delphi
 
Zitat:

Zitat von mikhal
Delphi-Quellcode:
...
Text := 'SELECT * FROM Datenbank WHERE Bezeichnung LIKE "%' + Edit1.Text + '%" ';
...

Wobei zu beachten ist, daß bei Access das Jokerzeichen standardmäßig * und nicht % ist.

Bernhard Geyer 7. Okt 2005 08:22

Re: Suche in einer Access Datenbank mit Delphi
 
Zitat:

Zitat von r_kerber
Zitat:

Zitat von mikhal
Delphi-Quellcode:
...
Text := 'SELECT * FROM Datenbank WHERE Bezeichnung LIKE "%' + Edit1.Text + '%" ';
...

Wobei zu beachten ist, daß bei Access das Jokerzeichen standardmäßig * und nicht % ist.

Je nach Zugriffsweg. AFAIK ist über ADO auch bei Access % das Joker-Zeichen. Nur direkt in Access bzw. über DAO kocht MS hier sein eigenes Süppchen.

Avax2k 7. Okt 2005 10:56

Re: Suche in einer Access Datenbank mit Delphi
 
Danke für die Tipps...

leider tut sich auch nichts, wenn ich das Gleichzeichen durch Like ersetze sprich
Zitat:

...
Text := 'SELECT * FROM DATENBANK WHERE BEZEICHNUNG LIKE "%' + Edit1.Text + '%";
...
die Datenbank habe ich so im ADODataSet1 eingestellt, dass lediglich "Bezeichnung" aus der kompletten Datenbank im DBGrid angezeigt wird.
Weiss jemand wieso das immer noch nicht funktionieren mag ?? :(

Jens Schumann 7. Okt 2005 11:10

Re: Suche in einer Access Datenbank mit Delphi
 
[quote="Avax2k"]hier der Quelltext des Buttons:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Text : String;
begin
  with ADODataSet1 do begin
  Close;
  Text := 'SELECT * FROM Datenbank WHERE Bezeichnung = "%' + Edit1.Text + '%" ';
  Open;
  end;
end;

end.
Tausch mal
Delphi-Quellcode:
Text := 'SELECT * FROM Datenbank WHERE Bezeichnung = "%' + Edit1.Text + '%" ';
gegen
Delphi-Quellcode:
CommandText := 'SELECT * FROM Datenbank WHERE Bezeichnung = "%' + Edit1.Text + '%" ';
aus

marabu 7. Okt 2005 11:15

Re: Suche in einer Access Datenbank mit Delphi
 
Und mache aus den Quotes jeweils zwei Hochkommata:

Delphi-Quellcode:
... := 'SELECT * FROM Datenbank WHERE Bezeichnung = ''%' + Edit1.Text + '%'' ';
Grüße vom marabu

Avax2k 7. Okt 2005 11:15

Re: Suche in einer Access Datenbank mit Delphi
 
Text ist aber wie auch CommandText lediglich eine Stringvariable, die vorher definiert wird.. somit könnte da auch Schrott := 'SELECT.... stehen wenn vorher var Schrott : String; als Variable definiert worden ist. Das mit den Hochkommas probiere ich jetzt mal.

Jens Schumann 7. Okt 2005 11:16

Re: Suche in einer Access Datenbank mit Delphi
 
Zitat:

Zitat von Avax2k
Text ist aber wie auch CommandText lediglich eine Stringvariable, die vorher definiert wird.. somit könnte da auch Schrott := 'SELECT.... stehen wenn vorher var Schrott : String; als Variable definiert worden ist.

CommandText ist die Eigenschaft von TADODataset, die das SQL-Statement aufnimmt. Ohne SQL-Statement kein Ergebnis.

shmia 7. Okt 2005 11:26

Re: Suche in einer Access Datenbank mit Delphi
 
Du könntest ein Volltext Filter einbauen.
Die Funktion CompareWildText findest du hier:
http://www.delphipraxis.net/internal...ct.php?t=21980
Delphi-Quellcode:
procedure TForm1.DoFilterRecord(DataSet: TDataSet;var Accept: Boolean);
var
   i : Integer;
   fields : TFields;
begin
   fields := dataset.Fields;
   for i := 0 to fields.Count-1 do
   begin
      if CompareWildText(DeinSuchTextString, fields[i].Text) then
      begin
         Accept := True;
         Exit;
      end;
   end;
   Accept := False;
end;
Jetzt musst du den Filter nur noch scharfmachen:
Delphi-Quellcode:
DeinSuchTextString := '*SEX*';
ADOQuery1.OnFilterRecord := self.DoFilterRecord;
ADOQuery1.Filtered := True;

dfried 7. Okt 2005 11:29

Re: Suche in einer Access Datenbank mit Delphi
 
Zitat:

Zitat von shmia
Du könntest ein Volltext Filter einbauen.

Das hätte aber den entscheidenden Nachteil, dass erst mal ALLE Datensätze gelesen werden müssen! KAnn bei grossen Tabellen ziemlich lange dauern. Wozu gibts denn SQL?

Avax2k 7. Okt 2005 11:34

Re: Suche in einer Access Datenbank mit Delphi
 
tatsächlich hat es an dem CommandText Befehl gelegen..hab Text sofort gegen CommandText ausgetauscht und es funktioniert.. allerdings nicht so wie ich es haben wollte..
sprich, wenn ich in der Bezeichnung nach "Eimer" suche und jetzt in der tabelle auch Holzeimer, Metalleimer usw. eben andere Wörter mit Eimer drin sind..geht der Marker nur zu einem dieser Eimer und zeigt die restlichen nicht an...was kann ich dagegen machen ?

habe nun einfach das erste ''%' durch ''' ersetzt dann sucht er mit dem Edit1.Text aber zeigt nunmehr die Zusammenhängenden Wörter nicht mehr an in denen Edit1.Text vorkommt ..hmm

shmia 7. Okt 2005 12:09

Re: Suche in einer Access Datenbank mit Delphi
 
Zitat:

Zitat von dfried
Zitat:

Zitat von shmia
Du könntest ein Volltext Filter einbauen.

Das hätte aber den entscheidenden Nachteil, dass erst mal ALLE Datensätze gelesen werden müssen! KAnn bei grossen Tabellen ziemlich lange dauern. Wozu gibts denn SQL?

Mein Vorschlag berücksichtigt alle Felder eines Datasets.
Möchte man das Gleiche in SQL erreichen dann würde folgendes herauskommen:
SQL-Code:
SELECT * FROM Kundenstamm WHERE (Name1 like :P1) or (Name2 like :P2) or (Name3 like :P3) or (PLZ like :P4) or ....
Die SQL Anweisung müsste dynamisch zur Laufzeit erzeugt werden.
Ich denke mein Vorschlag hat durchaus seine Anwendungsmöglichkeiten.

marabu 7. Okt 2005 12:25

Re: Suche in einer Access Datenbank mit Delphi
 
Hallo Avax2k,

die Suche arbeitet case sensitive - "Eimer" ist nicht gleich "eimer". Hier noch eine Variante, wie du das SQL Statement auch aufbauen kannst:

Delphi-Quellcode:
const
  sel = 'SELECT * FROM Datenbank WHERE UPPER(Bezeichnung) LIKE %s';
begin
  ...
  CommandText := Format(sel, [QuotedStr('%' + AnsiUppercase(Edit1.Text) + '%')]);
  ...
end;
Irgendwann wirst du dich dann für die Eigenschaft Parameters von TADODataSet interessieren und dir das entsprechende Kapitel in der Online Hilfe durchlesen.

marabu

Avax2k 7. Okt 2005 12:28

Re: Suche in einer Access Datenbank mit Delphi
 
danke für die zahlreiche Hilfe und die vielen Erläuterungen... sorry, wenn ich mich nicht all zu geschickt anstellen sollte


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 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