使用socket的多线程技术开发远程通信程序,保存数据到库中时报错(使用ADO连接)!

leilu 2004-12-14 08:49:21
RT,当查询时不会报错,但是当插入数据时就会报错,不知道大家遇到过这类问题吗?怎么解决呢?
...全文
220 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
leilu 2004-12-14
  • 打赏
  • 举报
回复
我的线程
procedure TMyServerThread.ClientExecute;

var
Stream : TWinSocketStream;
Buffer : array[0 .. 9] of Char;
begin
while (not Terminated) and ClientSocket.Connected do
begin
try
Stream := TWinSocketStream.Create(ClientSocket, 60000);
try
FillChar(Buffer, 10, 0);

if Stream.WaitForData(60000) then

begin
if Stream.Read(Buffer, 10) = 0 then
ClientSocket.Close;
//协议处理程序,需要把数据保存到数据库中,在执行这个过程时报错(键值违反了唯一的约束条件)。

end
else
ClientSocket.Close;
finally
Stream.Free;
end;
except
HandleException;

end;
end;
end;

使用synchronize(update)进行同步吗?,具体怎样做呢?
herman~~ 2004-12-14
  • 打赏
  • 举报
回复
恩,建议你用多线程同步吧。。。
leilu 2004-12-14
  • 打赏
  • 举报
回复
键值违反了唯一的约束条件!
leilu 2004-12-14
  • 打赏
  • 举报
回复
使用的是ORACLE的数据库,错误意思就是对象的访问问题,我认为可能是同时插入数据库了吧,对于同一个表某一时刻只能有一个插入语句吧。(时间作为主键了),是否应该使用多线程的同步机制呢?
晨星 2004-12-14
  • 打赏
  • 举报
回复
是不是你的recordset不是动态的,而不过是个快照。
wozhuchuanwei 2004-12-14
  • 打赏
  • 举报
回复
具体的错误是什么?
leilu 2004-12-14
  • 打赏
  • 举报
回复
我找到一本《DELPHI6高级编程》里面有些多线程临界区的处理,我看看,如果有不懂在请教了。我的QQ:8522151,可以讨教一下吗?
leilu 2004-12-14
  • 打赏
  • 举报
回复
synchronize是和主线程同步,这里好像是需要不同子线程之间同步,synchronize好像不合适,不同子线程之间同步,具体怎么解决呢,临界区同步我试试,谢谢大家了
leilu 2004-12-14
  • 打赏
  • 举报
回复
修改了数据表,不使用时间作为主键的,但是还是有同样的问题,报的错误是一样的。所以我考虑用多线程同步这样同一时刻就只有一个向数据库中存数据了。
zeroxing 2004-12-14
  • 打赏
  • 举报
回复
主键约束,跟线程同步有必然的联系?
同步了,时间挨得很近,照样主键约束错误!

现在关键是你的数据表主键的设计是否合理,你用时间来做主键,按照理解应该是说的插入时间吧?如果你的通信数据来得就是这么频繁,就是要很短时间(在数据库最小时间单位里面)要来很多条,那么你就不能用这个插入时间来做主键,而是用额外的一个编号来做主键。否则,你就是因为技术上面的问题,而阻碍了实际需求的实现,是不能够满足开发要求的(可能堵塞很多条包,来不及处理)。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧