📄 dbxdatadriverdesigneh.pas
字号:
with Cursor as TSQLQuery do
begin
SQLConnection := FSQLConnection;
SQL.Text := Command.CommandText.Text;
Params := Command.GetParams;
if CommandType = cthSelectQuery then
Open
else
begin
ExecSQL;
Result := RowsAffected;
end;
end;
end;
cthTable:
begin
Cursor := TSQLTable.Create(nil);
with Cursor as TSQLTable do
begin
SQLConnection := FSQLConnection;
TableName := Command.CommandText.Text;
// Params := Command.GetParams;
Open;
end;
end;
cthStoredProc:
begin
Cursor := TSQLStoredProc.Create(nil);
with Cursor as TSQLStoredProc do
begin
SQLConnection := FSQLConnection;
StoredProcName := Command.CommandText.Text;
Params := Command.GetParams;
ExecProc;
end;
end;
end;
end;
function TDBXDesignDataBaseEh.GetSQLConnection: TSQLConnection;
begin
Result := FSQLConnection;
end;
function TDBXDesignDataBaseEh.GetServerTypeName: String;
var
Description: String;
begin
// if not SQLCo.Connected then
// FDBEDataBase.Open;
if GetServerName(FSQLConnection, Description) then
begin
Result := UpperCase(Description);
end;
end;
function TDBXDesignDataBaseEh.BuildInterbaseObjectTree2(List: TList): Boolean;
var
NList: Tlist;
// i: Integer;
// TreeNode: TTreeNode;
begin
if FTreeNodeMan <> nil then
FTreeNodeMan.Free;
FTreeNodeMan := TInterbaseDBService.Create(Self);
NList := FTreeNodeMan.CreateRootNodes;
List.Assign(NList, laCopy);
{ for i := 0 to List.Count-1 do
begin
TreeNode := TreeView.Items.Add(nil, TSQLTreeNode(List[i]).FName);
TreeNode.HasChildren := True;
TreeNode.Data := List[i];
end;}
NList.Free;
Result := True;
end;
function TDBXDesignDataBaseEh.CreateReader(SQL: String; FParams: TParamsArr): TDataSet;
var
Query: TSQLQuery;
i: Integer;
dt: TFieldType;
p: TParam;
begin
Query := TSQLQuery.Create(nil);
Query.SQLConnection := FSQLConnection;
Query.SQL.Text := SQL;
if High(FParams) > Low(FParams) then
for i := Low(FParams) to High(FParams) div 2 do
begin
dt := VarTypeToDataType(VarType(FParams[i*2+1]));
if dt = ftUnknown then
dt := ftString;
p := Query.Params.CreateParam(dt, FParams[i*2], ptInputOutput);
p.Value := FParams[i*2+1];
end;
try
Query.Open;
except
Query.Free;
raise;
end;
Result := Query;
end;
function TDBXDesignDataBaseEh.BuildOracleObjectTree(List: TList): Boolean;
begin
Result := False;
end;
procedure TDBXDesignDataBaseEh.EditDatabaseParams;
begin
//design-time EditConnection(FSQLConnection);
{$IFDEF DESIGNTIME}
EditConnection(FSQLConnection);
{$ENDIF}
// inherited;
// TConnEditForm
end;
function TDBXDesignDataBaseEh.GetEngineName: String;
begin
Result := 'DBX';
end;
function TDBXDesignDataBaseEh.GetConnected: Boolean;
begin
Result := FSQLConnection.Connected;
end;
procedure TDBXDesignDataBaseEh.SetConnected(const Value: Boolean);
begin
FSQLConnection.Connected := Value;
end;
function TDBXDesignDataBaseEh.SupportCustomSQLDataDriver: Boolean;
begin
Result := True;
end;
function TDBXDesignDataBaseEh.GetDBServiceClass: TCustomDBServiceClass;
begin
Result := GetDBServiceByName(GetServerTypeName);
end;
function TDBXDesignDataBaseEh.GetFieldList(const TableName: string;
DataSet: TDataSet): Boolean;
var
table: TSQLTable;
list: TStrings;
i: Integer;
procedure GetDataFieldNames(Dataset: TDataset; ErrorName: string; List: TStrings);
var
I: Integer;
begin
with Dataset do
try
FieldDefs.Update;
List.BeginUpdate;
try
List.Clear;
for I := 0 to FieldDefs.Count - 1 do
List.Add(FieldDefs[I].Name);
finally
List.EndUpdate;
end;
except
if ErrorName <> '' then
MessageDlg(Format('SSQLDataSetOpen', [ErrorName]), mtError, [mbOK], 0);
end;
end;
procedure SetKeyFields;
var
SepPos, I, Index: Integer;
FName, FieldNames: string;
begin
table.IndexDefs.Update;
for I := 0 to table.IndexDefs.Count - 1 do
if ixPrimary in table.IndexDefs[I].Options then
begin
FieldNames := table.IndexDefs[I].Fields + ';';
while Length(FieldNames) > 0 do
begin
SepPos := Pos(';', FieldNames);
if SepPos < 1 then Break;
FName := Copy(FieldNames, 1, SepPos - 1);
{$IFDEF CIL}
Borland.Delphi.System.Delete(FieldNames, 1, SepPos);
{$ELSE}
System.Delete(FieldNames, 1, SepPos);
{$ENDIF}
Index := list.IndexOf(FName);
if Index > -1 then list.Objects[Index] := TObject(1);
end;
break;
end;
end;
begin
table := TSQLTable.Create(nil);
table.SQLConnection := FSQLConnection;
table.TableName := TableName;
list := TStringList.Create;
GetDataFieldNames(table, 'Error', list);
SetKeyFields;
for i := 0 to list.Count-1 do
if list.Objects[i] = TObject(1)
then DataSet.AppendRecord([list[i], True])
else DataSet.AppendRecord([list[i], False]);
list.Free;
table.Free;
Result := True;
end;
procedure TDBXDesignDataBaseEh.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and
(AComponent <> nil) and
(FSQLConnection = AComponent)
then
FSQLConnection := nil;
if (Operation = opRemove) and
(AComponent <> nil) and
(FApplicationConnection = AComponent)
then
FApplicationConnection := nil;
end;
procedure TDBXDesignDataBaseEh.SetApplicationConnection(const Value: TSQLConnection);
begin
if FApplicationConnection <> Value then
begin
FApplicationConnection := Value;
if FApplicationConnection <> nil then
FApplicationConnection.FreeNotification(Self);
end;
end;
{ TDBXAccessEngineEh }
function TDBXAccessEngineEh.AccessEngineName: String;
begin
Result := 'DBX';
end;
//function TDBXAccessEngineEh.CreateDesignDataBase(DataDriver: TCustomSQLDataDriverEh): TDesignDataBaseEh;
function TDBXAccessEngineEh.CreateDesignDataBase(DataDriver: TCustomSQLDataDriverEh;
DBServiceClass: TCustomDBServiceClass; DataBaseName: String): TDesignDataBaseEh;
var
DBXDesignDataBase: TDBXDesignDataBaseEh;
begin
DBXDesignDataBase := TDBXDesignDataBaseEh.Create;
DBXDesignDataBase.EditDatabaseParams;
Result := DBXDesignDataBase;
//DataDriver.DesignDataBase := DBXDesignDataBase;
end;
procedure Register;
begin
RegisterComponents('EhLib', [TDBXDataDriverEh]);
{$IFDEF DESIGNTIME}
RegisterComponentEditor(TDBXDataDriverEh, TSQLDataDriverEhEditor);
{$ENDIF}
end;
initialization
RegisterDBXAccessEngines;
finalization
UnregisterDBXAccessEngines;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -