我是初学者,请教高手一个简单的问题,让大家见笑了! (100分)

  • 主题发起人 主题发起人 daisyyx
  • 开始时间 开始时间
D

daisyyx

Unregistered / Unconfirmed
GUEST, unregistred user!
修改数据库时由于数据量大,需要提出部分数据加以修改,使用TQUERY与TUPDATESQL控件结合,如何完成?

使用TQUERY时,由于返回结果是只读的,只有使用TUPDATESQL,该控件中的ModifySQL属性
中需要输入参数,不能直接在TDBGRID中修改数据!(我做的小程序是通过BDE与ORACLE数据库连接)

我想在TDBGRID(数据集为TQUERY)中直接修改数据,我该怎么做?谢谢!
 
Query1.RequestLive := true;
 
使用Query1.RequestLive := true; 修改本地数据库好使。
远程数据库不行!我已经试过了。
 
with query1 do
begin
close;
sql.clear;
sql.add('update table111 set NNAME=:NNAME,PASSWORD=:PASSWORD,PART=:PART,TEL=:TEL where NAME=:OLD_NAME');
ParamByName('NNAME').AsString:=user_nname.Text;
ParamByName('PASSWORD').AsString:=user_pass2.Text;
ParamByName('PART').AsString:=user_part.Text;
ParamByName('TEL').Asstring:=user_tel.Text;
ParamByName('OLD_NAME').asstring:=usernow.name;
database11.StartTransaction;// 启动事务更新后马上提交,可以实现
execsql;
database11.Commit; //
end;
-------------------------
上面是我刚做过的程序的部分!可以修改表!
 
为什么不做个存储过程呢?
 
to loverlv:(我也关注同样的问题)
存储过程是怎么样使用?
 
正确设置数据库连接,采用BDE连接,ODBC可能会有问题,在SQL中的表名和字段名用大写
表示,设置RequestLive :=true;,CachedUpdates :=true;
应该在TDBGRID(数据集为TQUERY)中可以直接修改数据了
也可以通过下面的操作来完成数据更新!

procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.CachedUpdates :=true;
Query1.RequestLive :=true;
Query1.First ;
Query1.Edit ;
Query1.FieldByName('CITY_CODE').AsString :='333';
Query1.ApplyUpdates ;
Query1.CommitUpdates ;
end;
:)
祝顺利!
 
Thank you very much!
 
用 TADOStoreProc控件啊!
对了,建议你在win平台上作这样的软件,最好用ADO,比较强劲。我是非常有感觉的。

尤其是在分发配置的时候,用ado就只一个.txt文件就搞定。:)来一个吧!呵呵
 
to loverlv:
可否在存储过程中返回数据?
 
可以!我学的不好,不过我倒可以把我些的这些小菜给你看看,参考一下吧,我是用的MSSQL
alter proc DeleteInYarn--这是一个删除记录,并同时修改库存表的一个代码
--create proc DeleteInYarn
@ID int
as
declare @Factory nchar(8),
@YarnName nchar(30),
@LotNo nchar(20),
@Box int,
@Weight numeric(12, 4)

select @Factory = Factory,
@YarnName = YarnName,
@LotNo = LotNo,
@Box = Box,
@Weight = Weight
from InYarn
where No = @ID

--开始修改事务
begin transaction

update StoreYarn
set Box = Box - @Box,
Weight = Weight - @Weight
where Factory = @Factory
and YarnName = @YarnName
and LotNo = @LotNO

if @@error <> 0
begin
rollback tran
return 1 --修改库存失败
end

delete from InYarn where No = @ID

if @@error <> 0
begin
rollback tran
return 2 --删除记录失败
end

commit tran

return 0
go

--下面的这个主要是得到当天的出库记录,也可以得到任何一天的出库记录,你只要传递参数就可以了。
--alter procedure GetTodayOutYarn
create procedure GetTodayOutYarn
@FromDate smalldatetime, --
@RowCount int output
as
select * from OutYarn
where OutDate >= @FromDate

set @RowCount = @@RowCount

return 0
go

要是有问题,发我mail吧,我这里慢。lvfugao@hotmail.com


 
后退
顶部