請教數據類型問題 |
尚未結案
|
Link_Chen
一般會員 發表:25 回覆:22 積分:9 註冊:2004-03-30 發送簡訊給我 |
|
huwk
資深會員 發表:26 回覆:340 積分:323 註冊:2002-04-03 發送簡訊給我 |
|
Link_Chen
一般會員 發表:25 回覆:22 積分:9 註冊:2004-03-30 發送簡訊給我 |
Dear huwk,
我把相關部分的程式碼貼出來,可能會更清楚點.
public
SqlComd: String; //首先我宣告了一個全局變量.
...
procedure TdlgComputerEdit.BitBtn1Click(Sender: TObject);
begin
SqlComd := '';
If CheckBox1.checked = true then
SqlComd := SqlComd ' Select ''' wwDBEdit1.text ''' , MatClass, ''' JsComboBox2.text ''' , MatName, getdate(), 1 From ELE_Master(nolock) Where MatCode = ''' JsComboBox2.text ''' Union ';
If CheckBox2.checked = true then
SqlComd := SqlComd ' Select ''' wwDBEdit1.text ''' , MatClass, ''' JsComboBox3.text ''' , MatName, getdate(), 1 From ELE_Master(nolock) Where MatCode = ''' JsComboBox3.text ''' Union ';
If CheckBox3.checked = true then
SqlComd := SqlComd ' Select ''' wwDBEdit1.text ''' , MatClass, ''' JsComboBox4.text ''' , MatName, getdate(), ''' Edit1.text ''' From ELE_Master(nolock) Where MatCode = ''' JsComboBox4.text ''' Union ';
SqlComd := SqlComd ' Select ''' 'WWW' ''' ,''' 'WW' ''' , ''' 'WWWWWW' ''' , ''' 'WWW' ''' , getdate(), 1';
ReNewEP(SqlComd);
end; procedure TdlgComputerEdit.ReNewEP(ItemId: String);
begin
with qryRenewFix do
begin
close;
ParamByName('SqlComd').AsString := ItemId;
open;
BrowseData(tblDetail, True);
end;
end; 以上是程式的相關部分,其實我的目的就是根據使用者選擇的情況給SqlComd這個變量
賦值,然後再帶給qryRenewFix這支程序作為條件使用. 現在目前的情況是:當我只滿足CheckBox1.checked = true 的時候,SqlComd是能取到
值的(這個時候SqlComd的長度沒到256),但是當我同時滿足CheckBox1.checked = true
和CheckBox2.checked = true的時候,SqlComd就被抓成了亂碼(這個時候實際SqlComd
的長度超過了256).
|
huwk
資深會員 發表:26 回覆:340 積分:323 註冊:2002-04-03 發送簡訊給我 |
1.你要不要search看你的專案中是否有用到{$h-},你可以search h-
2.你要不要試著直接show出來
If CheckBox2.checked = true then
showmessage(
sSqlComd ' Select ''' wwDBEdit1.text ''' , MatClass, ''' JsComboBox3.text ''' , MatName, getdate(), 1 From ELE_Master(nolock) Where MatCode = ''' JsComboBox3.text ''' Union '
);
------
熊的學習 http://huwk.blogspot.com |
Link_Chen
一般會員 發表:25 回覆:22 積分:9 註冊:2004-03-30 發送簡訊給我 |
huwk, 我檢查過了程序裡沒有用到{$h-}
用showmessage,結果也是對的.我最蹤了一下,到程序的最後
procedure TdlgComputerEdit.ReNewEP(ItemId: String);
begin
with qryRenewFix do
begin
close;
ParamByName('SqlComd').AsString := ItemId;//到這裡ItemId的值還是正確的
open; //到這裡,就出錯了.錯誤提示是'XX'附近語法不正確,XX是亂碼
BrowseData(tblDetail, True);
end;
end;
|
huwk
資深會員 發表:26 回覆:340 積分:323 註冊:2002-04-03 發送簡訊給我 |
|
Link_Chen
一般會員 發表:25 回覆:22 積分:9 註冊:2004-03-30 發送簡訊給我 |
|
huwk
資深會員 發表:26 回覆:340 積分:323 註冊:2002-04-03 發送簡訊給我 |
^^
試著讓你的sql換行..+ #13#10
不要讓你的語法過長! 例如
If CheckBox2.checked = true then
SqlComd := SqlComd +#13#10+ ' Select ''' + wwDBEdit1.text '''+#13#10 , MatClass, ''' + JsComboBox3.text + ''' , MatName, getdate(), 1 From ELE_Master(nolock) Where MatCode = ''' + JsComboBox3.text + ''' Union ';
引言: Huwk, 我用的是SQL SERVER 2000 Delphi 7 qryRenewFix是BDE(DBTables)下的Query元件.
------
熊的學習 http://huwk.blogspot.com |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
插个花:
public SqlComd: String; //首先我宣告了一個全局變量. ... procedure TdlgComputerEdit.BitBtn1Click(Sender: TObject); begin SqlComd := ''; If CheckBox1.checked = true then SqlComd := SqlComd 'Select " ' wwDBEdit1.text ' " , MatClass, " ' JsComboBox2.text ' " , MatName, getdate(), 1 From ELE_Master(nolock) Where MatCode = " ' JsComboBox2.text ' " Union '; If CheckBox2.checked = true then SqlComd := SqlComd ' Select " ' wwDBEdit1.text ' " , MatClass, " ' JsComboBox3.text ' " , MatName, getdate(), 1 From ELE_Master(nolock) Where MatCode = " ' JsComboBox3.text ' " Union '; If CheckBox3.checked = true then SqlComd := SqlComd ' Select " ' wwDBEdit1.text ' " , MatClass, " ' JsComboBox4.text ' " , MatName, getdate(), " ' Edit1.text ' " From ELE_Master(nolock) Where MatCode = " ' JsComboBox4.text ' " Union '; SqlComd := SqlComd ' Select "' ' WWW ' '" ,''' 'WW' ''' , ''' 'WWWWWW' ''' , ''' 'WWW' ''' , getdate(), 1 From ELE_Master(nolock)'; //加上此句,另这里的WW,WWWWWW,WWW是字段名还是变量?是字段名,写法如下: SqlComd := SqlComd ' Select WWW,WW ,WWWWWW ,WWW, getdate(), 1 From ELE_Master(nolock)';不是的话如上写法 ReNewEP(SqlComd); end; 以上注意" '的标法 procedure TdlgComputerEdit.ReNewEP(ItemId: String); begin with qryRenewFix do begin close;纯粹猜测,如有不对,请见谅 另需>[>>]> ..>[/>>]> <>~~~静心养德~~~> 發表人 - |
Link_Chen
一般會員 發表:25 回覆:22 積分:9 註冊:2004-03-30 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: huwk, 痛苦啊,加了換行也還是那樣. deity, 我的參數在BitBtn1Click得最後透過ReNewEP(SqlComd)給了,而且我也試過在ReNewEP中先用showmessage看了SqlComd的資料是正確的,所以因該不是參數給法的問題. 我想请问Link_Chen兄,您在qryRenewFix 下open之前,showmessage(qryRenewFix.sql.text);得出的值是多少,可以pos上来吗? 也即:~~~静心养德~~~ 發表人 - deity 於 2005/01/25 11:00:42 發表人 - deity 於 2005/01/25 11:04:46procedure TdlgComputerEdit.ReNewEP(ItemId: String); begin with qryRenewFix do begin close; //这里不觉缺点什么的吗? ParamByName('SqlComd').AsString := ItemId; open; showmessage(sql.text);//此处的值是多少,可否ps上来 BrowseData(tblDetail, True); end; end; |
stone0924
一般會員 發表:3 回覆:17 積分:14 註冊:2002-08-13 發送簡訊給我 |
|
Link_Chen
一般會員 發表:25 回覆:22 積分:9 註冊:2004-03-30 發送簡訊給我 |
deity,
showmessage(sql.text);如果加在OPEN後面,目前是看不到值是多少,因為OPEN的是否就出錯了,所以走不到這裏.
我把它加在OPEN之前,得到的信息是:exec ELE_ReNewFix :SqlComd
程式如下:
procedure TdlgComputerEdit.ReNewEP(ItemId: String); begin with qryRenewFix do begin close; //这里不觉缺点什么的吗? ParamByName('SqlComd').AsString := ItemId; showmessage(sql.text); open; BrowseData(tblDetail, True); end; end;stone0924, 我用了你的方法,還是錯.但是錯誤不是亂碼了,是'WWWWWW'附近語法不正確. 但是我如果只符合一個條件,去組合最後的Select 'WWW'...語句(也就是SqlComd最後的值只有兩段Select語句做Union)語法就是對的,而符合兩個條件再去組合最後的Select 'WWW'...語句(也就是SqlComd最後的值有三段Select語句做Union)語法就錯誤,所以我還是覺得是最後抓取SqlComd這個變量時候長度上除了問題. PS,在後台我追蹤到 ParamByName('SqlComd').AsString := ItemId; 這句的時候,ItemId的值還是完整.(3段select語句) |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |