rmd_asta.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 453 行
PAS
453 行
{*****************************************}
{ }
{ Report Machine v2.0 }
{ Wrapper for ADO }
{ }
{*****************************************}
unit RMD_ASTA;
interface
{$I RM.INC}
uses
Windows, Classes, SysUtils, Graphics, Forms, ExtCtrls, DB,
AstaCustomSocket, AstaClientSocket, AstaDrv2, AstaClientDataset,AstaStringLine,AstaDBTypes,
StdCtrls, Controls, RM_Class, RMD_DBWrap ,ScktComp
{$IFDEF Delphi6}, Variants {$ENDIF};
type
TRMDASTAComponents = class(TComponent) // fake component
end;
TRMDASTADatabase = class(TRMNonVisualControl)
private
FAstaClientSocket: TAstaClientSocket;
protected
procedure SetPropValue(Index: string; Value: Variant); override;
function GetPropValue(Index: string): Variant; override;
public
constructor Create; override;
destructor Destroy; override;
procedure LoadFromStream(Stream: TStream); override;
procedure SaveToStream(Stream: TStream); override;
procedure DefineProperties; override;
end;
{ TRMDAstaClientDataSet }
TRMDAstaClientDataSet = class(TRMDQuery)
private
FQuery: TAstaClientDataSet;
protected
procedure SetPropValue(Index: string; Value: Variant); override;
function GetPropValue(Index: string): Variant; override;
function DoMethod(const MethodName: string; Pars: array of Variant): Variant; override;
function GetParamName(Index: Integer): string; override;
function GetParamType(Index: Integer): TFieldType; override;
procedure SetParamType(Index: Integer; Value: TFieldType); override;
function GetParamKind(Index: Integer): TRMParamKind; override;
procedure SetParamKind(Index: Integer; Value: TRMParamKind); override;
function GetParamText(Index: Integer): string; override;
procedure SetParamText(Index: Integer; Value: string); override;
function GetParamValue(Index: Integer): Variant; override;
procedure SetParamValue(Index: Integer; Value: Variant); override;
procedure GetDatabases(sl: TStrings); override;
procedure GetTableNames(DB: string; Strings: TStrings); override;
procedure GetTableFieldNames(const DB, TName: string; sl: TStrings); override;
public
constructor Create; override;
procedure DefineProperties; override;
procedure LoadFromStream(Stream: TStream); override;
procedure SaveToStream(Stream: TStream); override;
published
end;
implementation
uses RM_Const, RM_CmpReg, RM_utils;
{$R RMD_ASTA.RES}
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMDAstaDatabase}
constructor TRMDASTADatabase.Create;
begin
inherited Create;
FAstaClientSocket := TAstaClientSocket.Create(RMDialogForm);
FAstaClientSocket.ConnectAction := caNone;
Component := FAstaClientSocket;
BaseName := 'AstaDatabase';
BmpRes := 'RMD_ASTASOCKET';
Flags := Flags or flDontUndo;
// asta compress config
RMConsts['acAstaCompress'] := acAstaCompress;
RMConsts['acAstaZLib'] := acAstaZLib;
RMConsts['acNoCompression'] := acNoCompression;
RMConsts['acUserDefined'] := acUserDefined;
// asta encryption config
RMConsts['etNoEncryption'] := etNoEncryption;
RMConsts['etAstaEncrypt'] := etAstaEncrypt;
RMConsts['etUserDefined'] := etUserDefined;
RMConsts['etAESEncrypt'] := etAESEncrypt;
// asta ClientType config
RMConsts['ctNonBlocking'] := ctNonBlocking;
RMConsts['ctBlocking'] := ctBlocking;
end;
destructor TRMDASTADatabase.Destroy;
begin
if Assigned(RMDialogForm) then
FAstaClientSocket.Free;
inherited Destroy;
end;
procedure TRMDASTADatabase.DefineProperties;
begin
inherited DefineProperties;
AddProperty('Connected', [rmdtBoolean], nil);
AddProperty('Address',[rmdtString],nil);
AddProperty('DateMaskForSQL',[rmdtString],nil);
AddProperty('DateTimeMaskForSQL',[rmdtString],nil);
AddProperty('ApplicationName',[rmdtString],nil);
AddProperty('Port',[rmdtInteger],nil);
AddEnumProperty('Compression',
'acNoCompression;acAstaCompress;acUserDefined;acAstaZLib',
[acNoCompression,acAstaCompress,acUserDefined,acAstaZLib], nil);
AddEnumProperty('Encryption',
'etNoEncryption;etAstaEncrypt;etUserDefined;etAESEncrypt',
[etNoEncryption,etAstaEncrypt,etUserDefined,etAESEncrypt], nil);
AddEnumProperty('ClientType',
'ctNonBlocking; ctBlocking',
[ctNonBlocking, ctBlocking], nil);
end;
procedure TRMDASTADatabase.SetPropValue(Index: string; Value: Variant);
begin
inherited SetPropValue(Index, Value);
Index := AnsiUpperCase(Index);
if Index = 'ADDRESS' then
FAstaClientSocket.Address := Value
else if Index = 'PORT' then
FAstaClientSocket.Port := Value
else if Index = 'DATEMASKFORSQL' then
FAstaClientSocket.DateMaskForSQL := Value
else if Index = 'DATETIMEMASKFORSQL' then
FAstaClientSocket.DateTimeMaskForSQL := Value
else if Index = 'APPLICATIONNAME' then
FAstaClientSocket.ApplicationName := Value
else if Index = 'COMPRESSION' then
FAstaClientSocket.Compression := Value
else if Index = 'ENCRYPTION' then
FAstaClientSocket.Encryption := Value
else if Index = 'CLIENTTYPE' then
FAstaClientSocket.ClientType := Value
else if Index = 'CONNECTED' then
FAstaClientSocket.Active := Value
end;
function TRMDASTADatabase.GetPropValue(Index: string): Variant;
begin
Index := AnsiUpperCase(Index);
Result := inherited GetPropValue(Index);
if Result <> Null then Exit;
if Index = 'ADDRESS' then
Result := FAstaClientSocket.Address
else if Index = 'PORT' then
Result := FAstaClientSocket.Port
else if Index = 'DATEMASKFORSQL' then
Result := FAstaClientSocket.DateMaskForSQL
else if Index = 'DATETIMEMASKFORSQL' then
Result := FAstaClientSocket.DateTimeMaskForSQL
else if Index = 'APPLICATIONNAME' then
Result := FAstaClientSocket.ApplicationName
else if Index = 'COMPRESSION' then
Result := FAstaClientSocket.Compression
else if Index = 'ENCRYPTION' then
Result := FAstaClientSocket.Encryption
else if Index = 'CLIENTTYPE' then
Result := FAstaClientSocket.ClientType
else if Index = 'CONNECTED' then
Result := FAstaClientSocket.Active
end;
procedure TRMDASTADatabase.LoadFromStream(Stream: TStream);
begin
inherited LoadFromStream(Stream);
FAstaClientSocket.Address := RMReadString(Stream);
FAstaClientSocket.Port := RMReadInteger(Stream);
FAstaClientSocket.DateMaskForSQL := RMReadString(Stream);
FAstaClientSocket.DateTimeMaskForSQL := RMReadString(Stream);
FAstaClientSocket.ApplicationName := RMReadString(Stream);
FAstaClientSocket.Compression := TAstaCompression(RMReadByte(Stream));
FAstaClientSocket.Encryption := TAstaEncryption(RMReadByte(Stream));
FAstaClientSocket.ClientType := TClientType(RMReadByte(Stream));
FAstaClientSocket.Active := RMReadBoolean(Stream);
end;
procedure TRMDASTADatabase.SaveToStream(Stream: TStream);
begin
LVersion := 0;
inherited SaveToStream(Stream);
RMWriteString(Stream, FAstaClientSocket.Address);
RMWriteInteger(Stream, FAstaClientSocket.Port);
RMWriteString(Stream, FAstaClientSocket.DateMaskForSQL);
RMWriteString(Stream, FAstaClientSocket.DateTimeMaskForSQL);
RMWriteString(Stream, FAstaClientSocket.ApplicationName);
RMWriteByte(Stream, Byte(FAstaClientSocket.Compression));
RMWriteByte(Stream, Byte(FAstaClientSocket.Encryption));
RMWriteByte(Stream, Byte(FAstaClientSocket.ClientType));
RMWriteBoolean(Stream, FAstaClientSocket.Active);
end;
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMDAstaClientDataSet}
constructor TRMDAstaClientDataSet.Create;
begin
inherited Create;
FQuery := TAstaClientDataSet.Create(RMDialogForm);
DataSet := FQuery;
Component := FQuery;
BaseName := 'AstaClientDataSet';
BmpRes := 'RMD_ASTACLIENTDATASET';
end;
procedure TRMDAstaClientDataSet.DefineProperties;
begin
inherited DefineProperties;
end;
procedure TRMDAstaClientDataSet.SetPropValue(Index: string; Value: Variant);
var
d: TComponent;
begin
inherited SetPropValue(Index, Value);
Index := AnsiUpperCase(Index);
if index = 'DATABASE' then
begin
FQuery.Close;
d := RMFindComponent(FQuery.Owner, Value);
FQuery.AstaClientSocket := TAstaClientSocket(d);
end
else if Index = 'DATASOURCE' then
begin
end
else if index = 'PARAMS.COUNT' then
begin
end
else if Index = 'SQL' then
begin
FQuery.Close;
FQuery.SQL.Text := Value;
end
end;
function TRMDAstaClientDataSet.GetPropValue(Index: string): Variant;
function GetDataBase(Owner: TComponent; d: TAstaClientSocket): string;
begin
Result := '';
if d <> nil then
begin
Result := d.Name;
if d.Owner <> Owner then
Result := d.Owner.Name + '.' + Result;
end;
end;
begin
Index := AnsiUpperCase(Index);
Result := inherited GetPropValue(Index);
if Result <> Null then Exit;
if Index = 'DATABASE' then
Result := GetDataBase(FQuery.Owner, FQuery.AstaClientSocket)
else if Index = 'DATASOURCE' then
Result := ''
else if Index = 'PARAMS.COUNT' then
Result := FQuery.Params.Count
else if Index = 'SQL' then
Result := FQuery.SQL.Text
else if Index = 'SQL.COUNT' then
Result := FQuery.SQL.Count
end;
function TRMDAstaClientDataSet.DoMethod(const MethodName: string; Pars: array of Variant): Variant;
begin
Result := inherited DoMethod(MethodName, Pars);
if Result = Null then
Result := LinesMethod(FQuery.SQL, MethodName, 'SQL', Pars[0], Pars[1], Pars[2]);
if MethodName = 'EXECSQL' then
begin
OnBeforeOpenQueryEvent(FQuery);
FQuery.ExecSQL;
end;
end;
procedure TRMDAstaClientDataSet.LoadFromStream(Stream: TStream);
begin
inherited LoadFromStream(Stream);
end;
procedure TRMDAstaClientDataSet.SaveToStream(Stream: TStream);
begin
LVersion := 0;
inherited SaveToStream(Stream);
end;
procedure TRMDAstaClientDataSet.GetDatabases(sl: TStrings);
var
liStringList: TStringList;
begin
liStringList := TStringList.Create;
try
RMGetComponents(RMDialogForm, TAstaClientSocket, liStringList, nil);
liStringList.Sort;
sl.Assign(liStringList);
finally
liStringList.Free;
end;
end;
procedure TRMDAstaClientDataSet.GetTableNames(DB: string; Strings: TStrings);
var
sl : TStringList;
begin
if FQuery.Active then FQuery.Active := False;
FQuery.MetaDataRequest := mdTables;
FQuery.SQL.Clear;
FQuery.TableName := '';
sl := TStringList.Create;
FQuery.Open;
FQuery.DisableControls;
try
FQuery.First;
while not FQuery.Eof do
begin
sl.Add(FQuery.Fields[0].AsString);
FQuery.Next;
end;
sl.Sort;
Strings.Assign(sl);
finally
FQuery.EnableControls;
FQuery.Close;
FQuery.MetaDataRequest := mdNormalQuery;
sl.Free;
end;
end;
procedure TRMDAstaClientDataSet.GetTableFieldNames(const DB, TName: string; sl: TStrings);
var
sl1 : TStringList;
begin
if FQuery.Active then FQuery.Active := False;
FQuery.MetaDataRequest := mdFields;
FQuery.SQL.Clear;
FQuery.TableName := TName;
FQuery.Open;
FQuery.DisableControls;
sl1 := TStringList.Create;
try
FQuery.First;
while not FQuery.Eof do
begin
sl1.Add(FQuery.Fields[0].AsString);
FQuery.Next;
end;
sl1.Sort;
sl.Assign(sl1);
finally
FQuery.EnableControls;
FQuery.Close;
FQuery.MetaDataRequest := mdNormalQuery;
sl1.Free;
end;
end;
function TRMDAstaClientDataSet.GetParamName(Index: Integer): string;
begin
Result := FQuery.Params[Index].Name;
end;
function TRMDAstaClientDataSet.GetParamType(Index: Integer): TFieldType;
begin
Result := FQuery.Params[Index].DataType;
end;
procedure TRMDAstaClientDataSet.SetParamType(Index: Integer; Value: TFieldType);
begin
FQuery.Params[Index].DataType := Value;
end;
function TRMDAstaClientDataSet.GetParamKind(Index: Integer): TRMParamKind;
begin
Result := rmpkValue;
if FQuery.Params[index].IsNull then
Result := rmpkAssignFromMaster;
end;
procedure TRMDAstaClientDataSet.SetParamKind(Index: Integer; Value: TRMParamKind);
begin
if Value = rmpkAssignFromMaster then
begin
FQuery.Params[index].Clear;
FParams.Delete(FParams.IndexOf(FQuery.Params[Index].Name));
end
else
begin
FQuery.Params[index].Clear;
FParams[FQuery.Params[Index].Name] := '';
end;
end;
function TRMDAstaClientDataSet.GetParamText(Index: Integer): string;
var
v: Variant;
begin
v := '';
if ParamKind[Index] = rmpkValue then
v := FParams[FQuery.Params[Index].Name];
if v = Null then
v := '';
Result := v;
end;
procedure TRMDAstaClientDataSet.SetParamText(Index: Integer; Value: string);
begin
if ParamKind[Index] = rmpkValue then
FParams[FQuery.Params[Index].Name] := Value;
end;
function TRMDAstaClientDataSet.GetParamValue(Index: Integer): Variant;
begin
Result := FQuery.Params[Index].Value;
end;
procedure TRMDAstaClientDataSet.SetParamValue(Index: Integer; Value: Variant);
begin
FQuery.Params[Index].Value := Value;
end;
initialization
RMRegisterControl(TRMDASTADatabase, 'RMD_ASTASOCKETCONTROL', 'ASTAClientSocket(ASTA)');
RMRegisterControl(TRMDAstaClientDataSet, 'RMD_ASTACLIENTDATASETCONTROL', 'ASTAClientDataSet(ASTA)');
finalization
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?