在QUERY中用SQL实现查询功能,如何将查询出的结果进行修改(100分)

  • 主题发起人 主题发起人 tullip
  • 开始时间 开始时间
T

tullip

Unregistered / Unconfirmed
GUEST, unregistred user!
在QUERY中用SQL实现查询功能,如何将查询出的结果进行修改


1。在FROM中创建DataSource1、Query1、DBGrid1、Edit1、Edit2、Button1
2。DataSource1与Query1相连、DBGrid1与DataSource1相连。
3。Query1中的SQL的属性为:select * from claim_data
4。在Button1按钮中输入如下代码:
begin
query1.Close;{首先关闭query1}
query1.SQL.Clear;{置空SQL语句}
query1.SQL.Add('select *');
query1.SQL.Add('from claim_data');
query1.SQL.Add('where claim_data.部门=:p1');
query1.ParamByName('p1').AsString:=edit1.Text;
query1.Prepare;{准备展开query1语句}
query1.Open;{展开}
{将查询出的字段显示在EDIT2中}
edit2.Text:=query1.fieldbyname('部门').asstring;
end;
5。在EDIT2中
事件写在onexit
procedure Tform1.Edit2exit(Sender: TObject);
begin
if ls<>edit2.text then //ls为全局变量
begin
query1.requestlive:=true;
query1.active:=true;
if query1.Locate('部门',ls,[]) then
begin
query1.Active:=true;
query1.Edit;
query1.FieldByName('部门').AsString:=edit2.text;
query1.Post;
end;
end;
end;
我主要想用Button1的按妞实现查询,然后在Button2按妞可以将查询出的数据写回数据库
中。我想问问,我这样写对不对,为什么我这样写了却不能修改。如果您有更好的方法请
告诉我,谢谢,请您将原代码付上,谢谢。在一次感谢你们。
 
procedure Tform1.Edit2exit(Sender: TObject);
begin
if ls<>edit2.text then //ls为全局变量
begin
query1.requestlive:=true;
query1.active:=true;
if query1.Locate('部门',ls,[]) then
begin
query1.Active:=true;
query1.Edit;
query1.FieldByName('部门').AsString:=edit2.text;
query1.Post;
query1.ApplyUpdates;
end;
end;
end;
 
将query1.post换成query1.applyuppdate
 
我按照上面的方法做了,可是他只能在DBGrid1中直接修改呀,我怎么才能用EDIT2修改呢
那么在Button2中我应该写什么呢
 
不要用Tedit,用TDBedit就行。这样不用你写代码,只指定DataField和DateSource 就行。
 
如果我要是用tedit难到就实现不了吗,我只是想学一学,
 
靠,有没有高手呀,我都急坏了
 
用两个query,一个查一个改就可以了。
 
jie_zou你好:
你能不能给我些一下详细的代码。谢谢
 
5。在EDIT2中
事件写在onexit
procedure Tform1.Edit2exit(Sender: TObject);
begin
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('UPDATE claim_data SET 部门=:p2 where 部门=:p1 ');
query1.ParamByName('p1').AsString:=edit1.Text;
query1.ParamByName('p2').AsString:=edit2.Text;
query1.Prepare;
query1.ExecSQL;
end;
此段代码并不完善,没有异常处理,你自己添上.
 
str:='update claim_data set zxrxm=:p2 WHERE claim_data.部门=:p1';
query2.Close;{首先关闭query1}
query2.SQL.Clear;{置空SQL语句}
query2.SQL.Add(str);
query1.ParamByName('p1').AsString:=edit1.Text; //旧的
query1.ParamByName('p2').AsString:=edit2.Text; //新的
query1.ExecSQL;{}
 
同意楼上两位的!
 
tullip:
現在還用bde,用ado吧,方便實用,簡單,

if ls<>edit2.text then //ls为全局变量
begin
if adoquery1.Locate('部门',ls,[]) then
begin
adoquery1.Edit;
adoquery1.FieldByName('部门').AsString:=edit2.text;
adoquery1.Post;
end;
end;
end;
這樣就可以了.
 
靠,我看不懂,那为高手给写详细点好吗?
 
大哥,请问ADO是个什么东西,能详细的告诉我吗?谢谢,
 
微軟的連接數據庫的接口,全部都用它了,
它有 一組ado 控件,用法和bde差不多,只是更簡單了,看下就知了,
我們寫MrP都用它
 
大哥,我的意思是怎么掉用ADO呀,谢谢
 
ado不是在vcl上面嗎?直接掉就好啦
 
靠,你不早说
 
tullip这人太不礼貌了
 
后退
顶部