milosev.com
  • Home
    • List all categories
    • Sitemap
  • Downloads
    • WebSphere
    • Hitachi902
    • Hospital
    • Kryptonite
    • OCR
    • APK
  • About me
    • Gallery
      • Italy2022
      • Côte d'Azur 2024
    • Curriculum vitae
      • Resume
      • Lebenslauf
    • Social networks
      • Facebook
      • Twitter
      • LinkedIn
      • Xing
      • GitHub
      • Google Maps
      • Sports tracker
    • Adventures planning
  1. You are here:  
  2. Home
  3. Delphi

Microsoft Message Queuing

Details
Written by: Stanko Milosev
Category: MSMQ
Published: 09 December 2008
Last Updated: 10 December 2009
Hits: 8199

First of all you have to install MSMQ. You will do it through Control panel->Add remove programs->Add/Remove Windows components.

Second you will need to access MSMQ for managing, you can do it through Computer Management->Services and Applications->Message Queuing

Now, create one queue, for example "test", under Private Queues.

Then, send a message through Delphi :)

Here is the code:

For sending messages:

procedure TForm3.Button1Click(Sender: TObject);
var
queuename, subject: string;
data: olevariant;
queueinfo, QueueInfosObj: IMSMQQueueInfo;
queue, QueryObj: IMSMQQueue;
msg: IMSMQMessage;
tr: OLEVariant;
begin
{ STANKO is name of my computer, test is name of queue}
queuename := 'Direct=OS:STANKOprivate$ est';
subject := Edit1.text;
data := Memo1.text;

try
queueinfo := CreateCOMObject (CLASS_MSMQQueueInfo) as IMSMQQueueInfo;
queueinfo.FormatName := queuename;
queue := queueinfo.Open (MQ_SEND_ACCESS, MQ_DENY_NONE);
if queue.IsOpen 1 then
statusbar1.Panels[0].Text := 'I can not get access to queue!'
else
begin
try
msg := CreateCOMObject (CLASS_MSMQMessage) as IMSMQMessage;
msg.label_ := subject;
msg.body := data;
tr := MQ_NO_TRANSACTION;
msg.Send (queue, tr);
statusbar1.Panels[0].Text := 'Sent!'
finally
queue.close;
end;
end;
except
on e: exception do showmessage (e.message);
end;
end;

Now, for receiving messages:

procedure TForm3.Button2Click(Sender: TObject);
var
queuename: string;
data: olevariant;
queueinfo: IMSMQQueueInfo;
queue: IMSMQQueue;
msg: IMSMQMessage;
tr, wdq, wb, rt: OLEVariant;
begin
queuename:= 'Direct=OS:STANKOprivate$ est';
try
queueinfo := CreateCOMObject (CLASS_MSMQQueueInfo) as IMSMQQueueInfo;
queueinfo.FormatName := queuename;
queue := queueinfo.Open (MQ_RECEIVE_ACCESS, MQ_DENY_NONE);
if queue.IsOpen 1 then
statusbar1.Panels[0].Text := 'I can not get access to queue!'
else
begin
try
tr := MQ_SINGLE_MESSAGE;
wdq := False;
wb := True;
rt := 1000;
msg := queue.Receive (tr, wdq, wb, rt);
if msg nil then
begin
data := msg.body;
statusbar1.Panels[0].Text := 'Received!';
memo2.text:=data;
edit2.text:=msg.label_;
end
else
statusbar1.Panels[0].Text := 'No messages'
finally
queue.close;
end;
end;
except
on e: exception do showmessage (e.message);
end;
end;

Code taken from here. It is on Slovenian, but I coudn't find it on English.

Here you can download source code created in D2007, and here is the exe file.

ORA-00904: invalid identifier

Details
Written by: Stanko Milosev
Category: Oracle
Published: 18 March 2009
Last Updated: 30 November -0001
Hits: 8675
If you ever received this error then try to write field names in the Oracle with upper case, or use quotas.

ora-01036 illegal variable name/number

Details
Written by: Stanko Milosev
Category: Oracle
Published: 04 March 2009
Last Updated: 30 November -0001
Hits: 6423
Error: ora-01036 illegal variable name/number will happen if you added parameter in Param of TSQLQuery and there is no parameter in the SQL (there is no anything as :Parameter)

Subcategories

dbExpress

Web

Delphi

MSMQ

Oracle

Page 11 of 11

  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11