Delphi如何在AdoQuery 中追加记录

以下是我的程序模块,主要目的有2,创建新表,在新表中追回记录。现在只能写入第一条记录,想追加第二条记录时,总是出错!请高手审阅指导。结尾处的出错语句我已加了注释。谢谢!p... 以下是我的程序模块,主要目的有2,创建新表,在新表中追回记录。现在只能写入第一条记录,想追加第二条记录时,总是出错!请高手审阅指导。结尾处的出错语句我已加了注释。谢谢!

procedure TForm1.Button2Click(Sender: TObject);
begin

With AdoQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('Create table 1ctsklnts.dbf (sj char(4),bxjs number(5),cdjs number(5),pljs number(5),wljs number(5))');
showmessage(Sql.Text);
ExecSql;
Sql.Clear;
Sql.Add('Select * from 1ctsklnts.dbf');
Active:=true;
append;
FieldByName('sj').AsString:='1996';
FieldByName('bxjs').Value:=15;
edit;
append; //当实行到这一步时,总是出错!不能追加一条空记录
FieldByName('sj').AsString:='1997';
FieldByName('bxjs').Value:=25;

end;
end;

运行时,总是出现如下出错提示:

Project CreaTable0.exe raised exception class EOleException with message '提供程序不能确定该值。原因可能是:记录刚刚创建,该字段的默认值不可用,或用户未设置新值。'.Process stopped. Use Step or Run to continue.

期待能够运行通过的答案!先致谢意!
chenyayuzx,你好!好像不是填写字段多少的问题。我试过了,无论多少字段赋值,都是能将第一条记录写进去的,但再往下只要一遇到post,就出错!麻烦你抽空将这段程序亲自在Delphi中调试通过后,将源码发上来。唉!我知道这问题不算大,但是却被困住了!

2007.10.7回复:
非常感谢 chenyayuzx 的热心答复!只是不知为什么,你调通的程序我在Delphi 7 中运行后,依然出现上面的错误提示。

上述答案都在细节上调不通。我最后自己弄通了。那就是append和post是不能配套用的。追加记录的正确顺序应该是:
append...Sql(insert....)
或者append...edit..post。

如果用append...post搭对儿,肯定是要出错的。另外,append一定要在edit之前,如果放在edit...post之间,肯定也会出错,也就是说,在edit状态下不能append,但可以用fieldbyname(...)在缓存里局部修改数据。

我原来的程序只是在这个搭对儿和顺序上没弄对,其它部分没有错误,包括SQL(Create....)部分。

再次谢谢chenyayuzx!祝你愉快!
展开
 我来答
chenyayuzx
2007-10-07 · TA获得超过312个赞
知道小有建树答主
回答量:305
采纳率:0%
帮助的人:336万
展开全部
......

Sql.Clear;
Sql.Add('Select * from 1ctsklnts.dbf');
Active:=true;
append;
FieldByName('sj').AsString:='1996';
FieldByName('bxjs').Value:=15;
post;
//edit;
append; //当实行到这一步时,总是出错!不能追加一条空记录
FieldByName('sj').AsString:='1997';
FieldByName('bxjs').Value:=25;
post;

......

============================================
我省略了前后和你一样的代码,你试试
============================================
补充:呵呵,我现在没有Delphi调试,不过先Append然后赋值,最后Post,这个过程是绝对没有问题的!

或者你把Active:=true;换成Open;试试,其实是一样的。
============================================
嗨!明白了,你看你有多少个字段,你赋了值的才几个?把所有字段都赋值了你再试试!
============================================
这个是我调试通过的,我用的是Access数据库,文件名:test.mdb

调试过程中发现你的create table语句有错误,把所有number类型的长度参数删除,number长度是固定的,不需要指定长度。

procedure TForm1.Button1Click(Sender: TObject);
begin
With AdoQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('Create table test.dbf (sj char(4),bxjs number,cdjs number,pljs number,wljs number)');
showmessage(Sql.Text);
ExecSql;
Sql.Clear;
Sql.Add('Select * from test.dbf');
open;
append;
FieldByName('sj').AsString:='1996';
FieldByName('bxjs').Value:=15;
//edit;
post;
append; //当实行到这一步时,总是出错!不能追加一条空记录
FieldByName('sj').AsString:='1997';
FieldByName('bxjs').Value:=25;
post;
end;
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
TableDI
2024-07-18 广告
在上海悉息信息科技有限公司,我们深知Excel在数据处理中的重要作用。在Excel中引用不同工作表(sheet)的数据是常见的操作,这有助于整合和分析跨多个工作表的信息。通过在工作表名称前加上感叹号“!”,您可以轻松地引用其他工作表中的数据... 点击进入详情页
本回答由TableDI提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式