我懷疑EDICOES_ID
字段是一個整數值,在這種情況下,您不需要在您的過濾器表達式中引用它,並且不支持LIKE
運算符AFAIK。如果它是一個字符串字段,則確實需要引號並支持LIKE
,但您通常還需要在表達式中使用通配符。 (LIKE僅支持字符(串)類型字段。對於NUMERICS或日期,則需要使用通常的比較運算符>,<,> =,< =,=或BETWEEN。)
也請自己幫忙,並聲明一個本地變量,並確保在嘗試訪問其Objects
之前在ComboBox
中選擇了一個項目。我已經爲ItemIndex
和您正在檢索的類型匹配Object
的中間存儲添加了一個,這使得如果需要這樣做更容易進行調試。
下面是一種解決方案(無論是整數字段還是需要引用的字符串)。
var
Idx, Value: Integer;
begin
Idx := ComboBox1.ItemIndex;
if Idx > -1 then
begin
CDSIndicados.Filtered := False;
Value := Integer(cxComboBox1.Properties.Items.Objects[Idx]);
// If the field is an integer, you don't need a quoted value,
// and LIKE isn't supported in the filter.
CDSIndicados.Filter := 'EDICOES_ID = ' + IntToStr(Value);
// Not relevant here, but LIKE isn't supported for date values
// either. For those, use something like this
CDSIndicados.Filter := 'EDICOES_DATE = ' + QuotedStr(DateToStr(Value));
// or, if the field is string and you want LIKE, you need to
// quote the value and include a wildcard inside that quoted
// string.
CDSIndicados.Filter := 'EDICOES_ID LIKE ' + QuotedStr(IntToStr(Value) + '%');
CDSIndicados.Filtered := True;
end;
end;
如果我正在調試這個,我首先檢查什麼值分配給CDSIndicados.Filter,然後我開始推理。 –
難道你不能只是將這個錯誤追溯到dbcommon.pas來得到這個想法是什麼實際的原因? – vavan