多线程或多进程同时修改数据库的问题..
我用AdoQuery连接Access数据库:
procedure ThreadFun(lParam:integer);stdcall;
var i:integer;
begin
with Form1 do begin
i:=1;
while i<=100 do begin
AdoQuery1.Edit;
AdoQuery1.FieldValues['a']:=AdoQuery1.FieldValues['a']+1;
AdoQuery1.Post;
i:=i+1;
end;
Memo1.Lines.Append(inttostr(lParam)+':over');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var tmp:DWORD;
begin
CloseHandle(CreateThread(nil,0,@ThreadFun,Pointer(1),0,tmp));
CloseHandle(CreateThread(nil,0,@ThreadFun,Pointer(2),0,tmp));
end;
无论怎么改都会出错!分别用两个AdoQuery控件问题仍旧!分别用两个进程同时操作问题仍旧.
别告诉我用线程同步技术哈.如果两台机子同时操作一个数据库怎么解决?
问题点数:50、回复次数:8Top
1 楼mjcom(不明飞行物)回复于 2006-03-05 18:02:55 得分 0
顺便问一下,SQL的数据库会不会也有这种问题?Top
2 楼ZyxIp(绝望中...)回复于 2006-03-05 19:22:03 得分 10
就是要用线程同呀.
可以做一个数据接口,运行在数据库所在的机子上,其它的程序的所有数据请求都通过它来进行.
SQL SERVER不会有这种问题.
关于线程同步看一下<WINDOWS核心编程>一书Top
3 楼5207(踏雪)回复于 2006-03-05 21:00:52 得分 10
ACCESS应该是独占式的吧.Top
4 楼mjcom(不明飞行物)回复于 2006-03-05 22:10:06 得分 0
谢谢大家的关注..SQL没有这个问题真是太好了.Top
5 楼lianshaohua(永远深爱一个叫“...”的好女孩儿!)回复于 2006-03-06 08:41:54 得分 10
如果涉及到同时操作数据库了,最好不要用AccessTop
6 楼mjcom(不明飞行物)回复于 2006-03-06 14:56:54 得分 0
问题又来了.我用SQL同样出错,而以得到的结果也不对.!Top
7 楼bluekitty(软件黑领)回复于 2006-03-06 15:04:16 得分 10
同步问题任何数据库都存在。把query换成command改用update语句Top
8 楼ZyxIp(绝望中...)回复于 2006-03-06 15:34:04 得分 10
用EXESQL提交SQL语句.
CloseHandle(CreateThread(nil,0,@ThreadFun,Pointer(1),0,tmp));
为什么要这样写.
Top




