📄 frxadocomponents.pas
字号:
function TfrxADODatabase.ToString: WideString;
begin
Result := FDatabase.ConnectionString;
end;
procedure TfrxADODatabase.ADOBeforeConnect(Sende: TObject);
var
Param: Boolean;
begin
Param := True;
BeforeConnect(Param);
end;
{ TfrxADOTable }
constructor TfrxADOTable.Create(AOwner: TComponent);
begin
FTable := TADOTable.Create(nil);
DataSet := FTable;
SetDatabase(nil);
inherited;
end;
constructor TfrxADOTable.DesignCreate(AOwner: TComponent; Flags: Word);
var
i: Integer;
l: TList;
begin
inherited;
l := Report.AllObjects;
for i := 0 to l.Count - 1 do
if TObject(l[i]) is TfrxADODatabase then
begin
SetDatabase(TfrxADODatabase(l[i]));
break;
end;
end;
class function TfrxADOTable.GetDescription: String;
begin
Result := frxResources.Get('obADOTb');
end;
procedure TfrxADOTable.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
if (Operation = opRemove) and (AComponent = FDatabase) then
SetDatabase(nil);
end;
procedure TfrxADOTable.SetDatabase(Value: TfrxADODatabase);
begin
FDatabase := Value;
if Value <> nil then
FTable.Connection := Value.Database
else if ADOComponents <> nil then
FTable.Connection := ADOComponents.DefaultDatabase
else
FTable.Connection := nil;
DBConnected := FTable.Connection <> nil;
end;
function TfrxADOTable.GetIndexFieldNames: String;
begin
Result := FTable.IndexFieldNames;
end;
function TfrxADOTable.GetIndexName: String;
begin
Result := FTable.IndexName;
end;
function TfrxADOTable.GetTableName: String;
begin
Result := FTable.TableName;
end;
procedure TfrxADOTable.SetIndexFieldNames(const Value: String);
begin
FTable.IndexFieldNames := Value;
end;
procedure TfrxADOTable.SetIndexName(const Value: String);
begin
FTable.IndexName := Value;
end;
procedure TfrxADOTable.SetTableName(const Value: String);
begin
FTable.TableName := Value;
end;
procedure TfrxADOTable.SetMaster(const Value: TDataSource);
begin
FTable.MasterSource := Value;
end;
procedure TfrxADOTable.SetMasterFields(const Value: String);
begin
FTable.MasterFields := Value;
end;
procedure TfrxADOTable.BeforeStartReport;
begin
SetDatabase(FDatabase);
end;
{ TfrxADOQuery }
constructor TfrxADOQuery.Create(AOwner: TComponent);
begin
FStrings := TStringList.Create;
FQuery := TADOQuery.Create(nil);
{$IFDEF Delphi7}
FQuery.LockType := ltReadOnly;
{$ENDIF}
Dataset := FQuery;
SetDatabase(nil);
FLock := False;
inherited;
end;
constructor TfrxADOQuery.DesignCreate(AOwner: TComponent; Flags: Word);
var
i: Integer;
l: TList;
begin
inherited;
l := Report.AllObjects;
for i := 0 to l.Count - 1 do
if TObject(l[i]) is TfrxADODatabase then
begin
SetDatabase(TfrxADODatabase(l[i]));
break;
end;
end;
destructor TfrxADOQuery.Destroy;
begin
FStrings.Free;
inherited;
end;
class function TfrxADOQuery.GetDescription: String;
begin
Result := frxResources.Get('obADOQ');
end;
procedure TfrxADOQuery.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
if (Operation = opRemove) and (AComponent = FDatabase) then
SetDatabase(nil);
end;
function TfrxADOQuery.GetSQL: TStrings;
begin
FLock := True;
FStrings.Assign(FQuery.SQL);
FLock := False;
Result := FStrings;
end;
procedure TfrxADOQuery.SetSQL(Value: TStrings);
begin
FQuery.SQL.Assign(Value);
FStrings.Assign(FQuery.SQL);
end;
procedure TfrxADOQuery.SetDatabase(Value: TfrxADODatabase);
begin
FDatabase := Value;
if Value <> nil then
FQuery.Connection := Value.Database
else if ADOComponents <> nil then
FQuery.Connection := ADOComponents.DefaultDatabase
else
FQuery.Connection := nil;
DBConnected := FQuery.Connection <> nil;
end;
procedure TfrxADOQuery.SetMaster(const Value: TDataSource);
begin
FQuery.DataSource := Value;
end;
function TfrxADOQuery.GetCommandTimeout: Integer;
begin
Result := THackQuery(FQuery).CommandTimeout;
end;
procedure TfrxADOQuery.SetCommandTimeout(const Value: Integer);
begin
THackQuery(FQuery).CommandTimeout := Value;
end;
procedure TfrxADOQuery.UpdateParams;
begin
frxParamsToTParameters(Self, FQuery.Parameters);
end;
procedure TfrxADOQuery.OnChangeSQL(Sender: TObject);
var
i, ind: Integer;
Param: TfrxParamItem;
QParam: TParameter;
begin
if not FLock then
begin
{ needed to update parameters }
FQuery.SQL.Text := '';
FQuery.SQL.Assign(FStrings);
inherited;
{ fill datatype automatically, if possible }
for i := 0 to FQuery.Parameters.Count - 1 do
begin
QParam := FQuery.Parameters[i];
ind := Params.IndexOf(QParam.Name);
if ind <> -1 then
begin
Param := Params[ind];
if (Param.DataType = ftUnknown) and (QParam.DataType <> ftUnknown) then
Param.DataType := QParam.DataType;
end;
end;
end;
end;
procedure TfrxADOQuery.BeforeStartReport;
begin
SetDatabase(FDatabase);
{ needed to update parameters }
SQL.Text := SQL.Text;
end;
{$IFDEF QBUILDER}
function TfrxADOQuery.QBEngine: TfqbEngine;
begin
Result := TfrxEngineADO.Create(nil);
TfrxEngineADO(Result).FQuery.Connection := FQuery.Connection;
end;
{$ENDIF}
{$IFDEF Delphi7}
function TfrxADOQuery.GetLockType: TADOLockType;
begin
Result := FQuery.LockType;
end;
procedure TfrxADOQuery.SetLockType(const Value: TADOLockType);
begin
FQuery.LockType := Value;
end;
{$ENDIF}
{$IFDEF QBUILDER}
constructor TfrxEngineADO.Create(AOwner: TComponent);
begin
inherited;
FQuery := TADOQuery.Create(Self);
end;
destructor TfrxEngineADO.Destroy;
begin
FQuery.Free;
inherited;
end;
procedure TfrxEngineADO.ReadFieldList(const ATableName: string;
var AFieldList: TfqbFieldList);
var
TempTable: TADOTable;
Fields: TFieldDefs;
i: Integer;
tmpField: TfqbField;
begin
AFieldList.Clear;
TempTable := TADOTable.Create(Self);
TempTable.Connection := FQuery.Connection;
TempTable.TableName := ATableName;
Fields := TempTable.FieldDefs;
try
try
TempTable.Active := True;
tmpField:= TfqbField(AFieldList.Add);
tmpField.FieldName := '*';
for i := 0 to Fields.Count - 1 do
begin
tmpField := TfqbField(AFieldList.Add);
tmpField.FieldName := Fields.Items[i].Name;
tmpField.FieldType := Ord(Fields.Items[i].DataType)
end;
except
end;
finally
TempTable.Free;
end;
end;
procedure TfrxEngineADO.ReadTableList(ATableList: TStrings);
begin
ATableList.Clear;
frxADOGetTableNames(FQuery.Connection, ATableList, ShowSystemTables);
// FQuery.Connection.GetTableNames(ATableList, ShowSystemTables);
end;
function TfrxEngineADO.ResultDataSet: TDataSet;
begin
Result := FQuery;
end;
procedure TfrxEngineADO.SetSQL(const Value: string);
begin
FQuery.SQL.Text := Value;
end;
{$ENDIF}
initialization
frxObjects.RegisterObject1(TfrxADODataBase, nil, '', {$IFDEF DB_CAT}'DATABASES'{$ELSE}''{$ENDIF}, 0, 51);
frxObjects.RegisterObject1(TfrxADOTable, nil, '', {$IFDEF DB_CAT}'TABLES'{$ELSE}''{$ENDIF}, 0, 52);
frxObjects.RegisterObject1(TfrxADOQuery, nil, '', {$IFDEF DB_CAT}'QUERIES'{$ELSE}''{$ENDIF}, 0, 53);
finalization
frxObjects.UnRegister(TfrxADODataBase);
frxObjects.UnRegister(TfrxADOTable);
frxObjects.UnRegister(TfrxADOQuery);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -