TDBLookupListBox造成的Operation not applicable問題 |
答題得分者是:careychen
|
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
小弟目前遇到一個頭痛的問題
以下是程式結構: [code delphi] Case RadioGroup1.ItemIndex of 0:sqltext:='select a,b from table1'; 1:sqltext:='select c a,d b from table2'; 2:sqltext:='select e a,'' '' b from table3'; end; with Query1 do begin close; sql.Clear; SQL.Text :=sqltext; open; end; [/code] 這段程式是在RadioGroup1.OnClick時執行,其結果會將兩個欄位的內容顯示到TDBLookupListBox中,而TDBLookupListBox的ListSource就是指向這個Query的DataSource,並且可以點選TDBLookupListBox內容寫到Edit1當中(簡而言之就是下拉式選單) 小弟遇到的問題是這樣的,當點選第一個選項時TDBLookupListBox無誤(不執行選取),再選第二或第三個選項也都無誤,但是當點選TDBLookupListBox內容寫到Edit1中時,再去選第二或第三個選項,在執行到open這一句時就會跳出Operation not applicable的錯誤,經過測試將ListSource拿掉,程式執行過程是沒有問題的,請問有什麼方法能解決掉TDBLookupListBox這個問題?又是怎麼造成
------
永遠都是新手 編輯記錄
Reiji 重新編輯於 2010-04-06 15:13:25, 註解 無‧
Reiji 重新編輯於 2010-04-06 15:14:19, 註解 無‧ Reiji 重新編輯於 2010-04-06 15:15:24, 註解 無‧ Reiji 重新編輯於 2010-04-06 15:16:23, 註解 無‧ Reiji 重新編輯於 2010-04-06 15:16:43, 註解 無‧ Reiji 重新編輯於 2010-04-06 15:18:17, 註解 為什麼我的程式老是編輯不了啊(汗)‧ Reiji 重新編輯於 2010-04-06 15:19:27, 註解 無‧ Reiji 重新編輯於 2010-04-06 15:21:39, 註解 無‧ |
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
先確定一件事一下 三行 Select 中的 a 和 b 都是同一個型態嗎?
例如: a, c, e 的型態是不是一樣的? b, d, '' 是不是都是字串型態? (因為你的第三個 SQL 語法的第二個欄位是字串) 如果上面的說明不清楚,可以試試 Select Cast(A as Type) a, Cast(B as nvarcar(XX)) b from ... Select Cast(C as Type) a, Cast(D as nvarcar(XX)) b from ... Select Cast(E as Type) a, '' '' b from ... 我猜,ListSource 的錯誤應該不是錯誤,而是在於三個語法的欄位型態不同導致的 ===================引 用 Reiji 文 章=================== 小弟目前遇到一個頭痛的問題 以下是程式結構: [code delphi] Case RadioGroup1.ItemIndex of 0:sqltext:='select a,b from table1'; 1:sqltext:='select c a,d b from table2'; 2:sqltext:='select e a,'' '' b from table3'; end; with Query1 do begin close; sql.Clear; SQL.Text :=sqltext; open; end; [/code] 這段程式是在RadioGroup1.OnClick時執行,其結果會將兩個欄位的內容顯示到TDBLookupListBox中,而TDBLookupListBox的ListSource就是指向這個Query的DataSource,並且可以點選TDBLookupListBox內容寫到Edit1當中(簡而言之就是下拉式選單) 小弟遇到的問題是這樣的,當點選第一個選項時TDBLookupListBox無誤(不執行選取),再選第二或第三個選項也都無誤,但是當點選TDBLookupListBox內容寫到Edit1中時,再去選第二或第三個選項,在執行到open這一句時就會跳出Operation not applicable的錯誤,經過測試將ListSource拿掉,程式執行過程是沒有問題的,請問有什麼方法能解決掉TDBLookupListBox這個問題?又是怎麼造成
------
價值的展現,來自於你用哪一個角度來看待它!! |
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
是的,全部都是Varchar2型態,a b c d e 都是
不過經careychen你這麼一說,我去看這些欄位發現長度不一樣,也就是a c e雖然一樣是Varchar2但欄位長度並不相同,使用cast去設定為最大數就會解決了 那麼是不是雖然Query1有close,但是欄位長度依然停留在前一個select結果了呢? 總之用Cast是確實的解決了錯誤問題 十分感謝 ===================引 用 careychen 文 章=================== 先確定一件事一下 三行 Select 中的 a 和 b 都是同一個型態嗎? 例如: a, c, e 的型態是不是一樣的? b, d, '' 是不是都是字串型態? (因為你的第三個 SQL 語法的第二個欄位是字串) 如果上面的說明不清楚,可以試試 Select Cast(A as Type) a, Cast(B as nvarcar(XX)) b from ... Select Cast(C as Type) a, Cast(D as nvarcar(XX)) b from ... Select Cast(E as Type) a, '' '' b from ... 我猜,ListSource 的錯誤應該不是錯誤,而是在於三個語法的欄位型態不同導致的 ===================引 用 Reiji 文 章=================== 小弟目前遇到一個頭痛的問題 以下是程式結構: [code delphi] Case RadioGroup1.ItemIndex of 0:sqltext:='select a,b from table1'; 1:sqltext:='select c a,d b from table2'; 2:sqltext:='select e a,'' '' b from table3'; end; with Query1 do begin close; sql.Clear; SQL.Text :=sqltext; open; end; [/code] 這段程式是在RadioGroup1.OnClick時執行,其結果會將兩個欄位的內容顯示到TDBLookupListBox中,而TDBLookupListBox的ListSource就是指向這個Query的DataSource,並且可以點選TDBLookupListBox內容寫到Edit1當中(簡而言之就是下拉式選單) 小弟遇到的問題是這樣的,當點選第一個選項時TDBLookupListBox無誤(不執行選取),再選第二或第三個選項也都無誤,但是當點選TDBLookupListBox內容寫到Edit1中時,再去選第二或第三個選項,在執行到open這一句時就會跳出Operation not applicable的錯誤,經過測試將ListSource拿掉,程式執行過程是沒有問題的,請問有什麼方法能解決掉TDBLookupListBox這個問題?又是怎麼造成
------
永遠都是新手 |
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
抱歉,才疏學淺,我無法回答是否為【欄位長度依然停留在前一個select結果】造成的,
但你的 TDBLookupListBox 的 dataSource 的地方也是有指定其他的來源資料呢? 如果沒有,單純只是用來秀資料的話,那有另一個建議的方式,可以試試 在 RadioGroup 之前先將 ListSource 清掉 DBLookupLIstBox.ListSource := nil; case RadioGroup1.ItemIndex of .... end; with query1 do ... ... end; DBLookupListBox.ListSource := Query的DataSource; 這樣的話,那你上面那個 Select 就可以不用改了 ===================引 用 Reiji 文 章=================== 是的,全部都是Varchar2型態,a b c d e 都是 不過經careychen你這麼一說,我去看這些欄位發現長度不一樣,也就是a c e雖然一樣是Varchar2但欄位長度並不相同,使用cast去設定為最大數就會解決了 那麼是不是雖然Query1有close,但是欄位長度依然停留在前一個select結果了呢? 總之用Cast是確實的解決了錯誤問題 十分感謝 ===================引 用 careychen 文 章=================== 先確定一件事一下 三行 Select 中的 a 和 b 都是同一個型態嗎? 例如: a, c, e 的型態是不是一樣的? b, d, '' 是不是都是字串型態? (因為你的第三個 SQL 語法的第二個欄位是字串) 如果上面的說明不清楚,可以試試 Select Cast(A as Type) a, Cast(B as nvarcar(XX)) b from ... Select Cast(C as Type) a, Cast(D as nvarcar(XX)) b from ... Select Cast(E as Type) a, '' '' b from ... 我猜,ListSource 的錯誤應該不是錯誤,而是在於三個語法的欄位型態不同導致的 ===================引 用 Reiji 文 章=================== 小弟目前遇到一個頭痛的問題 以下是程式結構: [code delphi] Case RadioGroup1.ItemIndex of 0:sqltext:='select a,b from table1'; 1:sqltext:='select c a,d b from table2'; 2:sqltext:='select e a,'' '' b from table3'; end; with Query1 do begin close; sql.Clear; SQL.Text :=sqltext; open; end; [/code] 這段程式是在RadioGroup1.OnClick時執行,其結果會將兩個欄位的內容顯示到TDBLookupListBox中,而TDBLookupListBox的ListSource就是指向這個Query的DataSource,並且可以點選TDBLookupListBox內容寫到Edit1當中(簡而言之就是下拉式選單) 小弟遇到的問題是這樣的,當點選第一個選項時TDBLookupListBox無誤(不執行選取),再選第二或第三個選項也都無誤,但是當點選TDBLookupListBox內容寫到Edit1中時,再去選第二或第三個選項,在執行到open這一句時就會跳出Operation not applicable的錯誤,經過測試將ListSource拿掉,程式執行過程是沒有問題的,請問有什麼方法能解決掉TDBLookupListBox這個問題?又是怎麼造成
------
價值的展現,來自於你用哪一個角度來看待它!! |
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
感謝,本來把它們拆成了很多個Query去分別跑,弄得越來越複雜
還是清空這個方法好,可惜沒辦法再給一次分,不然一定給你加好幾分 ===================引 用 careychen 文 章=================== 抱歉,才疏學淺,我無法回答是否為【欄位長度依然停留在前一個select結果】造成的, 但你的 TDBLookupListBox 的 dataSource 的地方也是有指定其他的來源資料呢? 如果沒有,單純只是用來秀資料的話,那有另一個建議的方式,可以試試 在 RadioGroup 之前先將 ListSource 清掉 DBLookupLIstBox.ListSource := nil; case RadioGroup1.ItemIndex of .... end; with query1 do ... ... end; DBLookupListBox.ListSource := Query的DataSource; 這樣的話,那你上面那個 Select 就可以不用改了
------
永遠都是新手 |
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
剛才試了一下,發現還是一樣會出現錯誤,哈哈,第一次試誤以為沒問題呢,第二次才發現點錯地方,才又發現問題
繞來繞去似乎還是要用cast的方法比較簡單 感覺應該是TDBLookupListBox的ListField無法順利變化長度的關係 ===================引 用 Reiji 文 章=================== 感謝,本來把它們拆成了很多個Query去分別跑,弄得越來越複雜 還是清空這個方法好,可惜沒辦法再給一次分,不然一定給你加好幾分 ===================引 用 careychen 文 章=================== 抱歉,才疏學淺,我無法回答是否為【欄位長度依然停留在前一個select結果】造成的, 但你的 TDBLookupListBox 的 dataSource 的地方也是有指定其他的來源資料呢? 如果沒有,單純只是用來秀資料的話,那有另一個建議的方式,可以試試 在 RadioGroup 之前先將 ListSource 清掉 DBLookupLIstBox.ListSource := nil; case RadioGroup1.ItemIndex of .... end; with query1 do ... ... end; DBLookupListBox.ListSource := Query的DataSource; 這樣的話,那你上面那個 Select 就可以不用改了
------
永遠都是新手 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |