![]() |
Datenbank: mariaDB • Version: ? • Zugriff über: mydac
Table Filter
Dieser Filter geht nicht, warum?
Delphi-Quellcode:
Form1.Table_Einsaetze_Event.Filtered := true;
Form1.Table_Einsaetze_Event.Filter := Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').Text; |
AW: Table Filter
Dreh mal die Reihenfolge der Befehle um
|
AW: Table Filter
Erst Filter aus, dann Filter setzen, dann Filter wieder ein.
Das zum grundsätzlichen Ablauf. Nehmen wir an in dem Feld
Delphi-Quellcode:
steht 42, dann teilst du dem Filter so mit "Bitte alles nehmen wo 42". Könntest du damit etwas anfangen?
EinsatzNummer
|
AW: Table Filter
Weil Filter nicht gehen können? ;)
Sorry, ernst: "gehen" andere derartige Filter oder ist der einzige? Ich hab's noch nie benutzt, aber würde erst die Expression zuweisen und dann den Filter aktivieren. Ich könnte mir sogar vorstellen, dass Komponenten es gar nicht erlauben, den abhängigen Wert eines Attributes zu ändern und statt dessen einen Fehler werfen. |
AW: Table Filter
Das Setzten eines Filters setzt die Eigenschaft Filtered zurück
|
AW: Table Filter
Und im Filter selbst muss auch eine gültige Bedingung stehen (siehe Sir Rufo).
|
AW: Table Filter
ja, es sollten alle Datensätze mit der Nr. 42 angezeigt werden!
Der Filter geht nicht :-( es werden alle Datensätze angezeigt ???
Delphi-Quellcode:
Form1.Table_Einsaetze_Event.Filter := Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').Text;
Form1.Table_Einsaetze_Event.Filtered := false; Form1.Table_Einsaetze_Event.Filtered := true; |
AW: Table Filter
Zitat:
![]() |
AW: Table Filter
was meinst Du mit "gültige Bedingung stehen" ?
|
AW: Table Filter
Hast Du mal den Link aus meinem letzten Post angeklickt? Da stehen Beispiele, Dein Filter heißt ja nicht "42", sondern "Einsatznummer = 42".
|
AW: Table Filter
versuche gerade alles, habe noch ein Brett vorm Kopf
Delphi-Quellcode:
Form1.Table_Einsaetze_Event.Filtered := false;
Form1.Table_Einsaetze_Event.Filter := 'EINSATZNUMMER ='+ Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').Text; Form1.Table_Einsaetze_Event.Filtered := true; |
AW: Table Filter
Vielleicht so...
Code:
Form1.Table_Einsaetze_Event.Filter := 'EINSATZNUMMER ='+ QuotedStr(Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').Text);
|
AW: Table Filter
habe ich schon versucht! geht nicht :-(
als Zusatz, die Datensätze werden in einem DBGrid angezeigt
Delphi-Quellcode:
Form3.CRDBGrid2.Columns[0].Visible := False;
//Form3.CRDBGrid2.Columns[1].Visible := False; Form3.CRDBGrid2.Columns[6].Visible := False; Form1.Table_Einsaetze_Event.Filtered := false; Form1.Table_Einsaetze_Event.Filter := 'EINSATZNUMMER ='+ QuotedStr(Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').Text); Form1.Table_Einsaetze_Event.Filtered := true; |
AW: Table Filter
Und du bist dir auch sicher, dass du dir die Form anschaust, die durch die in der Variablen
Delphi-Quellcode:
hinterlegten Referenz gemeint ist?
Form1
Könnte man z.B. so prüfen:
Delphi-Quellcode:
procedure TForm1.Button1_Click(Sender:TObject);
begin if Form1 <> Self then ShowMessage( 'Ey, ich bin gar nicht mit Form1 gemeint!' ); end; |
AW: Table Filter
hey,
die Komponente liegt auf Form1, das DBGrid auf Form3. Alles richtig so hier diese Fehlermeldung kommt: [dcc32 Warnung] BasisClient.pas(153): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'AnsiString' |
AW: Table Filter
Das wird hier jetzt eher zur wilden Spekulation.
Zeig' uns doch einfach mal, wie der Filter so aussieht:
Delphi-Quellcode:
Die Ausgabe von ShowMessage postest Du bitte hier.
Form1.Table_Einsaetze_Event.Filtered := false;
Form1.Table_Einsaetze_Event.Filter := 'EINSATZNUMMER ='+ QuotedStr(Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').Text); ShowMessage(QuotedStr(Form1.Table_Einsaetze_Event.Filter)); Form1.Table_Einsaetze_Event.Filtered := true; Die Art der Ausgabe / Anzeige der Daten, ist für das Setzen von Filtern irrelevant. Entscheidend ist die korrekte Syntax der Filter. Bei "geht nicht" gehe ich davon aus, dass die Funktionalität des Filters nicht gegeben ist, er also fehlerhaft ist. Dies äußert sich für gewöhnlich durch eine Exception. Gibt es eine? Wenn ja, dürften wir ihren Inhalt erfahren. Gibt es keine Exception, dann bitte die Info, dass es keine Exception gibt. In dem Fall ist übrigens davon auszugehen, dass es die entsprechenden Sätze nicht gibt. Von welchem Typ ist denn Einsatznummer? Integer? Dann wäre die sinnvollste Methode, den Filter zu setzen vermutlich:
Delphi-Quellcode:
Sollte Einsatznummer vom Typ String sein, dann wäre dashier eventuell die bessere Variante des Filtersetzens:
Form1.Table_Einsaetze_Event.Filtered := false;
Form1.Table_Einsaetze_Event.Filter := Format('EINSATZNUMMER = %d', [Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').AsInteger]); Form1.Table_Einsaetze_Event.Filtered := true;
Delphi-Quellcode:
Werden im DBGrid nach dem
Form1.Table_Einsaetze_Event.Filtered := false;
Form1.Table_Einsaetze_Event.Filter := Format('EINSATZNUMMER = %s', [QuotedStr(Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').AsString)]); Form1.Table_Einsaetze_Event.Filtered := true;
Delphi-Quellcode:
eigentlich irgendwelche Daten angezeigt? Oder ist die Ergebnismenge leer oder ist sie unverändert?
Filtered := true;
|
AW: Table Filter
Exception :
Argument außerhalb des Bereichs Im CRDBGrid werden immer alle Datensätze angezeigt.
Delphi-Quellcode:
Ergebnis : '' // Verstehe ich nicht ???
ShowMessage(QuotedStr(Form1.Table_Einsaetze_Event.Filter));
|
AW: Table Filter
Zitat:
Wenn Du uns jetzt auch noch was zum Datentyp von Einsatznummer sagen könntest und uns mal den Filter zur Verfügung stellen könntest, hätte die :glaskugel: mal eine kleine Pause ;-) |
AW: Table Filter
es ist eine Zahl mit zehn Zeichen
Beispiel: 1234567890 aber im Filter steht nichts drin!
Delphi-Quellcode:
Ergebnis : ''
ShowMessage(QuotedStr(Form1.Table_Einsaetze_Event.Filter));
|
AW: Table Filter
habe jetzt mal ein Edit dazwischen, dort steht die Zahl drin!
Delphi-Quellcode:
Form3.Edit2.Text := Form1.Table_Einsaetze.FieldByName('EINSATZNUMMER').Text;
Form1.Table_Einsaetze_Event.Filtered := false; Form1.Table_Einsaetze_Event.Filter := 'EINSATZNUMMER='+ QuotedStr(Form3.Edit2.Text); Form1.Table_Einsaetze_Event.Filtered := true; |
AW: Table Filter
Ok, nochmal auf Deutsch:
Welchen Datentyp hat das Feld EREIGNISNUMMER in deiner Datenbank? Niemand will wissen, ob man den Inhalt als Text darstellen kann! Mögliche Antworten könnten sein: varchar(10), int, bigint, float, etc. |
AW: Table Filter
varchar(10)
|
AW: Table Filter
Also, wenn's 'ne Zeichenfolge ist, dann sollte man eventuell auch .AsString statt .Text nutzen.
Folgende Werte möchte ich wissen:
Delphi-Quellcode:
Bitte prüfe, ob die Einsatznummer immer gefüllt ist.
ShowMessage('>>>' + Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').Text + '<<<');
ShowMessage('>>>' + Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').AsString + '<<<');
Delphi-Quellcode:
if Trim(Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').AsString) = '' then begin
ShowMessage('Die Einsatznummer des aktuellen Satzes ist nicht gefüllt.'); end else begin Form1.Table_Einsaetze_Event.Filtered := false; Form1.Table_Einsaetze_Event.Filter := QuotedStr(Format('EINSATZNUMMER = %s', [Form1.Table_Einsaetze_Event.FieldByName('EINSATZNUMMER').AsString])); Form1.Table_Einsaetze_Event.Filtered := true; end; |
AW: Table Filter
Liste der Anhänge anzeigen (Anzahl: 1)
habe alles getestet, die Einsatznummer ist immer gefüllt.
Showmessage, Funktionieren beide Anweisungen! siehe Bild! |
AW: Table Filter
Ok, einen hab' ich noch:
Delphi-Quellcode:
Was passiert?
Form1.Table_Einsaetze_Event.Filtered := false;
Form1.Table_Einsaetze_Event.Filter := 'EINSATZNUMMER = "42" '; // hier bitte 'ne Zahl rein, die es auch gibt. Form1.Table_Einsaetze_Event.Filtered := true; Exception, wenn ja welche? Wenn nein, wie verändert sich die Datenanzeige? |
AW: Table Filter
Exception: Argument außerhalb des Bereichs
Datenmenge: es werden alle Datensätze angezeigt! |
AW: Table Filter
Hallo,
gibt das Feld überhaupt in der DB. Groß- Kleinschreibung vielleicht? Welche DB? |
AW: Table Filter
Zitat:
Das Feld muss es geben, denn sonst könnte er den Inhalt nicht ausgeben und der Filter soll auf der gleichen Tabelle angewendet werden :stupid: |
AW: Table Filter
ja, das Feld ist vorhanden!
Sonst gäbe es auch eine Exception! |
AW: Table Filter
ja, mariaDB / HeidiSQL
|
AW: Table Filter
werde es gleich mal mit einer Query Komponente versuchen!
|
AW: Table Filter
Hallo,
die Heidi, oh Gott, Maria ;) |
AW: Table Filter
versuch doch mal bitte
Code:
Gruß
Form1.Table_Einsaetze_Event.Filter := 'EINSATZNUMMER LIKE ''12345%'' ';
K-H |
AW: Table Filter
Beim Suchen bin ich auf diesen Tread gestoßen:
![]() Daraus schließe ich erstmal, dass Filter bei der Datenbank grundsätzlich erstmal einsetzbar sind. Bei diesem Filter
Delphi-Quellcode:
kann ich keinen syntaktischen Fehler erkennen.
Form1.Table_Einsaetze_Event.Filter := 'EINSATZNUMMER = "42" '
Also bleiben nur noch Datenfehler übrig. (Oder Fehler von ganz woanders her, die nur zufällig bei dem Setzen von Filtern "hochblubbern"). Dazu möchte ich (erstmal) wissen: Ist Einsatznummer immer gefüllt? Wieviele Datensätze hast Du in der Datenbank? Kannst Du prüfen, ob alle Werte der Einsatznummer korrekt, d. h. spezifikationsgerecht, befüllt sind? Kann die Einsatznummer auch leer sein? Nun wird's spekulativ: Trenne mal die Anzeigekomponenten von der Datenbankkomponente. Vermutlich hast Du ja Table_Einsaetze_Event irgendwo 'ner TDatasource (oder so) zugewiesen. Lässt sich der Filter dann setzen? Wenn ja, verschluckt sich irgendeine Komponenten, sobald ein Filter gesetzt wird, aber der Filter ist nicht das Problem. Bleibt der Fehler bestehen, muss es irgendwo in den Daten oder bei der Tabellenkomponente oder der Datenbank ein Problem geben. Kannst Du den ganzen "Spass" mal debuggen? Breakpoint auf die Zeile, in der der Filter befüllt wird und von da aus dann schrittweise in alles reinsteppen, was da so ausgeführt wird. Wo "landest" Du, wenn die Exception ausgelöst wird? Eventuell kann man dann von da aus (etwas zielgerichteter) weitersuchen. |
AW: Table Filter
Vielleicht stehen auch Leerzeichen im String. Versuch den mal zu Trimmen.
|
AW: Table Filter
Zitat:
Zitat:
@mkinzler angeblich sind in der DB nur 10stellige Ziffernfolgen enthalten, da ist dann wohl kein Platz für ein Blank. "42" passt da allerdings auch nicht, "0000000042" wäre da schon besser. Gruß K-H |
AW: Table Filter
Also dieses Filter-Gedöns wird von
Delphi-Quellcode:
zwar eingeführt, ist aber nur virtuell.
TDataSet
Das Setzen der
Delphi-Quellcode:
-Eigenschaft setzt auch nicht die Eigenschaft
Filter
Delphi-Quellcode:
gesichert wieder auf
Filtered
Delphi-Quellcode:
. Jedenfalls passiert das nicht in
false
Delphi-Quellcode:
.
TDataSet
Jede Ableitung von
Delphi-Quellcode:
muss sich also selber darum kümmern, ob und wenn ja wie sie sich darum kümmert. Daran hängt eben auch, wie die Syntax des Filter-Texts sein muss.
TDataSet
Kann man z.B. im Source von ![]() Pauschale Aussagen zum Thema ![]() ![]() Und selbst ![]() Ein Blick auf die ![]() Zitat:
|
AW: Table Filter
Zitat:
"42" geht ebenso wie " 42" oder " 42 " und "0000000042". Aber das heißt ja noch nichts. Wenn es irgendwo in der Applikation eine Stelle gibt, an der dieses VarChar(10) nur aus Ziffern bestehen darf, aber dann, zufällig beim Setzen dieses Filters, etwas anderes bekommt, als diese (genau oder maximal?) zehn Ziffern, so mag dann dort irgendwo genau diese Fehlermeldung draus resultieren. Ohne genauere Kenntnis der "Datenlage" und dessen, was die Applikation damit macht, scheint mir momentan eine zielgerichtete Fehlersuche kaum möglich. Allgemein läßt die Fehlermeldung eher darauf schließen, dass hier irgendein Wert, an dem wir beim Filtern vorbeikommen, größer oder kleiner als der kleinste bzw. größte zulässige Wert ist. Eventuell ist auch für "irgendetwas" der "getroffene Wert" kleiner oder größer als der kleinste bzw. der größte Wert für einen Index (Array, Liste, ..., wasweißdergeier) |
AW: Table Filter
Zitat:
Und dann, nach Kenntnis der vorhandenen Daten, den Filter zu definieren. Gruß K-H |
AW: Table Filter
Hallo,
vielleicht wird das varchar ja als char interpretiert von der JosefDB ( ;) ). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 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