全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2763
推到 Plurk!
推到 Facebook!

資料更新如何用 SQL 指令做到

答題得分者是:christie
ThePresent
一般會員


發表:1
回覆:4
積分:6
註冊:2008-01-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-09 11:34:07 IP:58.60.xxx.xxx 訂閱
資料更新如何用 SQL 指令做到
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE 訂單 SET 序號=RecNo');
ADOQuery1.ExecSQL;
SQL 指令的 UPDATE 資料表 SET 欄位名=設定值
其設定值能否抓取資料指標呢?(RecNo)
esp_pzj
初階會員


發表:32
回覆:70
積分:40
註冊:2007-02-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-01-09 14:11:04 IP:59.120.xxx.xxx 訂閱
因該是可以使用 資料指標 來做更新的值
是否可以請你把問題 再說明清楚,或放上程式碼?




===================引 用 ThePresent 文 章===================
資料更新如何用 SQL 指令做到
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE 訂單 SET 序號=RecNo');
ADOQuery1.ExecSQL;
SQL 指令的 UPDATE 資料表 SET 欄位名=設定值
其設定值能否抓取資料指標呢?(RecNo)
------
學藝不精 謝多多指教
ThePresent
一般會員


發表:1
回覆:4
積分:6
註冊:2008-01-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-01-09 14:28:25 IP:58.60.xxx.xxx 訂閱
資料更新如何用 SQL 指令做到
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE 訂單 SET 序號=RecNo');
ADOQuery1.ExecSQL;
SQL 指令的 UPDATE 資料表 SET 欄位名=設定值
其設定值能否抓取資料指標呢?(RecNo)

-------------------------------

想要做的功能如下

ADOQuery1.FIRST
WHILE NOT(訂單.EOF) DO
BEGIN
ADOQuery1.EDIT;
ADOQuery1.序號.VALUE=ADOQuery1.RECNO;
ADOQuery1.POST;
ADOQuery1.NEXT;
END;

因為操作時有刪除訂單的動作
我想做一個按鈕可以讓序號依資料指標來重整序號
但是當資料量變大時
處理時間就會變長

不知是否有什麼方法可以解決呢?
因為看到書上有提到 SQL 指令
才會想到是否用 SQL 指令就能達到我想要的功能

謝謝關心與回覆的大家們
編輯記錄
ThePresent 重新編輯於 2008-01-09 14:30:39, 註解 無‧
borland_delphi70
中階會員


發表:8
回覆:50
積分:51
註冊:2002-12-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-01-09 18:26:31 IP:202.132.xxx.xxx 訂閱
長官:

tQuery.RecNo 指的是資料自資料取回後,在tQuery中的序號而並非在資料庫中之序號,所以您這樣做會發生錯誤,因為雖然SQL語法不同,但第一筆資料的 RecNo都是1。

所以 Sql Server 中可以宣告一個 Field 為 [DataIndex] [int] IDENTITY (1, 1) NOT NULL,如此才能得到唯一的序號。
yubad2000
中階會員


發表:0
回覆:44
積分:78
註冊:2007-09-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-01-10 01:28:52 IP:66.171.xxx.xxx 未訂閱
If you are using Oracle database, you can use the RecID field which is given by oracle system as defaul key of each table.
Therefore, the SQL command that you have to write in ADOQuery must select this key field, should look like
"select RecID, oreder_id, ..... from ordertable". As I remember, "RecID" is a keywork which used to obtain this defaul key value.
Then, you can use this key value to update a record.
But, you can not update the value of this key because it was assigned by Oracle database.

===================引 用 ThePresent 文 章===================
資料更新如何用 SQL 指令做到
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE 訂單 SET 序號=RecNo');
ADOQuery1.ExecSQL;
SQL 指令的 UPDATE 資料表 SET 欄位名=設定值
其設定值能否抓取資料指標呢?(RecNo)

-------------------------------

想要做的功能如下

ADOQuery1.FIRST
WHILE NOT(訂單.EOF) DO
BEGIN
ADOQuery1.EDIT;
ADOQuery1.序號.VALUE=ADOQuery1.RECNO;
ADOQuery1.POST;
ADOQuery1.NEXT;
END;

因為操作時有刪除訂單的動作
我想做一個按鈕可以讓序號依資料指標來重整序號
但是當資料量變大時
處理時間就會變長

不知是否有什麼方法可以解決呢?
因為看到書上有提到 SQL 指令
才會想到是否用 SQL 指令就能達到我想要的功能

謝謝關心與回覆的大家們
------
===波士頓夜未眠===
What a wonderful world!!
Jazz up the world with jazz!!
==================

When I am not programming...
you can find me here:
http://www.holy-war.de/EN/World3/bin/?advertiser=63190
ThePresent
一般會員


發表:1
回覆:4
積分:6
註冊:2008-01-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-01-10 10:04:58 IP:58.60.xxx.xxx 訂閱

===================引 用 borland_delphi70 文 章===================
長官:

tQuery.RecNo 指的是資料自資料取回後,在tQuery中的序號而並非在資料庫中之序號,所以您這樣做會發生錯誤,因為雖然SQL語法不同,但第一筆資料的 RecNo都是1。

所以 Sql Server 中可以宣告一個 Field 為 [DataIndex] [int] IDENTITY (1, 1) NOT NULL,如此才能得到唯一的序號。


^^

客戶那邊我沒有裝 SQL Server 耶...
使用 Delphi 開發時, 因為版權與 $ 的關係, 我只是用 ADOQuery 配合 Access 的資料庫 .mdb
利用 ADOQuery 可下達 SQL 指令的方法來存取 Access 資料庫
所以, 現在給他有那麼一點頭疼

看看是否有高手中的高高手可以幫幫我想想辦法
不過, 還是謝謝你的回應
yubad2000
中階會員


發表:0
回覆:44
積分:78
註冊:2007-09-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-01-11 13:06:52 IP:66.171.xxx.xxx 未訂閱
Since you are using Access, you can add one field into the table with AutoNum type and make it a key.
This is one way to sovle the problem of lacking a key field in the original table.

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

===================引 用 borland_delphi70 文 章===================
長官:

tQuery.RecNo 指的是資料自資料取回後,在tQuery中的序號而並非在資料庫中之序號,所以您這樣做會發生錯誤,因為雖然SQL語法不同,但第一筆資料的 RecNo都是1。

所以 Sql Server 中可以宣告一個 Field 為 [DataIndex] [int] IDENTITY (1, 1) NOT NULL,如此才能得到唯一的序號。


^^

客戶那邊我沒有裝 SQL Server 耶...
使用 Delphi 開發時, 因為版權與 $ 的關係, 我只是用 ADOQuery 配合 Access 的資料庫 .mdb
利用 ADOQuery 可下達 SQL 指令的方法來存取 Access 資料庫
所以, 現在給他有那麼一點頭疼

看看是否有高手中的高高手可以幫幫我想想辦法
不過, 還是謝謝你的回應

------
===波士頓夜未眠===
What a wonderful world!!
Jazz up the world with jazz!!
==================

When I am not programming...
you can find me here:
http://www.holy-war.de/EN/World3/bin/?advertiser=63190
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-01-11 14:10:03 IP:203.73.xxx.xxx 未訂閱
方法一:
在ACCESS MDB設定該表的欄位為AutoNum type(自動編號)
方法二:
ADOQuery1 New Field "RECNO" (FieldKind = fkCalculated)

VAR I:INTEGER;
procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet);
begin
INC(I);
ADOQuery1['RECNO']:=I;
end;
procedure TForm1.ADOQuery1BeforeOpen(DataSet: TDataSet);
begin
I:=0;//初始化
end;
------
What do we live for if not to make life less difficult for each other?
ThePresent
一般會員


發表:1
回覆:4
積分:6
註冊:2008-01-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-01-11 18:04:01 IP:61.141.xxx.xxx 訂閱

===================引 用 christie 文 章===================
方法一:
在ACCESS MDB設定該表的欄位為AutoNum type(自動編號)
方法二:
ADOQuery1 New Field "RECNO" (FieldKind = fkCalculated)

VAR I:INTEGER;
procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet);
begin
INC(I);
ADOQuery1['RECNO']:=I;
end;
procedure TForm1.ADOQuery1BeforeOpen(DataSet: TDataSet);
begin
I:=0;//初始化
end;

謝謝大大無私的解惑... ^^
系統時間:2024-05-13 10:53:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!