主题:在线等~!-数据保存问题
aqiang2002
[专家分:0] 发布于 2006-05-08 15:20:00
我遇到的问题是,在程序运行期间,得到的结果和预期目的一样。但只要重新启动机子,数据库就会少最后一条记录,有一个数据库甚至是空的。我保存了啊,为什么会出现这样的问题啊?[em17]
回复列表 (共4个回复)
沙发
huitian [专家分:1410] 发布于 2006-05-08 17:16:00
代码帖出来看一下
板凳
长尾兔 [专家分:3630] 发布于 2006-05-09 09:14:00
我不知你的程序代码是怎么写的,呵呵,我遇到过以下这种现象:
关闭程序前table不关闭,特别是程序运行中电脑突然掉电,就会丢失数据。
这是因为table先把数据放在缓冲区里,哪怕post了的数据。
但是foxpro的DBF表不存在这个问题
----我说的与你问的是一回事吗?
3 楼
aqiang2002 [专家分:0] 发布于 2006-05-09 11:51:00
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from dhqd.dbf');
query1.Prepare;
query1.Open;
while not query1.Eof do
begin
table1.Close;
table1.Open;
table1.Append;
edit1.Text:=query1.fieldbyname('bc').AsString;
j:=length(edit1.Text);
for i:=0 to j-1 do
begin
edit1.SelStart:=i;
edit1.SelLength:=1;
if edit1.SelText='*' then
begin
edit1.SelStart:=0;
edit1.SelLength:=i-5;
table1.FieldByName('gbhd').AsString:=edit1.SelText;
edit1.SelStart:=i-4;
edit1.SelLength:=4;
table1.FieldByName('gbkd').AsString:=edit1.SelText;
edit1.SelStart:=i+1;
edit1.SelLength:=j-i+1;
table1.FieldByName('gbcd').AsString:=edit1.SelText;
end;
end;
table1.FieldByName('gh').AsString:=query1.fieldbyname('gh').AsString;
table1.Fieldbyname('htbh').AsString:=query1.fieldbyname('htbh').AsString;
table1.FieldByName('cz').AsString:=query1.fieldbyname('cz').AsString;
table1.FieldByName('dhsl').AsInteger:=query1.fieldbyname('dhsl').AsInteger;
table1.FieldByName('dhdj').AsInteger:=query1.fieldbyname('dj').AsInteger;
table1.FieldByName('dhdw').AsString:=query1.fieldbyname('dw').AsString;
table1.Post;
table1.Refresh;
query1.Next;
end;
query2.Close;
query2.SQL.Clear;
query2.SQL.Add('select * from dhqd_o.db');
query2.Prepare;
query2.Open;
while not query2.Eof do
begin
table4.Close;
table4.Open;
table4.Append;
table4.FieldByName('gbhd').AsFloat:=strtofloat(trim(query2.fieldbyname('gbhd').AsString));
table4.FieldByName('gbkd').AsInteger:=strtoint(trim(query2.fieldbyname('gbkd').AsString));
table4.FieldByName('gbcd').AsInteger:=strtoint(trim(query2.fieldbyname('gbcd').AsString));
table4.FieldByName('gh').AsString:=query2.fieldbyname('gh').AsString;
table4.Fieldbyname('htbh').AsString:=query1.fieldbyname('htbh').AsString;
table4.FieldByName('cz').AsString:=query2.fieldbyname('cz').AsString;
table4.FieldByName('dhsl').AsInteger:=query2.fieldbyname('dhsl').AsInteger;
table4.FieldByName('dhdj').AsInteger:=query2.fieldbyname('dhdj').AsInteger;
table4.FieldByName('dhdw').AsString:=query2.fieldbyname('dhdw').AsString;
table4.Post;
table4.Refresh;
query2.Next;
end;
这是出现这种问题的代码,程序正常运行,运行期间能达到预期目的,但我重新启动机子后发现table1是空的,table4竟然少最后一条记录。我用的数据库是delphi自带的数据库表。谢谢帮忙解决下问题。
4 楼
长尾兔 [专家分:3630] 发布于 2006-05-09 23:06:00
不管对错,你的编程习惯和我不一样。
table.refresh?什么意思?有必要吗?
我只是粗粗看了一下。觉得你的程序,假设放上一个月,你自己拿出来修改都很费事,看不懂。table1...table2...query2....table4,....table2.....有点晃眼。
你能不能自己精简一下,一段一段的排除问题,一个数据源一个数据源地排除问题。再有,我在二楼的话看过喽?
我来回复