Autor Beitrag
Ulrich
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 13.02.03 22:34 
Hallo Leute,

habe ein Problem mit Table.Filter. ich habe schon sehr häufig in eurem Forum gelesen und einige wertvolle Tips und Tricks gelesen. Ich hoffe einer von Euch hat die rettende Idee zu meinem Problem:

Voraussetzung:
Datenmodul: DM
Paradox 7 Tabelle - Sensor -
Spalte - SLfdNr - Typ Short,
Spalte - SNennwert - Typ N(umerisch),
Spalte - STyp - Typ A(lphanumerisch) 6,

Ausschnit aus der Tabelle:
Es gibt vier Datensätze mit ansteigenden SNennwerten - 0,5 -1 -2 - 5 den vier Datensätzen ist zB. der STyp - N - zugeortnet; vier weitere Datensätze haben die gleichen SNennwerte aber jeweils STyp - kN; anschließend noch vier Datensätze; wieder die gleichen SNennwerte aber diesmal STyp - Ncm -;

Die Spalte SLfdNr wird dabei von - 0 ! bis 11 durchnummeriert!

Aufgabe: Durch Filterung von SNennwert und STyp die SLfdNr herauszufinden und den passenden Datensatz im Formular anzeigen.

Theorie:
ausblenden Quelltext
1:
2:
3:
4:
5:
DM.Sensor.Filter:= '';

DM.Sensor.Filter:= 'SNennwert = ' + QuotedStr(FloatToStr(TempSNennwert)) AND 'STyp = ' + quotedStr(TempSTyp);

DM.Sensor.Filtered:= true;

Praxis:
Die Einzelbereiche des Filters werden sauber gefiltert!
ausblenden Quelltext
1:
DM.Sensor.Filter:= 'SNennwert = ' + QuotedStr(FloatToSt(TempSNennwert));					

oder auch
ausblenden Quelltext
1:
DM.Sensor.Filter:= 'STyp = ' + quotedStr(TempSTyp);					

Erst wenn das - AND - die Filterbedingungen verbindet kommt es zu Fehlern.

Der Compiler meckert das hintere - + - an:
Zitat:
[Fehler] Parameter.pas(399): Operator ist auf diesen Operandentyp nicht anwendbar

Die einzelnen Bedingungen in Klammern zu setzen hat leider nicht geholfen
ausblenden Quelltext
1:
DM.Sensor.Filter:= ('SNennwert = ' + QuotedStr(FloatToStr(TempSNennwert))) AND ('STyp = ' + quotedStr(TemSTyp));					

Zitat:
[Fehler] Parameter.pas(399): Operator ist auf diesen Operandentyp nicht anwendbar

Liegt es vielleicht daran dass man nur gleiche Feldtypen (zB. nur Numerisch oder nur String ) mit - AND - kombinieren kann ? In der Hilfe und anderen Foren habe ich bisher leider keine Antwort finden können.

Moderiert von user profile iconTino: Code- & Quote-Tags hinzugefügt.

_________________
Gruss Ulrich
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Do 13.02.03 23:31 
Warum machst Du das über die TTable-Komponente und nicht über SQL. Da ist das doch viel einfacher.
ausblenden Quelltext
1:
SELECT * FROM tabelle WHERE feld1='test1' AND feld2='test2';					

So könnte dann Deine Bedingung zum Beispiel aussehen.

Moderiert von user profile iconTino: Code-Tags hinzugefügt.
Ulrich Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 14.02.03 00:56 
Hallo bis11,

danke für die Antwort, habe vor meiner Frage viele vergebliche Versuche unternommen die Filterung mit SQL zu erschlagen, da mir dies auch einfacher erschien... aber:

Vorgabe siehe oben:

Folgende Einzelabfragen funktionieren:
1)
ausblenden Quelltext
1:
2:
3:
DM.SensorQuery.SQL.Clear;
DM.SensorQuery.SQL.ADD('SELECT SLFDNR FROM Sensor WHERE SNennwert =  2 ');
DM.SensorQuery.Open;

2)
ausblenden Quelltext
1:
2:
3:
DM.SensorQuery.SQL.Clear;
DM.SensorQuery.SQL.ADD('SELECT SLFDNR FROM Sensor WHERE STyp = "N" ');
DM.SensorQuery.Open;

Sobald eine Variable eingesetzt wird bekomme ich Programmabbrüche und verschiedenste Fehlermeldungen; die compelierung vorher ist jedesmal Fehlerfrei.

Ich vermute es liegt daran wie die Variablen im SQL erkannt werden. Hier hab ich leider keine eigen Idee mehr. :( :?!?: Der folgende Code erzeugt einen Programmabbruch mit Fehler: Keine Übereinstimmung der Typen im Ausdruck;
ausblenden Quelltext
1:
DM.SensorQuery.SQL.ADD('SELECT SLFDNR FROM Sensor WHERE SNennwert = " + tempSNennwert + " ');					

Folgender Code
ausblenden Quelltext
1:
DM.SensorQuery.SQL.ADD('SELECT SLFDNR FROM Sensor WHERE SNennwert = tempSNennwert ');					


Fehlermeldung: ungültiger Feldname - tempSNennwert;

usw., usw.

Da diese Einzelversuche schon nicht funktionieren - ich hab schon zich Varianten ( aus Büchern und Foren) ausprobiert leider auch ohne Erfolg, bin natürlich ratlos wie die Verknüpfung der beiden Auswahlkriterien aussehen soll. Erst danach hab ich die Versuche mit Table.Filter angefangen, da ich in anderen Anwendungen mit Einzelfilterungen bisher ganz gut zurecht gekommen bin.

Moderiert von user profile iconTino: Code-Tags hinzugefügt.

_________________
Gruss Ulrich
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Fr 14.02.03 01:44 
Zitat:

Folgende Einzelabfragen funktionieren:
1)
DM.SensorQuery.SQL.Clear;
DM.SensorQuery.SQL.ADD('SELECT SLFDNR FROM Sensor WHERE SNennwert = 2 ');
DM.SensorQuery.Open;


2)
DM.SensorQuery.SQL.Clear;
DM.SensorQuery.SQL.ADD('SELECT SLFDNR FROM Sensor WHERE STyp = "N" ');
DM.SensorQuery.Open;


Ich würde das ganze etwas anderst machen. Versuche es mal so :
ausblenden Quelltext
1:
2:
3:
DM.SensorQuery.SQL.Clear; 
DM.SensorQuery.SQL.ADD('SELECT SLFDNR FROM Sensor WHERE SNennwert = '+IntToStr(varaiablefür2)+' AND STyp = '+QuotedStr(varibalefürn)); 
DM.SensorQuery.Open;


Mit diesen SQL-Befehl werden Dir alle Datensätze der Spalte SLFDNR angezeigt, wo das Feld SNennwert den Wert 2 hat und wo das Feld STyp den String N enthält.
Ulrich Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 14.02.03 09:30 
Titel: Titel: Problem Table.Filter Kombination von 2 Bedingungen mi
Moin, Moin alle zusamen!

@ bis11,

:dance: :dance2:

Danke für die schnelle Hilfe! Funktioniert wunderbar!

Schönen Tag noch

_________________
Gruss Ulrich
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Fr 14.02.03 15:37 
Danke gleichfalls, ich freue mich immer wieder wenn ich helfen konnte.