关于sql数据写回数据库的问题(50分)

  • 主题发起人 主题发起人 bswilson
  • 开始时间 开始时间
B

bswilson

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是Paradox 7数据库,比如D:驱有一个目录1,里面有一个表TEST.DB,
我用QUERY语句对其中的一列,比如说Score,全部赋值为10(原来的值为1),
这时候我打开数据表看这一列的确已经全部变为10了,
但此时我将整个目录拷贝,到D;的目录2中,结果目录2中TEST.DB的数值仍为1

如果我重新运行这个程序,直接运行拷贝功能,这时候考过去的数据正常,全部都为10

这样分析起来,好象是SQL数据并没有真正写回,但为什么在1中TEST.DB的那一列为10呢?
怎么解决,如能分析原因更好.
 
没人回答啊?
我的帖子要被淹没了.
 
不明白啊!帮你提一下....
 
有这么奇怪?
》》这时候我打开数据表看这一列的确已经全部变为10了,
此时应该是数据提交了啊!

贴出源码看看可以吗?
 
To Hari Bottor Thank you
JRQ你终于来了,这几天我看你一直都在,并且以前帮我解决了一些问题,也谢谢你,
我原来的程序用的数据显示控件是DevQuantumGrid,要复杂一些,下午我用TopGrid模拟了一下
问题依旧,我都要MAD了.
原码在下,多谢
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.DatabaseName := 'D:/1';
With Query1 do
begin
Close;
SQL.Clear;
SQL.Add('Update country.db set Area=101');
ExecSQL;
End;
Table1.Refresh;
end;

procedure TForm1.Button2Click(Sender: TObject);
var OpStruc:TSHFileOpStruct;
FromBuf,ToBuf:Array[0..128] of Char;
begin

FillChar(FromBuf,SizeOf(FromBuf),0);
FillChar(ToBuf,SizeOf(ToBuf),0);
StrPCopy(FromBuf,PChar('D:/1'));
StrPCopy(ToBuf,PChar('D:/2'));
with OpStruc do
begin
Wnd := Handle;
wFunc := FO_COPY;
pFrom := @FromBuf;
pTo := @ToBuf;
fFlags := FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
SHFileOperation(OpStruc);

Table2.DatabaseName := 'D:/2';
Table2.TableName := 'country.db';
Table2.Active := true;
dxDBGrid2Column1.FieldName :='area';
dxDBGrid2Column2.FieldName :='Population';
end;
 
坛中无大将乎?
 
又要提一提我的帖子了.在线等待啊
 
其實通過你那樣復制后,表'country.db'應在 'd:/2/1'的目錄下,
而你訪問'd:/2'下的數據文件當然不行。你可以查看一下'd:/2/1'
下的表文件內容有沒有改動,按說應該有改動。可能復制過程要改動
一下,它只是將d:/1這個目錄放在d:/2目錄下形成復制,也就是復制
后d:/2目錄下會多一個目錄名為1的目錄。
 
怎么会有这种事呢???
你就执行你的Button1click,然后用Database Desktop打开country,应该全部改过了,
在copy到其他目录,再用DataBase Desktop打开其他目录下copy后的文件,也是改过的。
 
我现在也正在测试这个问题.
to zxb 200
如果第一次运行,表的确复制到了d:/2目录下,以后再运行,表又复制到了D;/2/1的目录下,
但不管复制在什么目录下,内容都没有改变啊.
能不能给个电子邮件,我发过来,你帮我看看,文件很小.


 
zhaibo000@sina.com
看看,不一定能解決。
 
运行一次没有问题,但第二次会有问题.
因为2中的表已经打开,会拷贝失败.
请检查拷贝地返回值.
 
我每次运行时,将目录2删除重新来,也不能正确拷贝,拷贝到其他目录也不正确.
但比如说我将机器重启,然后运行程序,直接执行拷贝功能,又可以,我一直在怀疑Tquery的
运行,或者说在clipboard上有什么东西.
的确,问题太Specific了.
 
或者当时数据在缓存中没有写入?
测试:修改一次
退出程序
打开程序
拷贝一次
如果每次正确,则是这个原因
处理:查查有没有将缓存记录保存到硬盘上的DBE API,调用一次,再拷贝
 
wangpian,我觉得我们越来越接近问题的本质了.
刚才我做了测试,是如预料的,为什么一定要退出程序(好象要关掉delphi)
能说说那个DBE.API吗?其原理什么的,我注意到过好象还有一个Config什么的文件
 
试试 table.FlushBuffers 或者 query.FlushBuffers

 
PiPi兄,好象不行啊.
Can not operate on a closed query. Because I use the 'Update' and it should call
the ExecSQL, so the query is closed.
 
哦,那就把database关闭,数据应该就写入了吧
 
怎么关闭?
 
后退
顶部