請教一個EXECL轉入MSSQL的問題 |
答題得分者是:Coffee
|
Chengyan
一般會員 發表:5 回覆:8 積分:2 註冊:2007-03-23 發送簡訊給我 |
小弟正在寫一個小程式,它的方式是將當EXECL欄位相等於MSSQL欄位(例如:ID)
EXECL的對應欄位【更新】至MSSQL對應的欄位(例如:ID 相同的話 ,將MSSQL的選取欄位資料更新成EXECL 選取的欄位資料) 我先用兩個adoConnection分別連到EXECL與MSSQL 然後用兩個Query把所有欄位讀到四個combobox裡面(方便我輸入欄位,一個Query為EXECL,一個Query為MSSQL) 在新增四個Query,分別對應四個combobox.text,我假設四個Query為DB_ID,DB_Input,EX_ID,EX_Output 最後再增加一個Query來UPDATE資料。 問題在於,我最後一個Query 的 SQL的指令為 <textarea class="delphi" rows="5" cols="60" name="code">upQuery1.SQL.Text:='update ' db_TAble.Text ' set ' DB_Input.Fields[0].FieldName ' = ' EX_Output.Fields[0].AsString ' where ' DB_ID.Fields[0].FieldName ' = ' EX_ID.Fields[0].AsString ''; </textarea><br /> 失敗,只能更新一筆的資料,我想用QUERY.NEXT的方式來做下一筆,但不知道該如何著手 所以請問一下各位先輩,如果要做成我想要的功能,我該如何做? 奕或是有更好的方式可以取代我的笨方法 |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
Chengyan
一般會員 發表:5 回覆:8 積分:2 註冊:2007-03-23 發送簡訊給我 |
hagar大哥你好
這樣的做法是不會產生錯誤,只是他轉的永遠是EXECL檔裡的第一筆資料,也更新成功了 因為我不知道該如何將QUERY指針如何正確的往下一筆走,我有試著加上一筆程式 <textarea class="delphi" rows="10" cols="60" name="code">while upQuery1.eof do begin upQuery1.SQL.Text:=' update ' db_TAble.Text ' set ' DB_Input.Fields[0].FieldName '=' EX_Output.Fields[0].AsString ' where ' DB_ID.Fields[0].FieldName '= cast(' EX_ID.Fields[0].AsString ' AS nvarchar(10))'; upQuery1.next upQuery1.ExecSQL end; </textarea> 不過他會出現錯誤 upQuery1 : cannot perform the operation on close dataset 因為我不能在upQuery1執行While之前open它 不然它的SQL指令會變成我OPEN的那一個 |
Coffee
版主 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
在Next之前請
請EXEC你的QUERY <textarea cols="60" rows="10" class="delphi" name="code"> with aQuery do begin SetCommand('Your Custom Query'); OpenQuery; first; while not eof do begin //export function next; end; end; </textarea>
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。 為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。 在引述到我的文時自然會儘量替各位想辦法,謝謝大家! |
Chengyan
一般會員 發表:5 回覆:8 積分:2 註冊:2007-03-23 發送簡訊給我 |
謝謝Coffee大哥
你給的方法真是讓我獲益良多 我照您的方式下去實做了一下,我是這樣做的 <textarea class="delphi" rows="10" cols="60" name="code"> with upQuery1 do begin SQL.Text:= '同上方所設置的'; Open ; First; while not Eof do begin ExecSQL; next; end; end; </textarea> 不過會出現一個錯誤,commandText does not return a result set 這看起來是我的COMMANDTEXT設錯,但我在QUERY中找不到這個選項的設置= = 看來是小弟太笨了,不知道COFFEE大哥是否可以在指點一下迷津呢 (PS..我用的是DELPHI 7.0 資料來源為 MSSQL 與 OFFICE XP--EXECL) |
Coffee
版主 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
如果你要直接Update,請用ADOCommand,ADOQuery只能用在把資料抓回來再udpate,
ADOCommand要怎麼用請參考help 不然就是把你要的資料撈回來,再逐筆的update,怎樣在local裡面指定特某個key的record作update, 請翻help跟書...
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。 為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。 在引述到我的文時自然會儘量替各位想辦法,謝謝大家! |
Chengyan
一般會員 發表:5 回覆:8 積分:2 註冊:2007-03-23 發送簡訊給我 |
謝謝Coffee大哥
我完成了更新了,原來是我只要用ADOcommand來取代SQL.TEXT就可以了 原本我就是要做及時更新的,我修正如下: <textarea class="delphi" rows="10" cols="60" name="code"> while not E_ID.eof do begin Command1.CommandText := 'UPDATE 設置'; Command1.CommandType := cmdText; Command1.Execute; E_ID.Next; E_INPUT.Next end; </textarea> 雖然程式功力很拙劣,不過還是希望可以幫助到其他人,謝謝回應的大哥們 謝謝您們的指教唷 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |