access的自动编号问题(基本问题)(50分)

  • 主题发起人 主题发起人 jacaboos
  • 开始时间 开始时间
J

jacaboos

Unregistered / Unconfirmed
GUEST, unregistred user!
开发环境:delphi3 + access97 (by ODBC)

表(databaseA)有两个字段(id:自动编号,f1:string)。
1。 用table增加记录将出错:
with table1 do
begin
open;edit;append;fieldbyname('f1'):='aaa';post;
end;
错误提示为:‘id字段必须赋值‘。

2。 用query增加记录可以完成:
with query1 do
begin
sql.clear;
sql.add('insert into databaseA(f1) value(:p1)');
parambyname('p1'):='aaa';
execsql;
end;

以上是我的问题,我已经被困扰几天了。
 
open;edit;append;fieldbyname('f1'):='aaa';post;
___________到底Edit,还是Append啊??
 
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOTable1.Append;
ADOTable1.FieldByName('F1').AsString:='XXXXXX';
ADOTable1.Post;
end;
 
append是append
edit是edit
分清楚方法。
如上

yakuu
 
去掉 edit ,情况依然。
 
用insert试试。
 
procedure TForm1.btn_addClick(Sender: TObject);
begin
table1.append;
end;

procedure TForm1.btn_saveClick(Sender: TObject);
begin
table1.Edit;
table1.fieldbyname('f1').asstring:='mmmm';
table1.post;
end;
这个程序,应该没有问题,你试试看
 
问题没有解决。仍然在期待。
 
那就给一个值,哪怕是0试试。
 
procedure TForm1.Button1Click(Sender: TObject);
begin
adotable1.open;
ADOTable1.Append;
ADOTable1.FieldByName('F1').AsString:='XXXXXX';
ADOTable1.Post;
end;

 
id设为主键
 
INT字段不另“ ' ”试,因为SQL中INT不应加双引号!
 
To antic_ant : 在delphi3中还没有ado.
To zhaohai9 : 已经是主健了。
TO barton : 可以对id字段赋值,但是这不是我想做的。否则就不设置为“自动编号’字段了。
欢迎继续讨论。

btw,我之所以想用table而不用query,是因为在表中有一个datetime字段(f2)。而我
还没有找到对这个字段赋空值的办法。用table,我可以不管这个字段,就可以了。
而用query,我必须这样写:
if 为空 then
sql.add('insert into t1(f1,f3) values(......)')
else
sql.add('insert into t1(f1,f2,f3( values(....)');
这种方法好像很蠢,不到最后,我绝不会这样做的。
大家有什么好的方法。
 
你在Table的字段编辑器里面显式地添加字段了吗?请检查
 
看一下table的cachedupdates属性
可能和这有关系!
 
这个原因是由odbc和bde的区别造成的,我以前碰过的。
先给你解决的办法,你试一试。将所有字段加到table的字段编辑器中,选择id
,然后将属性required设为false(好像是这样的,不行就设成true),祝你好运!
 
同意楼上“将属性required设为false”的办法
或者可以用Table.insertrecord插入记录,也不会出错
 
碧玉银淑, Laputa 两位的方法可行。
相比而言,Laputa的方法好像更具有普遍性。
我采用的语句是 table1.appendRecord([nil,nil,'abcdef']);

[问题结束,谢谢大伙]
 
后退
顶部