Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Suchen mit TQuery ? (https://www.delphipraxis.net/66068-suchen-mit-tquery.html)

Vader 24. Mär 2006 10:45

Datenbank: Paradox • Version: 7 • Zugriff über: TQuery

Suchen mit TQuery ?
 
hallo,

bei datenzugriff mit ttable habe ich so gesucht, nach einen bestimmtem wort in einen feld
der paradoxtabelle ,mit hilfe eines edit wo man den suchbegriff eingibt und einen
buttonclickereigniss der die suche startet

Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var suche: string;
begin

suche:= edit1.Text;
Table1.Locate('Nachname', suche, [loCaseInsensitive,loPartialKey ]);

end;
wie schaut das buttonclickereigniss bei tquery aus ?
mfg vader

marabu 24. Mär 2006 10:52

Re: Suchen mit TQuery ?
 
Hallo Vader,

beim Arbeiten mit Datenbanken hast du fast immer eine Listenansicht und eine Detailansicht. Wenn du in der Liste suchen willst, dann verwendest du Locate() - egal ob TTable oder TQuery das DataSet bereitstellen. Du suchst ja dann in den Daten, die von deiner Anwendung schon gezeigt werden.

TQuery bietet dir im Gegensatz zu TTable die Möglichkeit die Gesamtmenge der Zeilen einer Tabelle oder Sicht sinnvoll zu beschränken. Dazu dient die WHERE-Klausel im SQL-Statement.

SQL-Code:
SELECT * FROM tabelle WHERE name = :suche
Grüße vom marabu

bundy 24. Mär 2006 10:58

Re: Suchen mit TQuery ?
 
hi

ich würde das auch so machen


Delphi-Quellcode:

MyQuery.SQL.TEXT := 'select * from table where Nachname = :parNachname';
MyQuery.Params.ParamByName('parNachname').AsString:=edit1.text;
MyQuery.active:=true;

lg
Bundy

mkinzler 24. Mär 2006 11:00

Re: Suchen mit TQuery ?
 
Hallo Vader,

das Thema wurde mit dir doch schon in diesem Betreff erläutert

Vader 24. Mär 2006 11:09

Re: Suchen mit TQuery ?
 
ja, aber da habe ich meine kleine datenbank mit ttable gemacht und wollte wissen wie man sucht,
jetzt habe ich sie mit tquery, ich möchte denn unterschied kennenlernen zwischen ttable und tquery,
vorteile,nachteile bevor ich mir ein buch kaufe

mfg vader

Vader 24. Mär 2006 11:18

Re: Suchen mit TQuery ?
 
marabu schreibt:
Zitat:

TQuery bietet dir im Gegensatz zu TTable die Möglichkeit die Gesamtmenge der Zeilen einer Tabelle oder Sicht sinnvoll zu beschränken. Dazu dient die WHERE-Klausel im SQL-Statement.
Delphi-Quellcode:
SELECT * FROM tabelle WHERE name = :suche
habs so probiert

Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
begin
SELECT * FROM tabelle WHERE name = :suche
end;
fehlermeldung:

Delphi-Quellcode:
[Fehler] Unit1.pas(87): Undefinierter Bezeichner: 'SELECT'
mfg vader

Sharky 24. Mär 2006 11:19

Re: Suchen mit TQuery ?
 
Zitat:

Zitat von Vader
... ich möchte denn unterschied kennenlernen zwischen ttable und tquery, ...

Hai Vader,

der unterschied ist eigentlich recht einfach erklärt.
Eine TTable holt immer alle Datensätze einer Tabelle aus der Datenbank. Das filtern findet dann lokal auf dem Client statt.

Bei einem TQuery sagst DU der Datenbank was für Datensätze Du haben möchtest (z.B. WHERE feld = value).

Daraus folgt das die Datenmenge die Du bei einer TTable bekommst dem SQL-Befehlt SELECT * FROM tabelle eines TQuery enspricht.


Was ist nun der Nachteil einer TTable? Wie gesagt werden immer alle Felder und alle Datensätze einer Tabelle zum Client übertragen.

Stelle dir nun vor Du hast eine Tabelle mit den Adressen aller Einwohner von Deutschland und suchst nun die Hausnummer eines Menschen von dem Du Name, PLZ und Strasse kennst.

Bei einer TTable würden jetzt also zig Millionen Datensätze (mit allen Feldern jedes DS) zu deinem Clientübertragen und dort würdest Du dann suchen bzw. filtern.

Bei einer TQuery sagst Du einfach:
SQL-Code:
SELECT hausnummer von tabelle WHERE (plz = :such_plz) AND (strasse = :such_strasse) AND (name = :such_name)
Jetzt bekommst Du von der DB zu deinem Client nur die Hausnummern welche deiner Suchanfrage entsprechen.
Das sind dann vielleicht einige hundert Byte. Und bei einer TTable sind es einige hunder MegaByte.

Ich hoffe das bringt etwas Licht in die Dunkelheit.

Nachtrag!!!
@Vader: Du musst den Code den man Dir zeigt auch so übernehmen.

Es müsste bei dir also so aussehen:
Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
begin
  Query1.Close;
  Query1.SQL.Text := 'SELECT * FROM tabelle WHERE name = :suche';
  Query1.ParamCheck := True;
  Query1.ParamByName('suche').AsString := Edit1.Text;
  Query1.Open
end;

bundy 24. Mär 2006 11:25

Re: Suchen mit TQuery ?
 
Der unerschild liegt auf der Hand.

Wenn du eine Datenbankanwendung programmierst, die über das Web laufen soll, dann hast du mit Query enorme einspahrungen in den Ladezeiten.

Bei einem Table lades du mal alle Daten, und dann "Locatest" du einen oder mehrer Datensätze.
Aber zu diesem Zeitpunkt hast du schon alle Daten geladen (problem wenn du zb. 20.000 Datensätze ladest)

Beim Query definierst du vorher was du laden willst, und geladen wird dann nach SQL CODE.



lg
Bundy

bundy 24. Mär 2006 11:26

Re: Suchen mit TQuery ?
 
uups da hab ich wieder zu langsam getippt :(

Vader 24. Mär 2006 11:58

Re: Suchen mit TQuery ?
 
hallo sharky,

das bringt ein bißchen licht ins dunkel, datenbankprogrammierung ist irgenwie etwas anders, wie das tagesgeschäft !

das funzt jetzt in einen feld der tabelle suchen, und jetzt kommts, denn das wollte ich bei ttable, aber
dort hat es nicht funktioniert, ich möchte nach einen bestimmten wort, in der ganzen tabelle suchen ?

wie muß ich den code von sharky ändern ?
Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
begin
  Query1.Close;
  Query1.SQL.Text := 'SELECT * FROM tabelle WHERE name = :suche';
  Query1.ParamCheck := True;
  Query1.ParamByName('suche').AsString := Edit1.Text;
  Query1.Open
end;
mfg vader

mkinzler 24. Mär 2006 12:06

Re: Suchen mit TQuery ?
 
Wie gesagt dir Lösung dafür findest du in diesem Thread unter Beitrag 14.

Sharky 24. Mär 2006 12:06

Re: Suchen mit TQuery ?
 
Hai Vader,

wie ist denn deine Tabelle aufgebaut? Sind das alles (Var)Char Felder oder auch Zahlen usw.?

Von Hand würde das so aussehen:
Delphi-Quellcode:
begin
  Query1.Close;
  Query1.SQL.Text := 'SELECT * FROM tabelle WHERE (name = :suche) OR (vorname = :suche1) OR (wassweisich = :suche2)';
  Query1.ParamCheck := True;
  Query1.ParamByName('suche').AsString := Edit1.Text;
  Query1.ParamByName('suche1').AsString := Edit1.Text;
  Query1.ParamByName('suche2').AsString := Edit1.Text;
  Query1.Open
end;
Wobei Du in diesem Fall die Parameter auch in einer Schleife setzen kannst:
Delphi-Quellcode:
procedure TDemoForm.Button1Click(Sender: TObject);
var
  ndx: Integer;
begin
  with Query1 do
  begin
    Close;
    SQL.Text := 'SELECT * FROM tabelle WHERE (name = :suche) OR (vorname = :suche1) OR (wassweisich = :suche2)';
    ParamCheck := True;
    for ndx := 0 to Params.Count - 1 do // Alle Parameter durchlaufen
    begin
      Params[ndx].AsString := Edit1.Text; // und aufgrund des indexes zuweisen
    end;
  end;
end;

bundy 24. Mär 2006 12:08

Re: Suchen mit TQuery ?
 
Da könntest du mit dem SQL Syntax "like" arbeiten.


SQL-Code:
Select * from Table where Vorname like %:parSuchbegriff % or Nachname like % :parSuchbegriff or ....

Das % - Zeichen dient alls Joker wie in der Windowssuche der *

mit dem Syntax "or" der steht für "oder".

Ich hoffe das hilft dir weiter



lg
Bundy

Sharky 24. Mär 2006 12:14

Re: Suchen mit TQuery ?
 
Zitat:

Zitat von mkinzler
Wie gesagt dir Lösung dafür findest du in diesem Thread unter Beitrag 14.

Hai mkinzler,

ich glaube! dein Code hat einen kleinen Fehler?
Du hast immer den selben Parameternamen verwendet. ParamByName wird dir aber immer den erstgefunden TParam zurück geben und darum die beiden nächsten nicht mit dem Wert füllen.

mkinzler 24. Mär 2006 12:36

Re: Suchen mit TQuery ?
 
Zitat:

Zitat von Sharky
ich glaube! dein Code hat einen kleinen Fehler?
Du hast immer den selben Parameternamen verwendet. ParamByName wird dir aber immer den erstgefunden TParam zurück geben und darum die beiden nächsten nicht mit dem Wert füllen.

Danke! War mir nicht bewusst, da? das nicht so geht. Habe gedacht, daß erkannt wird, das es sich hier um den selben Parameter handelt.

[edit]liegt das an Paradox, das es nicht funktioniert? Habs gerade mit FB getestet hier funktioniert die mehrfache Verwendung des gleichen Parameters.[/edit]

Vader 24. Mär 2006 12:44

Re: Suchen mit TQuery ?
 
super, danke!

ich weiß ich bin lästig, aber jetzt wenn ich diese suche starte:
Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
begin
Query1.Close;
  Query1.SQL.Text := 'SELECT * FROM adressen WHERE (Nachname = :suche) OR (Vorname = :suche1) ';
  Query1.ParamCheck := True;
  Query1.ParamByName('suche').AsString := Edit1.Text;
  Query1.ParamByName('suche1').AsString := Edit1.Text;
  Query1.Open

end;
dann zeigt er mir nur den gesuchten datensatz im DBGrid an, das ist ja auch gut so,aber wie zeige ich wieder
alle daten im DBGrid an ???

mfg vader

mkinzler 24. Mär 2006 12:50

Re: Suchen mit TQuery ?
 
Die WHERE-Clause wieder entfernen, also

SQL-Code:
SELECT * FROM adressen;

Vader 24. Mär 2006 13:03

Re: Suchen mit TQuery ?
 
herlichen dank !

ich muß sagen das mit tquery + sql-code gefällt mir besser als ttable !

aber, bei der suche:
Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
begin
Query1.Close;
  Query1.SQL.Text := 'SELECT * FROM adressen WHERE (Nachname = :suche) OR (Vorname = :suche1) ';
  Query1.ParamCheck := True;
  Query1.ParamByName('suche').AsString := Edit1.Text;
  Query1.ParamByName('suche1').AsString := Edit1.Text;
  Query1.Open
end;
muß ich genau den namen schreiben ( groß,klein, ganzen namen ausschreiben ) damit der datensatz gefunden wird !!

bei ttable gibts den code:
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var suche: string;
begin
suche:= edit1.Text;
query1.Locate('Nachname', suche, [loCaseInsensitive,loPartialKey ]);
end;
da brauche ich nur den ersten buchstaben eingeben und schon findet er was, wie geht das bei tquery ?
mfg vader

mkinzler 24. Mär 2006 13:05

Re: Suchen mit TQuery ?
 
Verwende LIKE und %

Vader 24. Mär 2006 13:43

Re: Suchen mit TQuery ?
 
hallo mkinzler,

hab's so probiert aber funzt nicht, wenn ich die suche starte sind alle daten weg ?
Delphi-Quellcode:
procedure TForm1.Button10Click(Sender: TObject);
var suche: string;
begin
  Query1.Close;
  Query1.SQL.Text := 'SELECT * FROM adressen WHERE Nachname like :suche OR Vorname like :suche';
  Query1.ParamCheck := True;
  Query1.ParamByName('suche').asString := 'Edit1.Text';
  Query1.Open ;
end;
mfg vader

marabu 24. Mär 2006 13:49

Re: Suchen mit TQuery ?
 
Vermutlich ist niemand mit dem Namen 'Edit1.Text' in deiner Tabelle gespeichert. Außerdem hast du wieder eine exakte Suche, wenn du die Wildcard nicht verwendest:

Delphi-Quellcode:
procedure TForm1.Button10Click(Sender: TObject);
var
  suche: string;
begin
  with Query do
  begin
    SQL.Text := 'SELECT * FROM adressen WHERE Nachname like :suche OR Vorname like :suche';
    ParamByName('suche').asString := QuotedStr(Edit1.Text + '%');
    Open;
  end;
end;
Grüße vom marabu

Sharky 24. Mär 2006 13:50

Re: Suchen mit TQuery ?
 
Hai Vader,

a) Warum steht Edit1.Text in ' '?
b) Die Variable suche brauchst Du nicht
c) setze in deiner Abfrage mal Klammern

;-)

Vader 24. Mär 2006 14:54

Re: Suchen mit TQuery ?
 
hallo,

so habe ich spobiert aber ohne erfolg:
Delphi-Quellcode:
procedure TForm1.Button10Click(Sender: TObject);
var
  suche: string;
begin
  with Query1 do
  begin
    Query1.Close;
    Query1.SQL.Text := 'SELECT * FROM adressen WHERE Nachname like :suche OR Vorname like :suche';
    Query1.ParamByName('suche').asString := QuotedStr(Edit1.Text + '%');
    Query1.Open;
  end;

  end;
sharky sagt:
Zitat:

a) Warum steht Edit1.Text in ' '?
b) Die Variable suche brauchst Du nicht
c) setze in deiner Abfrage mal Klammern

wie meinst du das mit abfrage in klammern setzten ?
mfg vader

Sharky 24. Mär 2006 14:57

Re: Suchen mit TQuery ?
 
Hai Vader,

beim arbeiten mit Parametern muss man den String nicht mit QuotedStr berarbeiten.

Zitat:

Zitat von Vader
...wie meinst du das mit abfrage in klammern setzten

Delphi-Quellcode:
   
begin
  Query1.SQL.Text := 'SELECT * FROM adressen WHERE (Nachname like :suche) OR (Vorname like :suche)';
  Query1.ParamByName('suche').asString := Edit1.Text + '%';
  Query1.Open;
end;

Vader 24. Mär 2006 15:19

Re: Suchen mit TQuery ?
 
ich verbeuge mich, von so viel wissen, danke schön !
mfg vader


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