Autor Beitrag
Kaischi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Di 13.08.02 15:19 
Hallo alle zusammen.

Die einfachen Suchfunktionen kenne ich bereits. habe auch schon viele ausprobiert.

zur zeit habe ich diese hier:

ausblenden Quelltext
1:
2:
if Table1.Locate ('Hersteller;Modell;Modell (Typ);Baujahr',VarArrayOf([Edit1.text,Edit2.text,Edit3.text,Edit4.text]), [loCaseInsensitive, loPartialKey]) then 
ShowMessage('Datensatz gefunden.');


Allerdings benötige ich etwas sehr ausgefallenes!

Und zwar so etwas:

Neben dieser normalen Suche (siehe oben), benötige ich eine Funktion, welche das zuvor eingegebene zwischenspeichert.Sich also sozusagen merkt und dann wieder aufgerufen zu werden.

Wenn man also in irgendein Edit (1 bis 4) etwas reinschreibt, dann auf den button klickt, so soll dies Wort/Zahl aus der Tabelle rausgefildert werden.
das ist aber noch nicht alles!
Dies rausgefilderte soll sich das programm nun zwischenspeichern, damit man die suche noch mehr einschrenken kann, um nun ein weiteres anderes Edit zu benutzen.

So soll sich die Suche also beliebig für jeden auf wenige suchergebnisse einschrenken lassen.

Kann mir jemand helfen?????????????????????????????????

Vielen DAnk
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Di 13.08.02 15:41 
Hi, ich habe die Suchroutine über den Find-Diaog gemacht.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TKundenformularfenster.FindDialogFind(Sender: TObject);
begin
  with table1 do begin
    if sucheindex = 1 then begin
     IndexName := 'Kundennummer';
      SetKey;
      fieldbyname('Kundennummer').AsString := finddialog.FindText;
      gotonearest;
    end;
  FindDialog.CloseDialog;
end;


Habe dann für jeden Suchbegriff dann einen Index manuell festgelegt. Das heißt in welchem Feld ich suchen wollte hatte ich einen eigene Suchen-Button. Vielleicht nicht ganz elegant gelöst, aber es hat funktioniert und es ging schnell.
Spike
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 69
Erhaltene Danke: 1



BeitragVerfasst: Di 13.08.02 17:13 
Hallo,

probier doch mal Locate mit der Eigenschaft Filter zu kombinieren.
Wenn du erst nach dem Hersteller suchst, bei Erfolg die Tabelle filterst und dann nach dem Modell suchst usw. solltest du zum gewünschten Ergebis kommen.

also in groben Zügen etwa so:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
With Table 1 do begin
  if Locate('Hersteller',Edit1.Text,[loCaseInsensitive, loPartialKey]) then begin
   Filter := 'Hersteller = '+FieldByname('Hersteller'.asString);
   Filtered := true
     if Locate('Modell',Edit2.Text,[loCaseInsensitive, loPartialKey]) then 
       Filter := Filter + ' AND Modell = '+ FieldByname('Modell'.asString);
...


Zuletzt bearbeitet von Spike am Mi 21.08.02 17:08, insgesamt 1-mal bearbeitet
Kaischi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mo 19.08.02 10:14 
Hallo!!!!!!
Kann mir keiner helfen?
Hat keiner eine bessere Idee?
Oder hat schon jemand ein beispiel programm das meiner idee entspricht?
Würde mich für jede kleine hilfe bedanken.


gruß kai
Kaischi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 23.08.02 10:00 
hi hier bin ich nochmal.
ich hake an dieser stelle schon eine ganze weile fest.

Ich benötige bis zum 28.8. ein optimales programm mit dem man in einer tabelle suchen und filtern kann. also eine optimale suchfunktion!!!!!!!!!!!!
Mit allem was dazu gehört. wie z.B.: groß und kleinschreibung usw.

Dies ist ein programm für die schule. Und da ich delphi nicht so gut kann, bitte ich EUch mir zu helfen!!!!!!!!!

Ich zähle auf euch!!!!!!!!!!!!!!!!!!!!!!!!

Vielen Dank!!!!

Mit voller hoffung kaischi

PS.: Es reicht schon aus, wenn ihr mir hier einfach nur den code auflistet. das andere bekomme ich dann schon alleine hin.

Danke!!!!!!!!!1
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mo 26.08.02 21:31 
Hallo,

Kaischi hat folgendes geschrieben:
Ich benötige bis zum 28.8. ein optimales programm mit dem man in einer tabelle suchen und filtern kann.

Etwas Optimales gibt es nicht. Die mächtigste suchfunktionalitäten kannst du sicherlich per SQL implementieren. In der Schule habt ihr sicherlich ein paar Ramenbedingungen bekommen die euch Zeigen welche funktionalität ihr verwenden sollt.

Kaischi hat folgendes geschrieben:
also eine optimale suchfunktion!!!!!!!!!!!!
Mit allem was dazu gehört.
wie z.B.: groß und kleinschreibung usw.

Also wie gesagt, ich würde die Structured Query Language verwenden. Suchen bzw. Filtern tut man in dieser über das SELECT Statement. Da ich hir jetzt nicht die Zeit habe dir SQL zu erklären müssen ein paar Beispiele herhalten:
ausblenden volle Höhe 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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
// Ein Tabelle vollständig anzeigen:
SELECT *
FROM Tabelle

// Alle Datensätze anzeigen bei denen der Nachmane Meier ist:
SELECT *
FROM Tabelle
WHERE Nachname='Meier'

// Alle Dantensätze anzeigen bei denen der Nachname nicht Meier ist
SELECT *
FROM Tabelle
WHERE NOT (Nachname='Meier)

// Alle Meiers und Müllers ausgeben
SELECT *
FROM Tabelle
WHERE (Nachname='Meier') OR (Nachname='Müller')

// Alle Datensätze Anzeigen Bei denen der Vormame Heinz und der Nachname Meier ist:
SELECT *
FROM Tabelle
WHERE (Vorname='Heinz')AND (Nachname='Meier')

// Alle Datensätze raussuchen bei denen der Nachmane mit M beginnt:
SELECT *
FROM Tabelle
WHERE Nachname LIKE 'M%'

// Alle Meiers raussuchen dabei groß und kleinschreibung ignorieren:
SELECT *
FROM Tabelle 
WHERE UPPER(Nachname)='MEIER'

// Alle Datensätze anzeigen und nach Nachnamen und Vornamen Sortieren:
SELECT *
FROM Tabelle
ORDER BY Nachname, Vorname


Aber wahrscheinlich willst du deinen user keine (mehr oder weniger) komplizieren SQL Statements eingeben lassen. Dennoch kannst du hinter den kuliisen damit arbeiten.
Wenn du dir die ganzen Beispiele anschaust, erkennst du, dass die Filterregel in der WHERE Zeile steht. Desweiteren siehst du das mehere bedingungen in die Where Klausel mit AND, OR und NOT miteinander verküpft werden können.
Du kannst einzelne bedingungen recht einfach über Comboboxen und editfelder eingeben lassen. Z.b. so: Du hast eine Combobox über welche die zu Filternden Spalten ausgewählt werden können (z.B: Nachname und Vorname). Dann hast du noch ein Edit Feld in welches man den Wert eingeben kann. Der Benuzter wählt also in der Combobox "Nachname" aus und gibt in das Edit Feld "Meier" ein. Sobald der Benutzer jetzt auf den Knopf filtern drückt musst du eine Klausel draus machen in unserem einfachen Beispiel sieht das so aus.
ausblenden Quelltext
1:
ActKlausel := '(' + ComboBox1.Text + '=''' + Edit1.Text + ''')';					

Damit hast du die Aktuelle Klausel, jetzt must du diese mit bereits vorhandenen Klauseln verbinden, da du diese ja schon in einem String hast (als bestandteil deines Querys) brauchst du sie eigentlich nur dahinter hängen.
Der übersichtlichkeit halbe gehe ich davon aus, dass du einen Objektglobalen String mit der Bezeichnung WhereStr definiert hast. Dieser ergibt die dritte Zeile in deinem Query. Was jetzt folgt ist die OnClick Methode für den oben beschriebenen Filtern-Knopf:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.butFilternClick(Sender: TObject);
  VAR
    ActKlausel : STRING;
begin
  Query1.close;
  Query1.sql.Clear;
  Query1.sql.Add('SELECT *');
  Query1.sql.Add('FROM MeineTabelle');
  IF (Combobox1.Text<>'') AND (Edit1.Text<>'') THEN BEGIN
    ActKlausel := '(' + ComboBox1.Text + '=''' + Edit1.Text + ''')';
    IF WhereStr='' THEN // Wenn noch kein Filter gesetzt ist
      WhereStr := 'WHERE '
    ELSE // Aktuelle klausel mur mit bestehender verbunden werden
      WhereStr := WhereStr + ' AND ';
    WhereStr := WhereStr + ActKlausel
  END; // Filterregel eingegeben
  Query1.sql.Add(WhereStr);
  Query1.open;
end;


Und damit du auch weißt was mit Query1 gemeint ist solltest du mal in dieses Tutorial gucken.

So, ich denke das sollte für's erste reichen.

Viel Spass damit
Klabautermann
NTM
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120

Win XP
2005 Prof
BeitragVerfasst: Mo 28.08.06 09:33 
Titel: Objektglobaler String
Hallo zusammne ,
kann mir einer sag was man meint mit einem Objektglobalen Stirng und wie man diesen Anlegt.

Danke