Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Filter oder SQL? (https://www.delphipraxis.net/103687-filter-oder-sql.html)

Privateer3000 20. Nov 2007 08:05

Datenbank: dbf • Zugriff über: bde

Filter oder SQL?
 
Hi folks,

ich möchte mit Hilfe von Daten aus einer Tabelle
mehrere Panels mit Buttons kreiern.
Nun müssten die Daten aber vorher gefiltert werden.
D.h. aus der Spalte "Gruppe" werden die Panels bestückt.
Was ist nun effizienter, vorher jeweils einen Filter auf die
Tabelle setzen und dann für die entprechende Gruppe Buttons
erstellen, dann die nächste Gruppe usw?
Oder per SQL das ganze aus einem query?

Grüße

angos 20. Nov 2007 08:32

Re: Filter oder SQL?
 
so ganz verstehe ich die frage nicht,

sollen jeweils alle "Gruppen" (btw genauer erläutern ;) ) nacheinander erstellt werden, oder eine Gruppe bei Bedarf?

QuickAndDirty 20. Nov 2007 08:51

Re: Filter oder SQL?
 
Wenn du einen Index darauf hast und es sich nicht um einen SQL Server handelt wo deinen Daten herkommen ist das Beste ein Range zu setzen. Wenn kein Index Drauf ist must du filtern.
Wenn es sich dabei um eine SQL Datenbank handelt solltest du immer über SQLs Filtern evtl. mit Parmeter-SQLs um es zu beschleunigen.

Privateer3000 20. Nov 2007 09:26

Re: Filter oder SQL?
 
Danke Leute,

zur Erläuterung: In der dbf-tabelle stehen
mehrere einträge die zu bestimmten Gruppen
gehören. zB Gruppe1=12 Datensätze usw.
Nun sind 5 Panels mit Buttons zu besetzen.
Panel1 mit Buttons die in Spalte "Gruppe" Panel1
zu stehen haben. usw

Jelly 20. Nov 2007 09:33

Re: Filter oder SQL?
 
Da es sich um DBF handelt, läuft das Ganze eh lokal. Es sollte somit keine Rolle spielen.
Zitat:

Zitat von QuickAndDirty
Wenn es sich dabei um eine SQL Datenbank handelt solltest du immer über SQLs Filtern evtl. mit Parmeter-SQLs um es zu beschleunigen.

Das kann man so pauschal auch nicht sagen...
Wenn du 100 mal filtern willst, jagdst du 100 mal eine Anfrage zum DB Server. Je nach Abfrage, kann das unter Umständen einiges an Zeit nehmen. Es kann sich anbieten, alle 100 Abfragen in einer zu vereinen, also anstatt
SQL-Code:
select bla from Tabelle where kriterium = 1
dann lieber
SQL-Code:
select bla from Tabelle where kriterium in (1,2,3,4,5)
Letztere Abfrage sollte wesentlich schneller sein als 5 mal hintereinander die erste.

Filtern kannst du dann schön lokal auf die Spalte Kriterium.

Privateer3000 20. Nov 2007 09:51

Re: Filter oder SQL?
 
Danke Jelly,
dann müsste das so aussehen,dass ich
so vorgehen muss:
filter setzen, schleife für buttons,filter deaktivieren
usw.

Privateer3000 20. Nov 2007 14:36

Re: Filter oder SQL?
 
Liebe Gemeinde,
wie funktioniert das mit dem Filter?
Wird der Filter nun auf Spaltennamen gesetzt
oder auf Begriffe die in der Tabelle stehen?

Wenn sql, dann wird wie vorgegangen?
Werden die Ergebnisse erst in query
(Stringlist) gepackt?

Bitte helft mir mal dabei!

hoika 20. Nov 2007 14:45

Re: Filter oder SQL?
 
Hallo,

Filter wird auf Eintrag gesetzt,
es war hier gerade nen TThread dazu, Bsp.

Filter:= 'name=''Test'''

Zu SQL.
Ich würde unter dbf nicht sql nehmen,
es wird intern immer in umgebaut in TTable-Befehle.

Von Pdx weiss ich (bei grossen Datenmengen)
TTable schnell
TQuery langsam

Wenn du nur kleine Datenmengen hast,
könntest du sogar alle Daten "laden"

Delphi-Quellcode:
Table.First;
while not Table.EOF do
begin
 // hier Gruppe auslesen
 // prüfen ob schon da und wenn nicht in ein TStringList
  Table.Text;
end;
Du ersparst dir einen Hauf SetRange


Im Zweifelsfall mit ne grosse DB nehmen und
ausprobieren.

Solltest du vorhaben, dass ganze mal auf nen richtigen SQL-Server zu packen,
dann heisst es nat.
- zuerst sql probieren (group b<)
- wenn zu langsam -> TTable


Heiko

Privateer3000 20. Nov 2007 15:23

Re: Filter oder SQL?
 
Danke hoika,

was bedeutet:
Zitat:

// prüfen ob schon da und wenn nicht in ein TStringList
ich meine das dies doch sowieso in eine Stringlist muss
oder nicht?
konkret:
Delphi-Quellcode:
for i := 0 to matenz -1  do
begin
labeltag:=t1.Fields[2].Value;
  Spalte := i mod 6;
  Zeile := i div 6;
  aLabel:=TXiButton.Create(Self);
  aLabel.Parent:=hot;
  aLabel.Visible:=True;
  aLabel.Left:=Spalte*82;
  aLabel.Top:=Zeile*35;
  alabel.Width:=80;
  alabel.Height:=33;
  aLabel.ColorScheme:=csSky;
  aLabel.Caption:=labeltag;
  aLabel.Tag:=t1.fields[0].value;
  aLabel.OnClick:=p1_1Click;
  t1.Next;
end;
sieht es so aus. matenz ist ein count aus einem
inifile. So läuft es bis jetzt.
t1.fields sind daten aus der gleichen Tabelle wo
auch die gruppen. field[0] steht ein Integer,
field[2] ein string für den Buttoncaption.
Soviel zur Erklärung für obigen quellt.
Es werden also alle in dem inifile stehenden ausgelesen
und Button erstellt. Jetzt soll das umgebaut werden
auf mehrere Buttonfelder(Panels) und entsprechend
zugeordnet werden.

Grüße

Jelly 20. Nov 2007 15:37

Re: Filter oder SQL?
 
:shock:
Arbeitest du jetzt mit INI Files oder einer Datenbank?

Privateer3000 20. Nov 2007 15:58

Re: Filter oder SQL?
 
Hi Jelly,
na bisher ini jetzt WILL ich ja auf db umbasteln.

Jelly 20. Nov 2007 22:50

Re: Filter oder SQL?
 
Zwei Sachen:

1. Ersetze deine For-Schleife durch ein
Delphi-Quellcode:
while not table.eof do begin
   // .. Mach was
   table.Next ;
end ;
2. Nutze nach Möglichkeit anstatt Field[0] stattdessen die Spaltennamen, denn dann weisst du auch noch in 2 Wochen was gemeint ist. Dafür gibt es die Funktion FieldByName bei allen TDataset Abkömmlingen, also auch bei deiner TTable.

Bernhard Geyer 21. Nov 2007 06:27

Re: Filter oder SQL?
 
Zitat:

Zitat von Privateer3000
Hi Jelly,
na bisher ini jetzt WILL ich ja auf db umbasteln.

Das nocht keinen gesagt hat: Bitte nicht die BDE verwenden. Du setzt da auf ein Todes Pferd das dir bei der Verteilung des Programmes und der Stabilität Baumstämme zwischen die Beine schmeißt.

alzaimar 21. Nov 2007 06:41

Re: Filter oder SQL?
 
[quote="Bernhard Geyer"]
Zitat:

Zitat von Privateer3000
... das dir bei der Verteilung des Programmes und der Stabilität Baumstämme zwischen die Beine schmeißt.

Wälder, ganze Wälder!

Für kleine DBF-Tabellen reicht z.B. TDBF oder auch ADO und ein ODBC-Treiber, der auf jedem neueren PC installiert ist.

Ich hab auch mit ADO und Text-Dateien gute Erfahrungen gemacht.

mkinzler 21. Nov 2007 06:46

Re: Filter oder SQL?
 
Oder man setzt gleich auf eine besseres DBMS

Privateer3000 21. Nov 2007 07:15

Re: Filter oder SQL?
 
Danke Leute,
kann man für ADO zB auch Tools wie
die Datenbankoberfläche von Delphi nutzen
um Tabellen zu erstellen?
Funktioniert das Prinzip im ADO gleich wie unter BDE?
Konnektiert ADO auch zu dbf, oder muss man eine andere
Tabellenart benutzen?

Grüße

Bernhard Geyer 21. Nov 2007 07:26

Re: Filter oder SQL?
 
Zitat:

Zitat von Privateer3000
kann man für ADO zB auch Tools wie
die Datenbankoberfläche von Delphi nutzen um Tabellen zu erstellen?

Nein. Aber je nach verwendeter Datenbank (Access, MS SQL-Server kann man die dort angebotenen möglichkeiten verwende, oder wenn man sich mit SQL besser auskennt erzeugt man die Tabellen im Quellcode

Zitat:

Zitat von Privateer3000
Funktioniert das Prinzip im ADO gleich wie unter BDE?

Welches Prinzip? Vieles ist ähnlich, aber manches sollte man bei richtigen SQL-Servern anders machen als bei Desktop-DB's wie DBase, Paradox, Access.

Zitat:

Zitat von Privateer3000
Konnektiert ADO auch zu dbf, oder muss man eine andere Tabellenart benutzen?

Über die Access-Jet-Engine: Ja. Aber vergiss dbf wenn du nicht irgendwelche Altlasten pflegen musst.

mkinzler 21. Nov 2007 07:36

Re: Filter oder SQL?
 
Und Access am Besten auch gleich.

hoika 21. Nov 2007 07:41

Re: Filter oder SQL?
 
Hallo,

bis jetzt (fast) alles richtig.

Access zu benutzen ist OK,
wenn nicht Access als DB benutzt wird.

Klingt komisch, aber is so ...

Es gibt "Access Project", dabei wird Access
als Oberfläche benutzt, die DB ist der MS-SQL.

Vorteil:
Die Assistenten funktionieren alle,
Der Ausdruck kann schön konfiguriert werden.

Nachteil:
VBA, Access Basic.


Für kleine Dinge, di nur zusammengeklickt werden sollen,
kann man das benutzen.


Heiko

Bernhard Geyer 21. Nov 2007 07:44

Re: Filter oder SQL?
 
Zitat:

Zitat von hoika
Access zu benutzen ist OK,
wenn nicht Access als DB benutzt wird.

Klingt komisch, aber is so ...

Es gibt "Access Project", dabei wird Access
als Oberfläche benutzt, die DB ist der MS-SQL.

So eine Lösung haben wir als CRM-System und findes es krottig schlecht (Langsam, Fehlerhaft, ...).
Kann aber auch an den SW-Entwicklern dieses Systems liegen. Ein Wechsel zu einem anderem System ist aber auch Aufwändig
und es müsste erst das richtige gefunden werden.

Aber das wichtigst wird sein: Ich denke in 5-10 Jahren wird Access das gleiche Schicksal wie Foxpro treffen: Es wird eingestellt werden. Wieso sollte sich MS 2 DB's leisten? Und da der Weg von Access ist die .NET-Welt auch viele Anpassungen nötig machen würde wird man es irgendwann sterben lassen.

mkinzler 21. Nov 2007 07:44

Re: Filter oder SQL?
 
Noch ein Nachteil: langsam. Im Mehrbenutzerbetrieb recht fehleranfällig. Und da er in Delphi arbeitet auch überflüssig.

mse1 21. Nov 2007 07:54

Re: Filter oder SQL?
 
Zitat:

Zitat von mkinzler
Oder man setzt gleich auf eine besseres DBMS

Empfehlung: Sqlite3 mit MSEide+MSEgui. ;-)
http://www.sqlite.org/about.html
http://sourceforge.net/projects/mseide-msegui

Martin

Bernhard Geyer 21. Nov 2007 07:59

Re: Filter oder SQL?
 
Zitat:

Zitat von mse1
Zitat:

Zitat von mkinzler
Oder man setzt gleich auf eine besseres DBMS

Empfehlung: Sqlite3 mit MSEide+MSEgui. ;-)
http://www.sqlite.org/about.html
http://sourceforge.net/projects/mseide-msegui

Gleich eine andere IDE zu empfehlen ist wohl etwas zu viel. :roll: Da könnte ich gleich sagen er soll es mit Java oder .NTE machen :stupid:

mse1 21. Nov 2007 08:15

Re: Filter oder SQL?
 
Zitat:

Gleich eine andere IDE zu empfehlen ist wohl etwas zu viel. Da könnte ich gleich sagen er soll es mit Java oder .NTE machen
MSEide+MSEgui benutzt Free Pascal als Compiler welcher weitgehend Delphi kompatibel ist. MSEide+MSEgui kann (mit Ausnahme der Datenbank Komponenten) auch mit Delphi7 oder Kylix3 kompiliert werden.
Für lokale Datenbank Anwendungen ist Sqlite3 eine super Sache und der Umstieg auf MSEide+MSEgui lohnt sich alleweil. :-)

Privateer3000 21. Nov 2007 08:16

Re: Filter oder SQL?
 
danke Leute, alles sehr interessant.
Wie funktioniert das mit ADO? gibts da n Tut?
Ich hab mir die OH von ADO angesehen und
kein ansatz gefunden wie man vorgeht.
Kann ich die Datasource die sich schon
im Prjekt befinden verwenden oder muss alles neu gemacht werden?

Ich will jetzt wenigstens diese kleine Projekt zu Ende bringen
dann werd ich mich eingehend mit den neuen Möglichkeiten beschäftigen.

Eine Frage noch, die Alias-Geschichte wird die nur unter BDE genutzt?

Bernhard Geyer 21. Nov 2007 08:17

Re: Filter oder SQL?
 
DB-Tutorials

Jelly 21. Nov 2007 09:15

Re: Filter oder SQL?
 
Unter ADO brauchst du keine Alias mehr. Über eine TADOConnection (ist das so, oder ist es eine TADODatabase... hab grad kein Delphi zur Hand) legst du alle Parameter zur Datenbankanbindung in der Eigenschaft ConnectionString fest. Dieser unterscheidet sich zwar je nachdem welche DB benutzt wird, ist aber dafür nur an einer Stelle zu definieren. Im ConnectionString sind zumeist auch Username und Passwort mit übergeben. Willst du die nicht direkt hardcodieren, musst du nur zur Laufzeit die deinen entsprechenden ConnectionString zusammenbauen.

Anschliessend ein Connect(), und du hast deine Datenbankverbindung. Jetzt kannst du, ganz analog zur BDE, die Komponenten TADOQuery und co. nutzen, um deine Befehle an die DB zu schicken. Eine Datasource kannst du an alles binden, was irgendwie TDataset kompatibel ist, also natürlich auch an eine TADOQuery.

Privateer3000 21. Nov 2007 09:22

Re: Filter oder SQL?
 
Das werd ich mal an einem Beispiel ausprobieren.
aber zu meinem eigentlichen Problem:
Delphi-Quellcode:
//t1.Filter:='GRUPPE='+QuotedStr('Hotstuff');
//t1.Filtered:=True;
t1.First;
while not t1.eof do begin
  Spalte := i mod 6;
  Zeile := i div 6;
  aLabel:=TXiButton.Create(Self);
  aLabel.Parent:=hot;
  aLabel.Visible:=True;
  aLabel.Left:=Spalte*82;
  aLabel.Top:=Zeile*35;
  alabel.Width:=80;
  alabel.Height:=33;
  aLabel.ColorScheme:=csNeoSky;
  aLabel.Caption:=t1.fieldbyname('kurz').AsString;
  aLabel.Tag:=t1.FieldByName('artnr').AsInteger;
  aLabel.OnClick:=p1_1Click;
  t1.Next;
end;
//t1.Filtered:=False;
Ich hab testhalber den Filter deaktiviert,
ich bekomme nur den letzten Datensatz,
dabei wird doch erst auf First gesetzt
und jeweils Next in der Schleife, WARUM??

DeddyH 21. Nov 2007 09:25

Re: Filter oder SQL?
 
Die Labels werden bestimmt alle erzeugt, liegen aber übereinander.
Zitat:

Zitat von Privateer3000
Delphi-Quellcode:
Spalte := i mod 6;
Zeile := i div 6;

i wird aber innerhalb der Schleife nirgends geändert ;)

Privateer3000 21. Nov 2007 09:31

Re: Filter oder SQL?
 
Verdammt, stimmt!
Bisher hab ich ja mit for i:=0 ...
die schleife gemacht.
Und nun :gruebel:

DeddyH 21. Nov 2007 09:33

Re: Filter oder SQL?
 
Ganz einfach: vor die Schleife ein
Delphi-Quellcode:
i := 0;
und als letzte Anweisung innerhalb der Schleife dann
Delphi-Quellcode:
inc(i);

Progman 21. Nov 2007 09:34

Re: Filter oder SQL?
 
setzt am Anfabg i auf null und in der Schleife inc(i)

lol, DeddyH war schneller ;)

Privateer3000 21. Nov 2007 09:55

Re: Filter oder SQL?
 
Habs, danke!

Privateer3000 21. Nov 2007 10:33

Re: Filter oder SQL?
 
Ich weiss das gehört hier jetzt nicht her,
aber für Euch doch n Klcks :-)
der button kann ein ColorScheme bekommen.
Wenn jetzt aus einem Tablefield ein String
kommt, wie muss der String konvertiert werden
um als ColorScheme akzeptiert zu werden?

mkinzler 21. Nov 2007 11:01

Re: Filter oder SQL?
 
http://www.delphipraxis.net/internal...t.php?t=123244


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz