![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: BDE
SQL Abfragen
Hallo,
ich habe eine kleine Tabelle, in der ich folgende Inhalte abspeichere. KundenID A 10 Name A 20 Vorname A 20 Strasse A 50 PLZ A 5 Jetzt möchte ich alle Kunden mit A anzeigen lassen. das soll man irgendwie TQuery machen können. Kann mir jemand helfen? MFG Christian18 |
Re: SQL Abfragen
Ich verstehe nicht ganz, was "A 10" bedeuten soll. Wie ist die Tabelle denn aufgebaut?
|
Re: SQL Abfragen
Hallo,
mit einer TQuery und als SQL
SQL-Code:
select * from Tabelle where Name like 'A%';
|
Re: SQL Abfragen
SQL-Code:
Select * from Tabelle where name like 'A%';
|
Re: SQL Abfragen
Es empfiehlt sich hier, einen Index auf das Feld "Name" zu setzen.
|
Re: SQL Abfragen
Hallo,
was macht der Index für einen Sinn??? Verstehe ich jetzt nicht ganz. |
Re: SQL Abfragen
Durch einen Index kann man die Suche beschleunigen. Nur bei like-Abfragen hilft das leider oft nicht.
|
Re: SQL Abfragen
Solange die Wildcard hinten steht, schon.
|
Re: SQL Abfragen
Ich denke, das sinnvollste wäre, eine extra Spalte für die Zuordnungsbuchstaben zu machen und diese als Index zu nutzen, dann sparst du dir das langsame "like". So hat Christian dies vermutlich auch.
Sein Problem ist vermutlich, dass er nicht weiß, wie man prinzipiell SQL-Abfragen mit TQuery ausführt. PS: Ist eine Spalte mit einem Index versehen ist der Lesezugriff deutlich schneller als ohne, allerdings dauert der Schreibzugriff ein wenig länger. man muss also schauen, was häufiger getan wird (lesen/schreiben). Das, was im WHERE-/AND-/ORDER-Abschnitt ist, sollte meines Wissens mit einem Index versehen werden. |
Re: SQL Abfragen
Zitat:
Edit: schon wieder kein roter Kasten... :evil: |
Re: SQL Abfragen
Aber nur bei manchen DBMS. Bei Paradox aber eher nicht
|
Re: SQL Abfragen
Hallo,
so funktioniert es aber leider nicht.
Delphi-Quellcode:
DM ist ein Datenmodul
DM.QKunden.SQL.Add('select * from TKunden where Name like 'A%';');
QKunden ist eine TQuery Komponente was habe ich falsch gemacht? LG Chris |
Re: SQL Abfragen
Delphi-Quellcode:
DM.QKunden.SQL.Text := 'select * from tabelle where name like '+QuotedStr('%A')+';';
|
Re: SQL Abfragen
Wenn ich es richtig sehe, hast du doch eine extra Spalte für die Buchstaben. Also A steht alleine in einer Spalte, oder nicht? Denn das wäre zu empfehlen, dann brauchst du kein "like", das immer etwas langsamer sein wird, was ich bereits geschrieben habe.
@Markus: Im Falle, dass Strings wie "A xxx" in einer Spalte stehen, müsste der Platzhalter "%" nach dem A stehen. |
Re: SQL Abfragen
Zitat:
Zitat:
Zeig doch mal etwas mehr Code als nur eine Zeile! Im allgemeinen tun sich die Leute hier mit hellsehen etwas schwer (ich zumindest) |
Re: SQL Abfragen
Ruft Du auch
Delphi-Quellcode:
auf?
DM.QKunden.open
|
Re: SQL Abfragen
Nochmal kurz zurück zum Index:
Man stelle sich vor, man hat ein tolles Buch über Delphi, das schön thematisch gegliedert ist. Nun möchte man zu einem Befehl etwas nachschlagen (z.B. zu "StringReplace"). Die meisten Bücher weisen auf den letzten Seiten einen (alphabetisch geordneten) Index auf. Hier schaut man unter "S" nach "StringReplace" und kann die Seitenzahl(en) nachschauen, in denen dieser Befehl verwendet/erklärt wird. Ohne diesen Index muss man zwangsläufig das gesamte Buch durchblättern, um die entsprechenden Seiten zu finden. Weiß man allerdings nur noch, wie die Bezeichnung des gesuchten Befehls endet, nützt einem der Index leider logischerweise auch nichts mehr. |
Re: SQL Abfragen
Hi,
Delphi-Quellcode:
so sieht mein code nun aus. Leider werden trotzdem noch alle datensätze angezeigt.
DM.QPatienten.SQL.Add('select * from Data\Patienten where Name like ' + QuotedStr('B%') + ';');
DM.QPatienten.ExecSQL; |
Re: SQL Abfragen
Dann scheinst du eine andere Datenmenge anzuzeigen, weil diese zeigt gar bichts an. Wg. .ExecSQL att .Open
|
Re: SQL Abfragen
Delphi-Quellcode:
DM.QPatienten.Close;
DM.QPatienten.SQL.Clear; DM.QPatienten.SQL.Add('select * from Data\Patienten where Name like ' + QuotedStr('B%') + ';'); DM.QPatienten.Open; |
Re: SQL Abfragen
Hi,
muss ich an der Komponente TQuery noch was einstellen??? Weil es immernoch nicht funktioniert. Ich habe auch die richtige DataSource angeklemt. Ich habe nochmal nachgeschaut. Fehler: In meinem DBGrid werden trotzdem alle Datensätze angezeigt. |
Re: SQL Abfragen
Hallo,
hat jemand zufällig eine kleine Beispiel anwendung parat? |
Re: SQL Abfragen
Und bist du wirklich sicher, daß das Grid mit der DataSource des Queries verknüpft ist?
|
Re: SQL Abfragen
ja ganz sicher
|
Re: SQL Abfragen
Also,
ich habe eine Tabelle TPatienten, eine DataSource DSPatienten und eine Querry QPatienten. DataSource habe ich bei DataSet mit der Tabelle verknüpft. Die DataSource habe ich dann an mein DBGrid angeklempt. Und die Querry habe ich auch an meiner DataSource drann. Ist doch richtig oder? |
Re: SQL Abfragen
Wechsel mal die DataSource von Tabelle auf den Query.
|
Re: SQL Abfragen
Zitat:
DSPatienten: Zirkuläre Datenverbindung sind nicht erlaubt. |
Re: SQL Abfragen
Also nicht in der Table/Query sondern in der DataSource
|
Re: SQL Abfragen
ja habe ich doch gemacht
|
Re: SQL Abfragen
Delphi-Quellcode:
Query.DataSource := DataSource;
DataSource.DataSet := QPatienten; |
Re: SQL Abfragen
Ja,
genau dann komme die Meldung:
Delphi-Quellcode:
QPatienten.DataSource := DSPatienten;
DSPatienten.DataSet := QPatienten; |
Re: SQL Abfragen
QPatienten.DataSource := DSPatienten;
|
Re: SQL Abfragen
nur mal so ne frage muss ich die QPatienten (TQuerry) auch noch Active auf true setzen?
|
Re: SQL Abfragen
Sollte durch .Open passieren
|
Re: SQL Abfragen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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-2025 by Thomas Breitkreuz