如何更改指点位置的资料 |
答題得分者是:cashxin2002
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
如图:
我要做的是修改密码功能,就是从用户表中查到EDIT1中的用户名,然后将他的密码改为EIDT2中的内容就行了。我不知道是不是用SQL语句,是的话具体如何用?我这么用好象是错误的:
begin ADOQUERY1.Close; ADOQUERY1.SQL.Clear; ADOQUERY1.SQL.Add('update tb_user set pass=:pass where user=:user' ); ADOQUERY1.Parameters.ParamByName('pass').Value :=edit2.text; ADOQUERY1.Parameters.ParamByName('user').Value :=edit1.text; end;
------
我的编程起步于ktop,我将永远支持ktop |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
您好:仅仅按您的意思:就是从用户表中查到EDIT1中的用户名,然后将他的密码改为EIDT2中的内容就行了;您的写法上没什么错误,只是少了一句
begin ADOQUERY1.Close; ADOQUERY1.SQL.Clear; ADOQUERY1.SQL.Add('update tb_user set pass=:pass where user=:user' ); ADOQUERY1.Parameters.ParamByName('pass').Value :=edit2.text; ADOQUERY1.Parameters.ParamByName('user').Value :=edit1.text; ADOQuery1.ExecSQL;//加上此句即可 end;============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ |
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
引言: 您好:仅仅按您的意思:就是从用户表中查到EDIT1中的用户名,然后将他的密码改为EIDT2中的内容就行了;您的写法上没什么错误,只是少了一句deity前辈,经过您的指点加强了我的信心,我就不在代码本身上找错误了,一开始代码运行正常,但内容就是不改。后来我试着在首尾处加了两句,ADOTABLE1.CLOSE,ADOTABLE1.OPEN,然后就成功了。虽然成功了,我还有两个问题请教前辈一下: 1.ADOQuery1.ExecSQL与ADOQuery1.OPEN,有什么区别之处? 2.是不是有ADOTABLE连接到要改的数据表时SQL就是无法改动的,我这样做对不对?begin ADOQUERY1.Close; ADOQUERY1.SQL.Clear; ADOQUERY1.SQL.Add('update tb_user set pass=:pass where user=:user' ); ADOQUERY1.Parameters.ParamByName('pass').Value :=edit2.text; ADOQUERY1.Parameters.ParamByName('user').Value :=edit1.text; ADOQuery1.ExecSQL;//加上此句即可 end;============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
------
我的编程起步于ktop,我将永远支持ktop |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 您在完成SQL更新后﹐使用ADOTable1的Close和Open方法﹐其作用會使ADOTable1元件取得最新狀態的后端資料表內容﹒ 1. ADOQuery的Open方法﹕适用于有資料回傳的SQL語法﹐即當語法下達后﹐后端資料庫會有相符的資料回傳到前端的ADOQuery1﹐如Select語法
ADOQuery的ExecSQL方法﹕适用于無資料回傳的語法﹐即當語法下達后﹐后端資料庫只對相符的資料做對應的處理動作﹐而不會將結果回傳到前端的ADOQuery1﹐如Delete, Insert, Update等語法﹒ 2. 不會﹐不同的資料集元件具有各自不同的使用方法﹐同上述的﹐如果要取得最新的后端資料庫內容﹐在完成異動之后﹐最直接的方法就是將資料集元件Close再Open﹒ =================================
有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗
================================
------
忻晟 |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
补充,
ntjrr您好:
1、摘自电子报中的文章: Open 和 ExecSQL 的差異?
Open :
當你的 SQL 指令是會另數據庫回傳資料時使用,最常用的是 Select, 但也包括 Show Tables, Show Create Table 等等,你使用 Open (或設 Active := true) DataSet 元件會期望有 Cursor 回傳,即是回傳的是空資料也好;但若沒 Cursor 回傳即會出錯。 ExecSQL :
當你的 SQL 指令只是叫數據庫執行一些東西而沒有 Cursor 回傳的 (可回傳 Row Affected / warning 等資訊)。DataSet 不會預備資源給回傳的 Cursor 所以若有 Cursor 回傳也處理不了。這主要是 Insert、Update、Delete 但也包括呼叫數據庫做不同事的函數。 其实您下Update,资料表数据已经有所改变,您可直接打开资料库去看,不过因为没回传值,所以得重新open才能看得到所改变的值。
2、不会,原因cashxin2002兄也有说明,小弟就不重复了~ 有信心做事,就会事半功倍~ <>
============================
为什么经过多年以后,得失的过程如此冷漠
============================
>
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
我所讲的是ADOTable close 是在sql执行前执行,ADOTALBE open是在adoquery.execsql后执行,代码如下:
// ADOTable1.close; ADOQUERY1.Close; ADOQUERY1.SQL.Clear; ADOQUERY1.SQL.Add('update tb_user set pass=:pass where user=:user' ); ADOQUERY1.Parameters.ParamByName('pass').Value :=edit2.text; ADOQUERY1.Parameters.ParamByName('user').Value :=edit1.text; ADOQUery1.ExecSQL; ADOTable1.Open;如果第一行中加上//后,代码运行无错误,但密码就是没改动过来。如果去掉//,执行adotalbe1.close后,密码就能改过来了!不知道原因何在。 注:因为设计时ADOTable是关闭的,所以我在onshow事件中打开了adotable,在onclose事件中关闭了它。 發表人 - ntjrr 於 2005/07/30 09:33:41
------
我的编程起步于ktop,我将永远支持ktop |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |