DeBug使用Add Watch At Cursor疑問 |
答題得分者是:P.D.
|
ahentseng
一般會員 發表:6 回覆:9 積分:13 註冊:2008-03-19 發送簡訊給我 |
各位先進大家好:
第一次發問..若有不足之處..請多包涵(接觸Delphi只有短短的四個月..正在努力學習中) 小弟做了一個簡單的程式碼如下...基本上應可執行(只是缺少了DB...請見諒) 功能為來源 => 目的 複製動作(Test1=>Test2) 問題:當我在程式執行時期跑DeBug 開啟 Watch List 看目的端欄位値(test001,test002,test003)時 除了只能一個一個打之外來查看它目前的值之外..如下 tqGoal.ParamByName('test001').AsString tqGoal.ParamByName('test002').AsString tqGoal.ParamByName('test003').AsString 可以有其他的語法或其他方法可以一次得知所有欄位的值嗎 不知到這樣的問法是否夠明確呢? 因為有問過公司的前輩...他說只能這樣一個一個打 我也知道大部分只會集中看其中幾個重要的欄位的值 不過還是想知道是否有此可能性 所以才來請問各位先進是否有碰過這樣的問題呢? 在此先謝謝各位先進...其實我在此論壇獲益不少(跟我學Delphi 的時間差不了多少)... 謝謝各位...各位辛苦了..各位是最棒的 PS.我這樣應該不會太狗腿吧!! [code delphi] Procedure SourceDataToGoalData; Var tqSourceData,tqGoalData: TQuery; Begin tqSourceData := TQuery.Create(nil); tqGoalData := TQuery.Create(nil); tqSourceData.DatabaseName := 'TestDB'; tqGoalData.DatabaseName := 'TestDB'; try With tqSourceData do Begin Close; SQL.Clear; SQL.Text := 'Select test001,test002,test003 from Test1'; open; End; while not tqSourceData.Eof do begin With tqGoalData do Begin Close; SQL.Clear; SQL.Text := 'Insert into test2(test001,test002,test003) ' 'values(:test001,:test002,:test003)'; ParamByName('test001').asString := tqSourceData.FieldByName('Test001').asString; ParamByName('test002').asString := tqSourceData.FieldByName('Test002').asString; ParamByName('test003').asString := tqSourceData.FieldByName('Test003').asString; ExecSQL; End; end; finally tqSourceData.Free; tqGoalData.Free; tqSourceData := nil; tqGoalData := nil; end; End; [/code] |
cobraliu
中階會員 發表:15 回覆:75 積分:83 註冊:2007-11-22 發送簡訊給我 |
如果是很單純的將Test1 複製至Test2,那下列方法會不會比較簡單...
不過...不知你用的Database是什麼,下列是Oracle可以9i的版本...也許你是別的Database那可能不適用..XD Sql.Clear; SQL.Text := 'Insert into test2(test001,test002,test003)(select test001,test002,test003 From Test1 '; exceSQL; 如果Test001,Test002,Test003是Key那你就要多判定有沒有Key重復的問題...
------
初學、初學、學了很久...還是在初學階段..Orz |
ahentseng
一般會員 發表:6 回覆:9 積分:13 註冊:2008-03-19 發送簡訊給我 |
不好意思喔..我想你並未了解我的問題
我的問題是該如何使用DeBug的Watch List 來查看同一筆資料(只要一個語法就可看到所有欄位的值) 而不是欄位要一個一個打來看他的值 ===================引 用 cobraliu 文 章=================== 如果是很單純的將Test1 複製至Test2,那下列方法會不會比較簡單... 不過...不知你用的Database是什麼,下列是Oracle可以9i的版本...也許你是別的Database那可能不適用..XD Sql.Clear; SQL.Text := 'Insert into test2(test001,test002,test003)(select test001,test002,test003 From Test1 '; exceSQL; 如果Test001,Test002,Test003是Key那你就要多判定有沒有Key重複的問題... |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
可以的
宣告一個陣列 private DGfd : array[0..2] of string; 在你的程式中加入以下重點, .... Begin DGfd[0]:= 'test01'; DGfd[1]:= 'test02'; DGfd[2]:= 'test03'; for i:= low(DGfd) to high(DGfd) do begin .... ParamByName(DGfd[i]).asString := tqSourceData.FieldByName(DGfd[i]).asString; next; ... 然後再watch list 去看迴圈的值, 雖然我不知道你的目的是什麼?
編輯記錄
P.D. 重新編輯於 2008-03-19 23:57:35, 註解 無‧
|
ahentseng
一般會員 發表:6 回覆:9 積分:13 註冊:2008-03-19 發送簡訊給我 |
除了使用版大所說的迴圈使用之外...是否Watch List 有其他的語法可以得知欄位的值 也就是說我想要看到的結果是 (欄位名稱1,欄位名稱2)..(欄位值1,欄位值2) ==>可以在同一行看到 名稱及結果 不知道這樣的想法是否可實現呢? ===================引 用 P.D. 文 章=================== 可以的 宣告一個陣列 private DGfd : array[0..2] of string; 在你的程式中加入以下重點, .... Begin DGfd[0]:= 'test01'; DGfd[1]:= 'test02'; DGfd[2]:= 'test03'; for i:= low(DGfd) to high(DGfd) do begin .... ParamByName(DGfd[i]).asString := tqSourceData.FieldByName(DGfd[i]).asString; next; ... 然後再watch list 去看迴圈的值、雖然我不知道你的目的是什麼?
編輯記錄
ahentseng 重新編輯於 2008-03-20 09:09:27, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
1.ParamByName(DGfd[i]).asString := tqSourceData.FieldByName(DGfd[i]).asString;
型態不一致, 可以嘗試用, 不過我沒有使用過 ParamByName(DGfd[i]).asValiant := tqSourceData.FieldByName(DGfd[i]).asValiant 然而在 Delphi中, 左邊使用 asString , 即使原值為 Interger 也是可以被承認的, 唯一的問題是如果右邊的 asString轉換有問題, 會發生當出的現象 2.假如我在Watch List 加入一個tqGoalData.Text 得到的值會是 由於我不知道你整個程式前因後果, 這個問題無法解答, 基本上我們也不可能有那麼多時間可以幫你測出所有的問題 所以, 天助不如人助, 人助不如自助, 自己多run個數百次, 應該可以找出一些端倪的 就像我在寫程式, 遇到一個問題找不到原因, 我可能簡化程式來查, 可能在任何有疑問的點設中斷點或showmessage()來看數據或用Tracer方式來查, 很多方法, 不單只是利用 Watch List , 因為有時候你的程式一連串的執行, 或許你看到的Watch List 是上一個的, 或者你要的數值老早都跑掉, 所以我幾乎不用Watch List 來看數據, 而是自己用ShowMessage來顯示 ===================引 用 ahentseng 文 章===================
除了使用版大所說的迴圈使用之外...是否Watch List 有其他的語法可以得知欄位的值 也就是說我想要看到的結果是 (欄位名稱1,欄位名稱2)..(欄位值1,欄位值2) ==>可以在同一行看到 名稱及結果 不知道這樣的想法是否可實現呢? |
ahentseng
一般會員 發表:6 回覆:9 積分:13 註冊:2008-03-19 發送簡訊給我 |
謝謝版大提醒...我會努力學習的!!
===================引 用 P.D. 文 章=================== 1.ParamByName(DGfd[i]).asString := tqSourceData.FieldByName(DGfd[i]).asString; 型態不一致、可以嘗試用、不過我沒有使用過 ParamByName(DGfd[i]).asValiant := tqSourceData.FieldByName(DGfd[i]).asValiant 然而在 Delphi中、左邊使用 asString 、即使原值為 Interger 也是可以被承認的、唯一的問題是如果右邊的 asString轉換有問題, 會發生當出的現象 2.假如我在Watch List 加入一個tqGoalData.Text 得到的值會是 由於我不知道你整個程式前因後果、這個問題無法解答、基本上我們也不可能有那麼多時間可以幫你測出所有的問題 所以、天助不如人助、人助不如自助、自己多run個數百次、應該可以找出一些端倪的 就像我在寫程式、遇到一個問題找不到原因、我可能簡化程式來查、可能在任何有疑問的點設中斷點或showmessage()來看資料或用Tracer方式來查、很多方法、不單只是利用 Watch List 、因為有時候你的程式一連串的執行、或許你看到的Watch List 是上一個的、或者你要的數值老早都跑掉、所以我幾乎不用Watch List 來看資料、而是自己用ShowMessage來顯示 ===================引 用 ahentseng 文 章===================
除了使用版大所說的迴圈使用之外...是否Watch List 有其他的語法可以得知欄位的值 也就是說我想要看到的結果是 (欄位名稱1,欄位名稱2)..(欄位值1,欄位值2) ==>可以在同一行看到 名稱及結果 不知道這樣的想法是否可實現呢? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |