Hi all,

Im having a slight problem here; probably missing something small.
I have an application that recieves sms messages from an smpp server then
spins of a thread that goes ahead to insert into a database. Reason for this
is that i need to free my application as soon as possible to receive the
next smpp message coming in.

This works all well and good - i ensured that i call coinitialize and
couninitialize for each thread (so that i can use com objects (TADOCommand))

The problem comes when i drop a timer and on each timer tick i cannot create
any kind of com/activex object (ado etc etc) if i try i get the following
error

The application called an interface that was marshalled for a different
thread

below are snips of the code

- for the thread execute method itself

procedure Tinsert.Execute;
begin
  { Place thread code here }
  Coinitialize(nil);

  with TADOCOmmand.Create(nil) do
  begin
    ConnectionString:='Provider=SQLOLEDB.1;Password=kiokor$7;Persist
Security Info=True;User ID=sa;Initial Catalog=smsgate';

    CommandText:='insert into tblincoming
(Message_Destination,Message_Source,Message_Text,Message_Option,Message_SMSC
TimeStamp,Message_Validity) values ('+
      QuotedStr(f_bstrDestination)+','+
      QuotedStr(f_bstrOriginator)+','+
      QuotedStr(f_bstrMessage)+','+
      IntToStr(f_lOption)+','+
      QuotedStr(FormatDateTime('dd mmm yyyy HH:nn:ss',f_SMSCTimeStamp))+','+
      QuotedStr(FormatDateTime('dd mmm yyyy HH:nn:ss',f_Validity))+')';

    Execute;
    Free;
  end;

  CoUninitialize;
end;

- and for the timer method - smpp send

procedure TsSMPP.TimerTimer(Sender: TObject);
begin

  with TADOQUery.Create(nil) do
  begin
    ConnectionString:='Provider=SQLOLEDB.1;Password=kiokor$7;Persist
Security Info=True;User ID=sa;Initial Catalog=smsgate';
    SQL.TexT:='select * from tbloutgoing where Message_MTDelivered=0';

    Open;
    while not EOF do
    begin
      SMPP.SMSCSubmitMessage(
        FieldByName('Message_Destination').AsString,
        FieldByName('Message_Source').AsString,
        FieldByName('Message_Option').AsInteger,
        FieldByName('Message_SourceTON').AsInteger,
        FieldByName('Message_SourceNPI').AsInteger,
        FieldByName('Message_DestTON').AsInteger,
        FieldByName('Message_DestNPI').AsInteger,
        FieldByName('Message_Text').AsString,
        Now,
        FieldByName('Message_Validity').AsInteger);

      Edit;
      FieldByName('Message_MTDelivered').AsBoolean:=True;
      Post;
      Next;
    end;
    Close;
  end;

end;

the error occurs on the timer send as soon as the ado querry is created

any help would be appreciated.

regards

Chris.



-----------------------------------------------------
Home page: http://groups.yahoo.com/group/delphi-en/
To unsubscribe: [EMAIL PROTECTED] 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/delphi-en/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to