首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

服务程序中使用数据库对象的有关问题.

2012-03-06 
服务程序中使用数据库对象的问题..procedureTfrmTest.avarcn:TOraSessionqry:TOraQueryUserName,Passwo

服务程序中使用数据库对象的问题..
procedure   TfrmTest.a;
var
    cn:   TOraSession;
    qry:   TOraQuery;
    UserName,   Password,   IP,   SID:   string;
begin
//CoInitialize(nil);
    showmessage( '1 ');
    cn   :=   TOraSession.Create(nil);
    showmessage( '2 ');
    qry   :=   TOraQuery.Create(nil);
    showmessage( '3 ');
    UserName   :=   'report001 ';
    Password   :=   'report001 ';
    IP   :=   '59.151.4.116 ';
    SID   :=   'imeter ';
    showmessage( '4 ');
    cn.ConnectString   :=   Format( '%s/%s@%s:1521:%s ',   [UserName,   Password,   IP,   SID]);
    showmessage(cn.ConnectString);
    //cn.Connected   :=   True;
    qry.Session   :=   cn;
    showmessage( '7 ');
    qry.Close;
    qry.SQL.Clear;
    showmessage( '8 ');
    qry.SQL.Add( 'select   *   from   content02 ');
    showmessage( '9 ');
    qry.Open;
    showmessage( '10 ');
    qry.First;
    showmessage( '11 ');
    showmessage(qry.FieldByName( 'name ').AsString);
    cn.Free;
    qry.Free;
      //CoUnInitialize();
end;

线程函数
procedure   TMusic.Execute;
var
    sTime:   string;
    frmTest:   TfrmTest;
begin
    while   True   do
    begin
        frmTest   :=   TfrmTest.Create();
        frmTest.a;//这是一个数据库的操作函数

        sleep(2000);

    end;
end;

我在一个线程对象中调用了一个操作数据库的对象TOraQuery   来操作数据库,操作数据库的那段代码在应用程序中是可以跑通的.但是在服务程序中调它的时候,只有showmessage( '9 '),就是说qry.open的时候就报错了...请问这个问题该如何解决...

[解决办法]
写服务程序用一个log文件来记录运行情况这样比较好,你可以把异常写到日志里,我这里有一个你参考一下吧

unit LogMgr;

interface

uses
Classes, Windows, SysUtils, RegistryMgr;

const
mtErr = '[Error] ';
mtHint = '[Hint] ';
type
TLogMgr = class(TObject)
private
FLogFilePath :String;
public
procedure setLog(aMessageNo:string; aMessage:string);
end;

implementation

{ TLogMgr }

procedure TLogMgr.setLog(aMessageNo: string; aMessage: string);
var
FHandle:THandle;
m_RegMgr :TRegistryManager;
begin
m_RegMgr :=TRegistryManager.Create;
FLogFilePath:=ExtractFilePath( m_RegMgr.sts_Log )+ 'sm.log ';
m_RegMgr.Destroy;
aMessage:= '[ '+FormatDateTime( 'yyyy-mm-dd hh:mm:ss ',now )+ '] '+aMessageNo+ ' : '+aMessage+#10#13;
FHandle:=FileOpen( FLogFilePath, fmOpenWrite or fmShareDenyNone );
FileSeek( Fhandle, 0, 2 );
FileWrite( Fhandle, aMessage[ 1 ], length( aMessage ) );
FileClose( FHandle );
end;

end.

热点排行