添加记录(天热、烦、脑袋不灵光)(100分)

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

time

Unregistered / Unconfirmed
GUEST, unregistred user!
TTable和TDBEdit组合添加数据库记录(SQL Server)
有问题的程序代码(一定问题大大)
begin
Table1.Append;

Table1.FieldValues['OrderNo'] := StrToFloat(DBEdit1.Text);
Table1.FieldValues['CustNo'] := StrToFloat(DBEdit2.Text);

Table1.Post;
end;
DBEdit1.text和DBEdit2.text的值竟然为空,函数StrToFloat出错。
数据库竟然加入两行一样的记录,而且关键索引字段重复;天哪,神啊
救救我吧 !!!!!!
 
>DBEdit1.text和DBEdit2.text的值竟然为空,函数StrToFloat出错。
>数据库竟然加入两行一样的记录,而且关键索引字段重复;天哪,神啊
能不能说清楚一些!
 
既然这样,就不要用DBEdit乐,用一般的edit就可以了.

如果一定要用DbEdit,我觉得应该是:
1.先按"增加"按钮(Append);
2.在DbEdit里面填写字段内容;
3.按"更新"按钮;(Post?)

没用过,瞎说的 .
 
当你使用了append命令以后,dbedit的内容肯定是为空了。所以最好不要使用
数据敏感控件如dbedit等。使用edit就行了。
 
换用query吧
 
如果用TDBEdit,以下两句根本就不用写
Table1.FieldValues['OrderNo'] := StrToFloat(DBEdit1.Text);
Table1.FieldValues['CustNo'] := StrToFloat(DBEdit2.Text);
采用Append命令后,Edit也就没必要了
 
用appendrecord吧
 
begin
Table1.Append;
//Table1.FieldValues['OrderNo'] := StrToFloat(DBEdit1.Text);
//Table1.FieldValues['CustNo'] := StrToFloat(DBEdit2.Text);
这两行又为记录赋了一次值去掉.
在DBEdit中改变值;
end;
用另一按钮
begin
Table1.Post;
end;
如不用DBEdit; Edit等
用cAkk的方法
 
出现两个同样的记录,这是因为你成功提交时没有清内存,即
“table1.commitupdate”,当然DBedit1.text和Dbedit2.text为空时,用函数
strtofloat()肯定会出错。
 
begin
Table1.Append;
// Here you Add DBEdit1.Text:='6.5';
Table1.FieldValues['OrderNo'] := StrToFloat(DBEdit1.Text);
Table1.FieldValues['CustNo'] := StrToFloat(DBEdit2.Text);

Table1.Post;
end;
// 你使用了append命令以后,dbedit的内容肯定是为空了。
// I think Chenlili is right.
~~~~~~~~
// not g: yubo
 
各位大虾,我改用appendrecord添加记录但仍然加入两行记录。
同时把
Table1.FieldValues['OrderNo'] := StrToFloat(DBEdit1.Text);

Table1.FieldValues['CustNo'] := StrToFloat(DBEdit2.Text);
去掉,只用
Table1.Append;
Table1.Post;
那样总是修改当前行,并没有添加一新行。
其实提出问题主要是想问一下,用TTable和TDBEdit控件怎样对数据库进行如添加、修改等操作,最好能带一些源码。
现在想改用TQuery和TDBEdit控件不知可行否?
还有一问题:
用TQuery和TDBEdit控件,为什么在执行后dbedit中的记录不让修改?
===***===首先先谢了
 
try this:

begin
Table1.Append;

Table1.FieldValues['OrderNo'] := StrToFloat(Edit1.Text);
Table1.FieldValues['CustNo'] := StrToFloat(Edit2.Text);

Table1.Post;
...
end;

the second question:
set TQuery.RequestLive=True

 
我建议改用Edit,省得添加时纠缠不清。
Table1.Append;
Table1.FieldByName('OrderNo').AsString := Edit1.Text;
Table1.FieldByName('CustNo').AsString := Edit2.Text;
Table1.Post;
 
不知道是大家把问题想的太复杂了,还是我把问题想的太简单了:
添加2个按钮:添加(append)、保存(post);
按'添加’后在TdbEdit 中录入内容,再按'保存',调用post命令保存记录,若有重复
记录系统会给出提示(只要设置好主关键字)。
以上在PARADOX数据库中没有问题,不知道在Sql sever中会怎样,没条件试。
 
用Ttable时,在AfterPost事件为:
with table1 do
begin
Database1.StartTransaction;
try
ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
CommitUpdates; //由于你没有加这一句,数据库就会有两行一样的记录。
end;

然后:
Table1.Append;
Table1.FieldByName('OrderNo').AsString := Edit1.Text;
Table1.FieldByName('CustNo').AsString := Edit2.Text;
Table1.Post;

Tquery:

其实在操作SQL数据库的时候,千万不要用Ttable,要用Tquery+tupdatesql来操作
数据库,但关键两属性一定设置好:Resquestlive=false(一定要false,不是
true),Cachedupdates=true。updateobjece=updatesql1
query1的Afterpost事件:
with table1 do
begin
Database1.StartTransaction;
try
ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
CommitUpdates;
end;

Tupdatesql:
updatesql1的Modifysql:
update dbo.table1.
set
OrderNo = :OrderNo,
CustNo = :CustNO
where
OrderNO = :OLD_OrderNo

Insertsql:
insert into dbo.table1
(OrderNo, CustNO)
values
(:OrderNo, :CustNO)

Deletesql:
delete from dbo.table1
where
OrderNo = :OLD_OrderNo

然后:
query1.Append;
query1.FieldByName('OrderNo').AsString := Edit1.Text;
query1.FieldByName('CustNo').AsString := Edit2.Text;
query1.Post;


 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
I
回复
0
查看
794
import
I
后退
顶部