Access数据库写入出了问题,帮帮我!!!(200分)

  • 主题发起人 主题发起人 mayong
  • 开始时间 开始时间
M

mayong

Unregistered / Unconfirmed
GUEST, unregistred user!
首先生成一个(Access2000)数据库,加一个表T1,利用以下Save函数对数据库进行
写入,tem控制记录<10,用ADOTable存取
1、写十几次就出错:(键列信息不足或不正确,更新影响到过多的行)
2、把tem放大,=1000,往里连续写,不知多少次后,本来是用Append添加在
数据表尾的,结果加在表的中间
procedure Save(P1,P2:string);
var
tem:integer;
f : boolean;
begin
if (P1='') or (P2='') then exit;
tem:=10;
f:=Form1.ADoTable1.Filtered;
if f then
Form1.ADOTable1.Filtered:=False;
if Form1.ADoTable1.RecordCount>= tem then
begin
Form1.ADoTable1.First;
Form1.ADoTable1.Delete;
end;
Form1.ADoTable1.Append;
Form1.ADoTable1.edit;
Form1.ADoTable1a.AsString:=P1;
Form1.ADoTable1b.AsString:=P2;
Form1.ADoTable1.Prior;
Form1.ADoTable1.Close;
Form1.ADoTable1.Open;
Form1.ADoTable1.Last;
if f then
Form1.ADoTable1.Filtered:=True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
str :string;
begin
str:=formatDateTime('y-m-d h:n:s',now);
Save(str,str);
end;
 
改用QUERYP写吧。
INSERT INTO会比你的效果好,升级也方便。
 
>(键列信息不足或不正确,更新影响到过多的行)
你的数据库没有主键,同时你写的东西又完全相同,这样 数据库就没办法确定到底是那一行的操作,当然会蹦叉了。
而且删除都没办法,只有使用 SQL语句全部删除。
 
对于一般数据库而言,已经没有“中间”和“末尾”的区别,主要还需要靠自己在程序里面根据某一字段进行排序
就是使用Order By。
 
出错是数据重复造成的,但我在建数据库的表时声明了字段中数据可重复,为何不起作用
(设置:索引有(可重复))
 
你可以再加一个自增字段作为主键
下面的你的代码比较罗嗦:
Form1.ADoTable1.Append;
Form1.ADoTable1.edit;
Form1.ADoTable1a.AsString:=P1;
Form1.ADoTable1b.AsString:=P2;
Form1.ADoTable1.Prior;
Form1.ADoTable1.Close;
Form1.ADoTable1.Open;
Form1.ADoTable1.Last;
改为:
Form1.ADoTable1.Append;
Form1.ADoTable1a.AsString:=P1;
Form1.ADoTable1b.AsString:=P2;
Form1.ADoTable1.Post;
 
物理存储位置对数据库来说是无关的
如果你想按时间排列,那么indexFieldNames设置为你的时间列
 
我以前也用Post函数确认,但我发现计算机忽然掉电后数据没有写入数据库
 
多人接受答案了。
 

Similar threads

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