2012-04-04 6 views
0

Ich versuche, eine Tabelle mit 2 verschiedenen Filtern zu filtern, so dass beim Drücken einer Schaltfläche nur die Datensätze mit einer bestimmten Job_ID und denen mit dem Typ 'angezeigt werden Privatgelände'. Ich habe den folgenden Code:Operator nicht anwendbar auf diesen Operandentyp Beim Filtern einer Tabelle

if CBSearchType.Text = 'Private' then 
begin 
DBTravel.DataSource.DataSet.DisableControls; 
      DBTravel.DataSource.DataSet.Filtered := False; 
      DBTravel.DataSource.DataSet.Filter := ('Job_ID = '+edtAddJobID.Text) AND  ('Type = '+QuotedStr('Private')); 
      DBTravel.DataSource.DataSet.Filtered := True; 
      DBTravel.DataSource.DataSet.First; 
      DBTravel.DataSource.DataSet.EnableControls; 
end; 

aber wenn ich versuche, um die Fehlermeldung ‚Operator nicht anwendbar auf diese Operandtyp‘ zu kompilieren angezeigt wird, irgendwelche Vorschläge? danke

Antwort

3

Die Filtereigenschaft muss eine Zeichenfolge

DBTravel.DataSource.DataSet.Filter := Format('(Job_ID =%s) AND (Type=%s)',[edtAddJobID.Text,QuotedStr('Private')]); 
+0

Job_ID scheint zu sein scheint zu sein, numerische und edtAddJobID ein Eingabefeld zu sein. Verwenden Sie für eine verbesserte Typsicherheit und Benutzereingabefehlerbehandlung die Zeichenfolge in Ganzzahlkonvertierung, und verwenden Sie dann den Integer-Wert in der Funktion Format mit% d: '(Job_ID =% d) UND ...' – mjn

+0

nach dem gleichen Code folgende Änderung DBTravel.DataSource.DataSet.Filter: = Format ('(Job_ID =% s) AND (Modus =% s)', [edtAddJobID.Text, edtSearchMode.Text]); Bei Mode-Einträgen lautet die Zeichenfolge z. B. "Car", "Train". Aber wenn ich das Programm starte und den Modus betrete und die Taste drücke, sagt es, dass Argumente vom falschen Typ sind, was ist anders? – Alexjjsmith

+0

Wenn Sie ein Zeichenfolgenfeld vergleichen, müssen Sie die zu vergleichende Zeichenfolge angeben: 'DBTravel.DataSource.DataSet.Filter: = Format ('(Job_ID =% s) UND (Mode =% s)', [edtAddJobID.Text, QuotedStr (edtSearchMode.Text)]); ' – RRUZ

2

Ich nehme an, dass Filter eine Zeichenfolge ist. Daher musst du ihm eine Zeichenfolge geben.

'(Job_ID = ' + edtAddJobID.Text + ') AND (Type = ' + QuotedStr('Private') + ')'; 
Verwandte Themen