如何使数据库处于编辑或插入状态? (50分)

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

wwwlaila

Unregistered / Unconfirmed
GUEST, unregistred user!
如何使数据库处于编辑或插入状态?
如何为数据库自动增加序号列?
 
table.insert or table.append
 
我想改变现有记录内容,而不是“插入”和“添加”
 
第一个问题解决了,很简单阿,哈哈哈!
请回答第二个问题,谢谢!!
 
很简单,用Table.insert或table.edit,即可。
同时,table.state,可以说明所处状态,如state=dsedit 或state= dsinsert,就
已经处于编辑或添加状态了。
 
有些数据库有自增字段
如果没有,就读出现有记录中最大的值,然后加一
 
//------生成最大流水号------
with Query do
begin
Close;
SQL.Clear;
SQL.Add('select max(XH) XH from TableNmae where ...');
Open;
end;
if (Table.State not in [dsInsert,dsEdit]) then
Table.Insert;
if Query.FieldByName('XH').AsString <> '' then
TableXH.AsInteger := Query.FieldByName('XH').AsInteger + 1
else
TableXH.AsInteger := 1;
//--------------------------
 
我是指1、2、3、4、5这样的序列号
 
to wwwlaila:难道我上面写的不能实现1、2、3、4、5这样的序列号吗?我可是每次都这样写的。
 
1、我没读懂你的程序;
2、我指的是table
 
你用的是什么数据库,你的意思是把数据库下动态生成的table的名字自动编号吗?
 
在table1增加一计算字段xh,
然后再OnCalcFields中
table1.xh.Value := table1.RecNo;
可得到由1起自动增加的序号列
 
//------生成最大流水号------
with Query do
begin
Close;
SQL.Clear;
SQL.Add('select max(XH) XH from TableNmae where ...');
Open;
end;
//上面这段程序是通过Query查询你要进行序号自增的表中的已有最大序号(假设字段名叫XH)
//下面的程序是给你的表生成新的最大序号,并通过你的Table控件输入数据库(Table连接的是你上面所查询的表)
if (Table.State not in [dsInsert,dsEdit]) then
Table.Insert;
if Query.FieldByName('XH').AsString <> '' then
TableXH.AsInteger := Query.FieldByName('XH').AsInteger + 1
else
TableXH.AsInteger := 1;
//--------------------------

这次看懂了么?[:)][?]
 
如果是用paradox的话,将数据库字段类型设成“+”(Autoincrement),即可自动添加序号
 
其实第二个问题是个很深的问题。
1、自增字段法:生成数字会断续,没有顺序。如1,2..5,6...9等
2、用RECNO赋值法:如果删除数据的话,而且是paradox或dbf格式,则加了删除标记的
记录也会计算在RECNO中。
3、westboy2000的方法也解决不了删除的问题。

结论只有一个,在打开库后计算一遍序号字段值(从1开始),或是在操作库时进行判断。
(不过都很耗费时间!)
 
多人接受答案了。
 
后退
顶部