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/