線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1290
推到 Plurk!
推到 Facebook!

如何循環下去(數據庫是Access)

缺席
books
一般會員


發表:9
回覆:27
積分:7
註冊:2006-10-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-15 20:05:37 IP:220.198.xxx.xxx 未訂閱
下面這個按鈕的職責是對listbox中的選中的記錄數進行數據庫的批量更新,但是只更新一條,不能循環更新下去(或不能批量更新),請高手指點一下:procedure TF_many_yd.BT_many_addClick(Sender: TObject);
var
i:Integer;
s1:string;
begin
if (trim(edit11.text)='') or (trim(MaskEdit2.text)='') then
begin
showmessage('Sorry~! 沒有異動單號或異動時間為空,請產生異動單號和輸入異動時間!');
exit;
end
else
if listbox1.ItemIndex=-1 then exit;
for i := ListBox1.Items.Count - 1 downto 0 do
if listbox1.Selected[i] then
begin
s1:=listbox1.items.Strings[i];
with ADOQuery3 do
begin
close;
sql.Clear;
sql.Add(' update gdzc_1 ');
sql.Add(' set yd_no =:AA,yd_date =:BB ');
sql.Add('where el_no like :CC; ');
ADOQuery3.parameters.ParamByName('AA').value:=trim(edit11.text);
ADOQuery3.parameters.ParamByName('BB').value:=trim(MaskEdit2.text);
ADOQuery3.parameters.ParamByName('CC').value:=trim(s1);
ADOQuery3.Active:=True;
ADOQuery3.execsql;
end;

end;
application.messagebox('批量異動成功!','提示',0 64);
end;
end.
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-17 08:59:09 IP:59.124.xxx.xxx 未訂閱
把那兩行刪除試試..

===================引 用 文 章===================

下面這個按鈕的職責是對listbox中的選中的記錄數進行數據庫的批量更新,但是只更新一條,不能循環更新下去(或不能批量更新),請高手指點一下:procedure TF_many_yd.BT_many_addClick(Sender: TObject);
var
? i:Integer;
? s1:string;
begin
?if? (trim(edit11.text)='') or (trim(MaskEdit2.text)='') then
? begin
??? showmessage('Sorry~! 沒有異動單號或異動時間為空,請產生異動單號和輸入異動時間!');
??? exit;
? end
else
?if listbox1.ItemIndex=-1 then exit;
?? for i := ListBox1.Items.Count - 1 downto 0 do
?? if listbox1.Selected[i] then
?? begin
???? s1:=listbox1.items.Strings[i];
??? with ADOQuery3 do
?????? begin
????????????? close;
????????????? sql.Clear;
????????????? sql.Add(' update gdzc_1? ');
????????????? sql.Add(' set yd_no =:AA,yd_date =:BB ');
????????????? sql.Add('where el_no like :CC; ');
????????????? ADOQuery3.parameters.ParamByName('AA').value:=trim(edit11.text);
????????????? ADOQuery3.parameters.ParamByName('BB').value:=trim(MaskEdit2.text);
????????????? ADOQuery3.parameters.ParamByName('CC').value:=trim(s1);
????????????? ADOQuery3.Active:=True;
????????????? ADOQuery3.execsql;
?????????? end;

????????? end;
???? application.messagebox('批量異動成功!','提示',0 64);
?? end;
end.
books
一般會員


發表:9
回覆:27
積分:7
註冊:2006-10-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-17 15:13:25 IP:220.198.xxx.xxx 未訂閱
前輩,你的方法解決了這個問題,先行謝謝,但是我想詢問一下為什麼要刪除兩行呢?
另外上面的那段代碼中可否寫入如下代碼:(因為有用戶提到更新完後,請不要讓我再輸入什麼查詢條件,直接更新完後就顯示結果,所以我想加入如下代碼來實現,但是在where語句就報錯即點完更新按鈕,顯示批量更新後就報DD有錯)
// with ADOQuery4 do
// begin
// close;
// sql.Clear;
// sql.Add('select yd_no as 異動單號,yd_date as 异動日期,el_no as 資產編號,dep_name as 部門,ymd as 取得日期,');
// sql.Add('el_fin as 帳列類別,el_name as 品名,el_unit as 單位,el_qty as 數量,where as 放置地點,');
// sql.Add('bg_user as 保管人,zl_user as 責任人,memo as 備注, old_dep_name as 申請單位,old_where as 原放置地點 from gdzc_1');
// sql.Add('where yd_no like :DD ');
// sql.Add('order by el_no');
// ADOQuery4.parameters.ParamByName('DD').value:=trim(edit11.text);
// ADOQuery4.Active:=True;
// ADOQuery4.open;
// end;

hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-17 17:36:00 IP:59.124.xxx.xxx 未訂閱
1.在 TADOQuery 中, 如果 SQL 是 Select 開頭的用 Open, 若是 Insert/Delete/Update 的才用 ExecSQL
2.會不會是你 SQL 中的 where 跟 gdzc_1 之間沒有空白造成的錯誤?
books
一般會員


發表:9
回覆:27
積分:7
註冊:2006-10-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-17 19:12:51 IP:220.198.xxx.xxx 未訂閱
1.在 TADOQuery 中, 如果 SQL 是 Select 開頭的用 Open, 若是 Insert/Delete/Update 的才用 ExecSQL 這點我知道,但是close和true在Select才會用到嗎?還是在Insert/Delete/Update動作中不必用呢? ??? with ADOQuery3 do ?????? begin ????????????? close; ????????????? sql.Clear; ????????????? sql.Add(' update gdzc_1? '); ????????????? sql.Add(' set yd_no =:AA,yd_date =:BB '); ????????????? sql.Add('where el_no like :CC; '); ????????????? ADOQuery3.parameters.ParamByName('AA').value:=trim(edit11.text); ????????????? ADOQuery3.parameters.ParamByName('BB').value:=trim(MaskEdit2.text); ????????????? ADOQuery3.parameters.ParamByName('CC').value:=trim(s1); ????????????? ADOQuery3.Active:=True; ????????????? ADOQuery3.execsql; ?????????? end; 2.會不會是你 SQL 中的 where 跟 gdzc_1 之間沒有空白造成的錯誤? 好像不因為空白造成的,我加了空白,還是報錯,看樣子,是不是因為多個ADOQuery都用到gdzc_1表才會產生這種錯誤呢?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-17 19:46:35 IP:59.124.xxx.xxx 未訂閱
1.是的, Insert/Delete/Update 的 SQL 是用不到 Close 或 Active 
2.錯誤訊息是什麼?你可以將組合後的 SQL 顯示在一個 Memo 中, 然後貼在 MS Access 中 run, 比較清楚知道錯誤在哪.
books
一般會員


發表:9
回覆:27
積分:7
註冊:2006-10-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-18 08:28:12 IP:220.198.xxx.xxx 未訂閱
前輩,問題解決了,先行謝謝了,問題出在兩個地方,一個你講的where與gdzc_1之間沒有空格,另一個出在多了一個close;也就是前面更新剛做,一個close又把它們斷開,所以更新也就沒做,查詢結果出來的結果還是以前的,這樣形成前後不連貫。
系統時間:2024-05-19 20:19:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!