学习一下各位老大怎么样处理插入或修改数据的,我感觉我的方法效率太低。(0分)

  • 主题发起人 主题发起人 w8u
  • 开始时间 开始时间
W

w8u

Unregistered / Unconfirmed
GUEST, unregistred user!
学习一下各位老大怎么样处理插入或修改数据的,我感觉我的方法效率太低。

一直以来,我们插入和修改数据都是以这种方式的:(以单表为例)
一个窗体上排放置几个按钮,如“增加”,“修改”,“删除”,“查询”,
下排放置一个DBGrid,显示当前表中的数据。如下:

╔══════════════════════════════════╗
║ 增加 修改 删除 查询                      ║
╟──────────────────────────────────╢
║                                  ║
║ DBGrid                           ║
║                                  ║
║                                  ║
║                                  ║
║                                  ║
║                                  ║
╚══════════════════════════════════╝

当用户单击“增加”时,新弹出一个窗体,在该窗体上有:
  数据集组件TTable或TQuery,连接到具体的表上。
  Datasource组件。
  各种数据感知组件如TDBEdit,等,
  “保存”按钮。

在Form.OnShow事件中将TDataSet打开,根据增加或修改状态(由参数传入),
设置数据集为增加或修改模式。

然后保存,处理各种细节。通过TDataset.post方式保存。

如果用户是单击“修改”,则同样弹出和“增加”时一样的窗口,只是设置状态为修改。
然后将Tdataset定位到需要修改的记录,修改数据后保存。

==================================
我的疑虑:
在增加或修改时,我们首先要打开表,把数据全部取出来,然后设置为插入或修改状态,
再保存。可是我们仅仅是为了插入一条数据,完全没有必要取出全部数据。

敢问各位老大,你们是怎么样处理这种事情的。

 
with query1 do
begin
close;
sql.clear;
sql.add('select * from mydb where id<0'); //一个不存在的条件
open;
append;
//录入数据
post;
end;
 
Procedure New;
begin
with Query1 do begin
Close;
ParamByName('ID').AsString:='';
Open;
Append;
end;
end;
Procedure Save;
begin
BeforeSave;//生成ID
Query1.ApplyUpdates;
Query1.CommitUpdates
end;
 
后退
顶部