dmcommon.pas

来自「作为服务」· PAS 代码 · 共 134 行

PAS
134
字号
unit DMCommon;

interface

uses
  SysUtils, Classes, DB, ADODB,forms,comobj,Graphics,OleCtrls,stdctrls,windows;
type
  TDM = class(TDataModule)
    ADOCon: TADOConnection;
    ADOQuery: TADOQuery;
    ADOQueryCMSLib: TADOQuery;
    DSCommon: TDataSource;
    ADOQryEvent: TADOQuery;
    ADOQueryVD: TADOQuery;
    ADOQueryWS: TADOQuery;
    ADOQueryTS: TADOQuery;
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private declarations }
  public
    function ExeSqlReturn(ADOQry:TADOQuery;sqlstring:string):Boolean;
    function ExeSql(sqlstring:string):Boolean;

    function  getEventNewID():string;

    { Public declarations }
  end;

type
  TConnectThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  public
    { Public declarations }
end;
var
  DM: TDM;
  SQLConThread      :TConnectThread;
implementation


uses Common;
{$R *.dfm}

procedure TDM.DataModuleCreate(Sender: TObject);
begin
  SQLConThread := TConnectThread.Create(true) ;
  SQLConThread.FreeOnTerminate :=true;
  ADOCon.ConnectionString := CreateConnStr;  //con
  try
    ADOCon.Connected :=true;
  finally
    if not  ADOCon.Connected   then
    begin
      prompt('数据库连接失败!!');  
    end;
  end;
end;

{ TConnectThread }

procedure TConnectThread.Execute;
begin
  inherited;
  while true do
      begin
          if Terminated then Break ;
          //自动恢复网络数据库连接
          try
              Dm.ADOCon.Connected := false ;
              DM.ADOCon.ConnectionString := CreateConnStr;  //con
              Dm.ADOCon.Connected :=true; ;
              //线程挂起
              suspended := true ;
          except on EOleException do
              begin
                  sleep(100);
                  application.ProcessMessages ;
              end;
          end;
      end
end;


function TDM.ExeSql(sqlstring: string): Boolean;
var dbErrLog:string;
begin
  try
    ADOQuery.SQL.Text := sqlstring ;
    ADOQuery.ExecSQL;
    result :=true;
  except
    SQLConThread.Resume;
    result := false;
    SQLToFile(sqlstring);
  end;
end;

function TDM.ExeSqlReturn(ADOQry: TADOQuery; sqlstring: string): Boolean;
begin
  try
    ADOQry.Close;
    ADOQry.SQL.Clear;
    ADOQry.SQL.Add(SqlString);
    ADOQry.open;
    result :=true;
  except
    SQLConThread.Resume;
    result := false;
  end;
end;






function TDM.getEventNewID: string;
begin
  sqlstring := 'select evid from  jkevent where  EVID like '''+FormatDateTime('yyyymm',now)+'%''';
  if DM.ExeSqlReturn(DM.ADOQuery,SqlString) then
  begin
    if DM.ADOQuery.RecordCount =0 then result := FormatDateTime('yyyymm',now)+'0001'
    else result :=  FormatDateTime('yyyymm',now)+ copy(inttostr(10000+DM.ADOQuery.RecordCount+1),2,4);
  end;

end;



end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?