或使用临界段:
var
 Critical1:TRTLCriticalSection;
在线程CREATE事件时 InitializeCriticalSection(Critical1);
在线程DESTORY事件时 DeleteCriticalSection(Critical1);
在线程EXECUTE事件 :
EnterCriticalSection(Critical1);
try
 .... //对本地数据库进行操作
 ....
 .... 
 ....
finally
 LeaveCriticalSection(Critical1);
 end;

解决方案 »

  1.   

    回dolphin2001(海豚之神)
    我的两个线程都是这样写的
    procedure MyThread1.Execute;
    begin  { Place thread code here }
       freeonterminate:=true;
      MyPro1;
    end;
    procedure MyThread2.Execute;
    begin
      { Place thread code here }
      freeonterminate:=true;
      MyPro2;
    end;
    这样我该把临界量放在什么地方呢?
    请指教!!
    最好详细点!
      

  2.   

    在DELPHI中数据库组件是线程安全级的,仅管用就是了。
    数据冲突可以用信号量控制
    例如: hMutex:=CreateMutex(nil,True,'Mutex001');
      

  3.   


    对不起,国庆节我回家了,好久没有上网了,现在对你的问题做一下回答:
    1--->>>如果你用是用临界段: 
    你如果是在一个窗体文件UNIT1.PAS中写了两个线程MYTHREAD1,MYTHREAD2;
    你就在窗体中定义一个全局临界段变量
    var
    Critical1:TRTLCriticalSection;
    在窗体的CREATE事件时 InitializeCriticalSection(Critical1);
    在窗体的DESTORY事件时 DeleteCriticalSection(Critical1);
    在相应的数据库的操作过程中
    (如果是你两个线程同时调用一个访问数据库的操作,你只需将下列代码写在其中;若为了两个,你只需在
    两个过程中加入下列代码,《下面同》)
    EnterCriticalSection(Critical1);
     try
    .... //对本地数据库进行操作
    ....
    .... 
    ....
    finally
     LeaveCriticalSection(Critical1);
    end;
    你如果是在一个纯PAS文件(没有窗体)中定义两个线程,你可以在两个线程定义中加入:
    public
     constructor create;override;
     destructor destory;override;
    end;
    然后在相应的create和destory事件中加入
    InitializeCriticalSection(Critical1);
    DeleteCriticalSection(Critical1);
    《下同》2--->>>如果你是用互斥量:
    你如果是在一个窗体文件UNIT1.PAS中写了两个线程MYTHREAD1,MYTHREAD2;
    你就在窗体中定义一个全局临界段变量
    var
    hmutex:thandle;
    在窗体的CREATE事件时 hmutex:=createmutex(nil,false,nil);
    在窗体的DESTORY事件时 closehandle(hmutex)
    在相应的数据库的操作过程中
    waitforsingleobject(hmutex,INFINITE)
    try
    .... //对本地数据库进行操作
    ....
    .... 
    ....
    finally
    releasemutex(hmutex);
    end;不知上面的解释你明白否?如还有问题,你可以写信到我的信箱:[email protected]