"TOraQueue" / "TOraObject" missing
Posted: Mon 25 Jan 2016 14:52
Hi,
I used "odac710d14pro-1.exe" and "unidac360d14pro.exe" (installed February 2011) until now in a Delphi 2010 project. Now I upgraded to Delphi 10 Seattle and also to "unidac62d23pro.exe".
After opening my project I got an error message saying that TOraSession was not found. After looking here I found out that I have to migrate with the Migration Wizard. I did that, and the project opened with no error. So far so good.
But the source does not compile.
Some code:
This code here is more complicated:
I watched in the online help, but could not find any info on how to migrate the code. Any info on how to migrate the code? Any ideas are welcome.
TIA, M. Drück
I used "odac710d14pro-1.exe" and "unidac360d14pro.exe" (installed February 2011) until now in a Delphi 2010 project. Now I upgraded to Delphi 10 Seattle and also to "unidac62d23pro.exe".
After opening my project I got an error message saying that TOraSession was not found. After looking here I found out that I have to migrate with the Migration Wizard. I did that, and the project opened with no error. So far so good.
But the source does not compile.
Some code:
Code: Select all
TfrmMainAOS = class(TForm)
OraSession: TUniConnection;
function TfrmMainAOS.EnqueueFARMS : Boolean;
var
OraSQL : TUniSQL;
PayLoad : string;
begin
Result := False;
try
OraSession.ConnectString := edtConnectString.Text;
PayLoad := Format(mom_out.Lines.Text, [
XMLDateTimeStr(Int(FStartDate)), XMLDateTimeStr(Int(FEndDate)), XMLDateTimeStr(Now)]);
OraSQL := TUniSQL.Create(nil);
OraSQL.Session := OraSession;[b] <--- "OraSQL.Session" unknown identifier[/b]
OraSQL.SQL.Text := 'declare' + #13 +
' message SYS.AQ$_JMS_TEXT_MESSAGE;' + #13 +
' agent sys.aq$_agent := sys.aq$_agent('' '', null, 0);'+ #13 +
' queue_options DBMS_AQ.ENQUEUE_OPTIONS_T;' + #13 +
' msg_props DBMS_AQ.MESSAGE_PROPERTIES_T;' + #13 +
' msgid raw(16);' + #13 +
'begin' + #13 +
' message := sys.aq$_jms_text_message.construct;' + #13 +
' message.set_replyto(agent);' + #13 +
' message.set_type(''farms'');' + #13 +
' message.set_userid(''aquser'');' + #13 +
' message.set_appid(''am'');' + #13 +
' message.set_text(:text);' + #13 +
' DBMS_AQ.ENQUEUE( queue_name => :FromQueue' + #13 +
' , enqueue_options => queue_options' + #13 +
' , message_properties => msg_props' + #13 +
' , payload => message' + #13 +
' , msgid => msgid);' + #13 +
'end;';
OraSQL.Prepare;
OraSQL.ParamByName('text').AsString := PayLoad;
OraSQL.ParamByName('FromQueue').AsString := edtQueueFrom.Text;
AddResults(Format('SQL.Text:' + #13#10 + '[%s]', [OraSQL.SQL.Text]));
AddResults('Start: OraSQL.Execute');
OraSQL.Execute;
OraSession.Commit;
AddResults(Format('OraSession.LastError: [%d]', [OraSession.LastError]));[b] <--- "OraSession.LastError" unknown identifier[/b]
Code: Select all
function TfrmMainAOS.DequeueFARMS : Boolean;
var
OraQueue : TOraQueue;
ObjectPayload : TOraObject;
FileName,
MsgId, PayLoad : string;
DoBreak : Boolean;
OperationCount : Integer;
StartTime : TDateTime;
begin
Result := False;
try
StartTime := Now;
OraSession.ConnectString := edtConnectString.Text;
OraQueue := TOraQueue.Create(nil);
OraQueue.Session := OraSession;
OraQueue.QueueName := edtQueueTo.Text;
OraQueue.DequeueOptions.WaitTimeout := AQ_NO_WAIT;
try
Sleep(2000); // etwas warten
memXMLData.Lines.Clear;
OperationCount := 0;
FileName := Format('%s\FARMS To AM %s.xml', [edtTxtImportUpdateFolder.Text, FormatDateTime('YYYY DD MM - HH NN SS', Now)]);
repeat
AddResults(Format(#13#10 + 'OperationCount: [%d]', [OperationCount]));
DoBreak := False;
repeat
ObjectPayload := TOraObject.Create;
try
MsgId := OraQueue.Dequeue(ObjectPayload);
except
on E : Exception do begin
DoBreak := True;
Inc(OperationCount);
AddResults(Format('ERROR: OraQueue.Empty; [%s]', [E.Message]));
end;
end;
if ObjectPayload.AttrIsNull['text_lob'] then begin
PayLoad := ObjectPayload.AttrAsString['text_vc']
end else begin
PayLoad := ObjectPayload.AttrAsLob['text_lob'].AsWideString;
end;
AddResults(Format('DEQUEUE: MsgId: [%s]; Length: [%d]', [MsgId, ObjectPayload.AttrAsInteger['text_len']]));
DoBreak := Pos('>ACK<', PayLoad) > 1;
memXMLData.Lines.Add(PayLoad);
OraQueue.Session.Commit;
ObjectPayload.Free;
until DoBreak or ((Now - StartTime) > EncodeTime(0, 5, 0, 0));
AddResults(Format('OraSession.LastError: [%d]', [OraSession.LastError]));
Sleep(2000); // etwas warten
until (OperationCount > 10) or ((Now - StartTime) > EncodeTime(0, 5, 0, 0));
memXMLData.Lines.SaveToFile(FileName);
finally
OraQueue.Free;
end;
Result := True;
except
on E : Exception do begin
HandleExceptionPrim(E, E.message, 4, 'DequeueFARMS');
end;
end;
end; // DequeueFARMS
TIA, M. Drück