2013-10-04 48 views
0

我有一列,它是NVarChar(MAX),它包含的文字是這樣的:;0,4,6DBCheckComboBox獲取值在SQL Server

這是從另一個表Flag值。

A.我的EditValueFormat propertie組件的設置爲cvfIndices

B.我使用這樣的代碼把從表一表中的值到一個TcxDBCheckComboBox部件:

Query.Active := True; 
while not Query.Eof do begin 
    cxDBCheckComboBox1.Properties.Items.AddCheckItem(QueryCaptionField.AsString); 
    Query.Next; 
end; 
Query.Active := False; 

C.我分配一個指向該列的數據源當我在程序中選擇數值時,我想保存我的值:文本在數據庫中看起來像這樣:; 0,4,6我該如何查詢它以查找從SQL Server中選擇的內容?

+2

這是衆所周知的問題。這裏有一種方法,可以幫助你。我會正常化,並將csv列扔入垃圾箱。 http://stackoverflow.com/questions/13682188/sql-server-2008-split-sort-and-merge-value –

+1

我同意託尼。但是,您可以使用'POSITION(','+ fieldname +',',listfieldname)<> 0'來查詢字符串,如'',0,4,6,''。 「 –

+0

Jens'POSITION'不是一個公認的內置函數名稱。」 – AirWolf

回答

-2

找到了答案,同時使用cvfIndices保存在數據庫中的值代表在下拉列表中值的索引,所以你可以像這樣進行查詢:

SELECT * FROM TechCardsData 
LEFT JOIN TechCardsOperations 
on 
CHARINDEX(CAST(TechCardsOperations.ID-1 as nvarchar(max)),TechCardsData.OperationsFlags) <> 0 

,一切工作:)希望這可以幫助別人: )

+0

-1這將無法正常工作對於兩個或更多的數字ID。 –

+0

忘記了內容,你需要使用RowNumber來代替,它的工作原理相信我,我試過了:D – AirWolf

+0

'CHARINDEX('1','; 10')<> 0'是'True',所以這個是一個非常危險的解決方案。 –