AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Probleme mit Table.Filter
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Table.Filter

Ein Thema von Legolas · begonnen am 2. Okt 2003 · letzter Beitrag vom 5. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Legolas
Legolas

Registriert seit: 28. Sep 2003
Ort: Frankfurt am Main
72 Beiträge
 
Delphi 2005 Personal
 
#1

Probleme mit Table.Filter

  Alt 2. Okt 2003, 21:21
Hallo alle zusammen,

habe mal wieder ein Problem bei der Datenbankprograierung.

Ich möchte mittels eines "Table.Filter" eine Suchfunktion realisieren. Das funktioniert eigentlich sehr gut, aber wehe er findet aufgrund des Suchstrings nur einen Datensatz. Diesen zeigt er mir nämlich nicht an. Die Datensaätze werden nur angezeigt wenn mehrere passende Datensätze gefunden wurden. Ich habe keine DBEdit Komponenten benutzt sondern normale Editfelder um flexibler zu sein. Die Zuweisungen um den jeweiligen aktuellen Datensatz anzuzeigen werden im Programmcode realisiert.

Hier mal ein kleiner Auszug aus meinem Quelltext (Ich hoffe das hilft):

Delphi-Quellcode:
FilmDB.Filtered:=False;
if Filmtitel1.Checked=True then
begin
  FilmDB.Filter:='Titel = ' + QuotedStr(ComboBox5.Text+'*');
  Label1.Caption:='Titel = ' + QuotedStr(ComboBox5.Text+'*'); <- Nur eine Testzeile um den Filterstring
end; zu überprüfen !!
FilmDB.Filtered:=True;
Datenladen(FilmDB); <- Funktion zum anzeigen des aktuellen Datensatzes in den Editfeldern !!
Hat jemand eine Idee warum ein einzelner Datensatz nicht angezeigt wird aber mehrere schon ??
Grüße Legolas

Wissen ist Macht.
Wir wissen nichts, macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Probleme mit Table.Filter

  Alt 2. Okt 2003, 22:10
Hallo Legolas,

grundsätzlich kann man natürlich auch einzelne Datensätze filtern.

Etwas stutzig macht mich der '*' in deinem Suchfilter. Falls der '*' als Wildcard benutzt werden soll, funktioniert das nicht, falls aber tatsächlich der '*' als Character am Ende des Strings stehen soll, ist alles soweit klar.

Ich vermute dann eher den Fehler in deiner Datenladen Prozedur!

Übrigens: zur Realisierung einer Suchfunktion sind die Methoden FindKey für Schlüsselfelder oder Locate für beliebige Felder sehr gut geeignet. Das spart dir auch das "Datenladen".
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Killian

Registriert seit: 3. Okt 2003
Ort: BexxTown
6 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Probleme mit Table.Filter

  Alt 3. Okt 2003, 10:53
Hiho!
Haste schonaml an SQL gedacht? Ich finde damit geht es extrem leichter und meiner meinung nach auch schneller.
Aber wenn du es nicht nehemn möchtest, dann würde ich auch gerne mal deine Datenladen procedure sehen. Da liegt bestimmt der Hund begraben
Also wenn ich deine IF abfrage richtig verstehe, dann ändert er den Text im Filter nur wenn eine Checkbox aktiviert ist.
Dann würde ich das so schreiben :
Delphi-Quellcode:
FilmDB.Filtered:=False; // Filter ausschalten
FilmDB.Filter := ''; // Filter leeren ansonsten wird der alte Filter benutzt
if Filmtitel1.Checked then
begin
* FilmDB.Filter:='Titel = ' + QuotedStr(ComboBox5.Text+'*'); // Also das '*' peil ich net aber gut
  { Nur eine Testzeile um den Filterstring zu überprüfen }
* Label1.Caption := FilmDB.Filter;
  FilmDB.Filtered := True; // Filter aktivieren
end;
{ Finde ich hier unsinning, da er dann ja jedesmal die Datenbank filtert, ausser du möchtest }
// FilmDB.Filtered := True;
Datenladen(FilmDB); // Funktion zum anzeigen des aktuellen Datensatzes in den Editfeldern !!
So, ich weiss ja net wie der rest deiner procedure aussieht. Dann fehlt halt noch deine Datenladen prozedur.

Gruss Killian
Error! Reality.sys is corrupt. Smash head on keyboard to restart universe.
Schreibfehler sind gewollt und sollen zur Erheiterung beitragen.
  Mit Zitat antworten Zitat
Benutzerbild von Legolas
Legolas

Registriert seit: 28. Sep 2003
Ort: Frankfurt am Main
72 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Probleme mit Table.Filter

  Alt 4. Okt 2003, 01:56
Hallo Killian und MrSpock,

leider hilft mir das nicht weiter.

@MrSpock:

der Stern ('*') wird als Wildcard benutzt und was soll ich sagen, es funktioniert so, denn wie ich vorher schon schrieb werden mir alle relevanten Datensätze angezeigt. Beispiel: Ich habe in der Datenbank drei 'James Bond' Filme, gebe ich jetzt im Filterfeld 'James' ein werden alle entsprechenden Filme angezeigt. Betrifft der Filtertext jetzt aber nur einen Film in der Datenbank sind alle Felder leer.

@Killian:

Nein, SQL möchte ich nicht einsetzen weil die Filter, für mein Vorhaben, völlig ausreichend sind. An meiner Procedure 'Datenladen' liegt es bestimmt nicht, denn sie tut das was sie soll, mir wird eben nur nicht (wenn er aufgrund des Filters nur einen entsprechenden Datensatz findet) dieser angezeigt (Die Editfelder bleiben dann leer). Im übrigen ist die Procedure 'Datenladen' nur dazu da den aktuellen Datensatz in den Editfeldern anzuzeigen, da ich keine gebundenen Editfelder benutze( Und sie funktionier in allen anderen Situationen 100% ihre Arbeit). In der Procedure werden lediglich die einzelnen Felder der Tabelle den einzelnen Editfeldern zugewiesen ala

Code:
 Edit1.Text:=Table.FieldByName('Titel').AsString;
Zur Sicherheit mal meine Procedure:

Code:
procedure Datenladen(Table: TTable);
begin
  Haupt.Edit1.Text:=Table.fieldbyName('Titel').AsString;
  Haupt.Edit2.Text:=Table.fieldbyName('UTitel').AsString;
  Haupt.Edit3.Text:=Table.fieldbyName('OTitel').AsString;
  Haupt.ComboBox1.Text:=Table.fieldbyName('Kategorie').AsString;
  Haupt.Edit24.Text:=Table.fieldbyname('Laenge').AsString;
  Haupt.Edit4.Text:=Table.fieldbyName('FSK').AsString;
  Haupt.Edit5.Text:=Table.fieldbyName('KStart').AsString;
  Haupt.Edit6.Text:=Table.fieldbyName('DStart').AsString;
  Haupt.Edit7.Text:=Table.fieldbyName('PLand').AsString;
  Haupt.Edit8.Text:=Table.fieldbyName('PJahr').AsString;
  Haupt.Edit9.Text:=Table.fieldbyName('PFirma').AsString;
  Haupt.Edit10.Text:=Table.fieldbyName('VFirma').AsString;
  Haupt.Edit11.Text:=Table.fieldbyName('Regie').AsString;
  Haupt.Edit12.Text:=Table.fieldbyName('Drehbuch').AsString;
  Haupt.ComboBox2.Text:=Table.fieldbyName('Medium').AsString;
  Haupt.ComboBox3.Text:=Table.fieldbyName('Format').AsString;
  Haupt.ComboBox4.Text:=Table.fieldbyName('Sound').AsString;
  Haupt.Edit14.Text:=Table.fieldbyName('Haupt1').AsString;
  Haupt.Edit15.Text:=Table.fieldbyName('Haupt2').AsString;
  Haupt.Edit16.Text:=Table.fieldbyName('Haupt3').AsString;
  Haupt.Edit17.Text:=Table.fieldbyName('Haupt4').AsString;
  Haupt.Edit18.Text:=Table.fieldbyName('Dar1').AsString;
  Haupt.Edit19.Text:=Table.fieldbyName('Dar2').AsString;
  Haupt.Edit20.Text:=Table.fieldbyName('Dar3').AsString;
  Haupt.Edit21.Text:=Table.fieldbyName('Dar4').AsString;
  Haupt.Edit22.Text:=Table.fieldbyName('Dar5').AsString;
  Haupt.Edit23.Text:=Table.fieldbyName('Dar6').AsString;
  Haupt.Memo1.Text:=Table.fieldbyName('Inhalt').AsString;
  Haupt.Memo2.Text:=Table.fieldbyName('Bemerkung').AsString;
  LoadCJPEGImage(Haupt.FilmDB,'Szene1',Haupt.Image2);
  LoadCJPEGImage(Haupt.FilmDB,'Szene2',Haupt.Image3);
  LoadCJPEGImage(Haupt.FilmDB,'Szene3',Haupt.Image4);
  LoadCJPEGImage(Haupt.FilmDB,'Szene4',Haupt.Image5);
  LoadCJPEGImage(Haupt.FilmDB,'Szene5',Haupt.Image6);
  LoadCJPEGImage(Haupt.FilmDB,'Szene6',Haupt.Image7);
  LoadCJPEGImage(Haupt.FilmDB,'Szene7',Haupt.Image9);
  LoadCJPEGImage(Haupt.FilmDB,'Szene8',Haupt.Image10);
  LoadCJPEGImage(Haupt.FilmDB,'Szene9',Haupt.Image11);
  LoadCJPEGImage(Haupt.FilmDB,'Cover',Haupt.Image8);
  LoadCJPEGImage(Haupt.FilmDB,'VCover',Haupt.Image1);
end;
Ich kann mir wirklich nicht vorstellen das es daran liegt (Habe mittlerweile alles dreimal geprüft).

Bin mittlerweile ein wenig ratlos.
Grüße Legolas

Wissen ist Macht.
Wir wissen nichts, macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Probleme mit Table.Filter

  Alt 4. Okt 2003, 10:34
Hallo Legolas,

welche Datenbank benutzt du?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Legolas
Legolas

Registriert seit: 28. Sep 2003
Ort: Frankfurt am Main
72 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Probleme mit Table.Filter

  Alt 4. Okt 2003, 13:19
Hallo MrSpock,

ich benutze Paradox 7.

Zur Zeit probiere ich es doch mal mit einem TQuery und SQL. Vieleicht bringt das mehr.

Aber ich hoffe du hast mit dem Filter doch noch ne Idee!!
Grüße Legolas

Wissen ist Macht.
Wir wissen nichts, macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Probleme mit Table.Filter

  Alt 4. Okt 2003, 17:09
Hallo Legolas,

füge doch einmal vor dem Datenladen noch eine Zeile ein:

Delphi-Quellcode:
FilmDB.Filtered:=True;
FilmDB.First;
Datenladen(FilmDB);
...nur um sicher zu stellen, dass der Datensatzzeiger auch auf dem ersten und einzigen Satz steht.
Sollte das auch nichts helfen, füge noch eine Zeile hinzu:


Delphi-Quellcode:
FilmDB.Filtered:=True;
ShowMessage('Anzahl der gefilterten Sätze: '+IntToStr(FilmDB.RecordCount));
FilmDB.First;
Datenladen(FilmDB);
Teile uns dann bitte mit, was die Ausage anzeigt.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Legolas
Legolas

Registriert seit: 28. Sep 2003
Ort: Frankfurt am Main
72 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Probleme mit Table.Filter

  Alt 5. Okt 2003, 18:13
Hallo MrSpock,

ich habe das ganze jetzt auf ein TQuery und SQl umgestellt. Dabei habe ich festgestellt das mein Prog mit Table.Filter und/oder SQL richtig arbeitet, daß heißt er zeigt alle betroffenen Datensätze an. Allerdings gibt es da eine kleine Ungereimtheit. Einen Datensatz zeigt er sowohl bei dem einen als auch bei dem anderen Verfahren nicht an aber nur wenn ich nach ihm mittels Table.Filter oder SQL suche, per Next und/oder Prior geht es. (bei diesem einen Datensatz bleiben die Editfelder einfach leer). Alle anderen Datensätze (ob es nur einen betrifft oder mehrere) werden richtig und vollständig angezeigt.

Ich habe den Verdacht das da etwas mit der Tabelle nicht stimmt (oder mit diesem einzelnen Datensatz). Werde mal versuchen dieses Datensatz zu löschen und neu einzugeben.

Kann es sein das Paradox ab und an etwas buggy ist?

P.s.: Danke für deine bisherigen Lösungsversuche MrSpock, leider hatte ich auch schon diese Ideen. Hat aber leider garnichts genutzt.
Grüße Legolas

Wissen ist Macht.
Wir wissen nichts, macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Probleme mit Table.Filter

  Alt 5. Okt 2003, 21:52
Hallo Legolas,

nein, Paradox ist diesbezüglich nicht buggy. Was hat den RecordCount in dem o.g. Code ausgegeben? Oder hat die Neueingabe des Datensatzes etwas gebracht?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Legolas
Legolas

Registriert seit: 28. Sep 2003
Ort: Frankfurt am Main
72 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Probleme mit Table.Filter

  Alt 5. Okt 2003, 22:19
Hallo MrSpock,

erstmal danke das du dich noch mit meinem Problem beschäftigst.

Ich habe deine Anweisung in mein Projekt eingefügt. Wenn ich den besagten Datensatz filtere zeigt mir die Messagebox 'Anzahl der gefilterten Datensätze: 0'. Aber wie gesagt, komischerweise nur bei diesem einen Datensatz.

Ich habe ihn jetzt per Hand in der 'Dantenbankoberfläch' gelöscht. Komischerweise kann ich nun Programmgesteuert keine Datensätze mehr löschen oder hinzufügen. Diese Aktionen werden jedesmal mit 'FilmDB: Eine Datenmenge, die nur zum Lesen ist, kann nicht geändert werden.' (beim Hinzufügen eines Datensatzes) und 'FilmDB: Datensatz ist schreibgeschützt' (beim löschen eines Datensatzes) mit einer Exception abgebrochen. Liegt das vieleicht daran das ich ein TQuery verwende? Es sollte doch genauso funktionieren wie vorher mit einem TTable, oder?
Grüße Legolas

Wissen ist Macht.
Wir wissen nichts, macht nichts.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 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