📄 sqldriverediteh.pas
字号:
procedure TDesignDataBaseEh.AssignFromDesignDataDriver(DesignDataDriver,
RuntimeDataDriver: TCustomSQLDataDriverEh);
begin
RuntimeDataDriver.SelectCommand := DesignDataDriver.SelectCommand;
RuntimeDataDriver.UpdateCommand := DesignDataDriver.UpdateCommand;
RuntimeDataDriver.InsertCommand := DesignDataDriver.InsertCommand;
RuntimeDataDriver.DeleteCommand := DesignDataDriver.DeleteCommand;
RuntimeDataDriver.GetrecCommand := DesignDataDriver.GetrecCommand;
if DesignDataDriver is TCustomSQLDataDriverEh then
begin
TCustomSQLDataDriverEh(RuntimeDataDriver).SpecParams := TCustomSQLDataDriverEh(DesignDataDriver).SpecParams;
TCustomSQLDataDriverEh(RuntimeDataDriver).DynaSQLParams := TCustomSQLDataDriverEh(DesignDataDriver).DynaSQLParams;
end;
end;
procedure TDesignDataBaseEh.AssignToDesignDataDriver(DesignDataDriver,
RuntimeDataDriver: TCustomSQLDataDriverEh);
begin
DesignDataDriver.SelectCommand := RuntimeDataDriver.SelectCommand;
DesignDataDriver.UpdateCommand := RuntimeDataDriver.UpdateCommand;
DesignDataDriver.InsertCommand := RuntimeDataDriver.InsertCommand;
DesignDataDriver.DeleteCommand := RuntimeDataDriver.DeleteCommand;
DesignDataDriver.GetrecCommand := RuntimeDataDriver.GetrecCommand;
if DesignDataDriver is TCustomSQLDataDriverEh then
begin
TCustomSQLDataDriverEh(DesignDataDriver).SpecParams := TCustomSQLDataDriverEh(RuntimeDataDriver).SpecParams;
TCustomSQLDataDriverEh(DesignDataDriver).DynaSQLParams := TCustomSQLDataDriverEh(RuntimeDataDriver).DynaSQLParams;
end;
end;
function TDesignDataBaseEh.BuildObjectTree(List: TList): Boolean;
begin
Result := False;
end;
function TDesignDataBaseEh.BuildUpdates(
DataDriver: TCustomSQLDataDriverEh): Boolean;
begin
Result := False;
end;
function TDesignDataBaseEh.CreateDesignCopy(
RTDataDriver: TCustomSQLDataDriverEh): TCustomSQLDataDriverEh;
begin
Result := nil;
end;
function TDesignDataBaseEh.CreateReader(SQL: String;
FParams: TParamsArr): TDataSet;
begin
Result := nil;
end;
function TDesignDataBaseEh.DesignDataBaseConnetionEqual(
DataDriver: TCustomSQLDataDriverEh): Boolean;
begin
Result := False;
end;
function TDesignDataBaseEh.Execute(Command: TCustomSQLCommandEh;
var Cursor: TDataSet; var FreeOnEof: Boolean): Integer;
begin
Result := 0;
end;
function TDesignDataBaseEh.Execute(SQLText: String;
CommandType: TSQLCommandTypeEh; VarParams: Variant;
var Cursor: TDataSet): Integer;
begin
Result := 0;
end;
function TDesignDataBaseEh.CreateTreeDataSet: TMemTableEh;
begin
Result := TMemTableEh.Create(Self);
with Result do
begin
Name := 'mtDBTree';
FieldDefs.Add('Id', ftAutoInc);
FieldDefs.Add('RefParent', ftInteger);
FieldDefs.Add('Name', ftString, 500);
FieldDefs.Add('ChieldCount', ftInteger);
FieldDefs.Add('Description', ftString, 500);
FieldDefs.Add('RefData', ftUnknown);
FieldDefs.Add('ImageIndex', ftInteger);
TreeList.KeyFieldName := 'Id';
TreeList.RefParentFieldName := 'RefParent';
TreeList.DefaultNodeExpanded := False;
TreeList.DefaultNodeHasChildren := True;
TreeList.Active := True;
OnTreeNodeExpanding := mtDBTreeExpanding;
CreateDataSet;
end;
end;
function TDesignDataBaseEh.GetObjectTreeDataSet: TDataSet;
var
List: TObjectList;
i: Integer;
begin
if not FTreeDataSet.IsEmpty then
begin
Result := FTreeDataSet;
Exit;
end;
FTreeDataSet.TreeList.DefaultNodeHasChildren := True;
List := TObjectList.Create(False);
try
try
if not GetConnected then
SetConnected(True);
BuildObjectTree(List);
except
on E: Exception do
Application.HandleException(E);
end;
FTreeDataSet.DisableControls;
try
// mtDBTreeLoading := True;
for i := 0 to List.Count-1 do
begin
FTreeDataSet.Append;
FTreeDataSet.Fields[0].Value := Null;
FTreeDataSet.Fields[1].Value := Null;
FTreeDataSet.Fields[2].Value := TSQLTreeNode(List[i]).FName;
FTreeDataSet.Fields[3].Value := 0;
FTreeDataSet.Fields[4].Value := TSQLTreeNode(List[i]).FName;
FTreeDataSet.Fields[5].Value := RefObjectToVariant(List[i]);
FTreeDataSet.Fields[6].Value := TSQLTreeNode(List[i]).FImageIndex;
FTreeDataSet.Post;
end;
FTreeDataSet.First;
finally
FTreeDataSet.EnableControls;
end;
Result := FTreeDataSet;
finally
// mtDBTreeLoading := False;
List.Free;
end;
end;
procedure TDesignDataBaseEh.mtDBTreeExpanding(Sender: TObject;
RecordNumber: Integer; var AllowExpansion: Boolean);
function AddChilds(Node: TObject; RefParent: Variant): Integer;
var
List: Tlist;
i: Integer;
begin
Result := 0;
if (Node <> nil) and ((Node as TSQLTreeNode) <> nil) then
with Node as TSQLTreeNode do
begin
if not FNodesLoaded and (FNodesTemplate <> nil) then
begin
List := FNodesTemplate.FNodeManager.CreateNodes(Node as TSQLTreeNode);
// mtDBTreeLoading := True;
FTreeDataSet.TreeList.DefaultNodeHasChildren := FNodesTemplate.FHasNodes;
for i := 0 to List.Count-1 do
begin
FTreeDataSet.Append;
FTreeDataSet.Fields[0].Value := Null;
FTreeDataSet.Fields[1].Value := RefParent;
FTreeDataSet.Fields[2].Value := TSQLTreeNode(List[i]).FName;
FTreeDataSet.Fields[3].Value := 0;
FTreeDataSet.Fields[4].Value := TSQLTreeNode(List[i]).FName;
FTreeDataSet.Fields[5].Value := RefObjectToVariant(List[i]);
FTreeDataSet.Fields[6].Value := TSQLTreeNode(List[i]).FImageIndex;
FTreeDataSet.Post;
Inc(Result);
end;
List.Free;
end;
FNodesLoaded := True;
// mtDBTreeLoading := False;
end;
end;
var
Id, ChildCount: Integer;
OldBM, RNBM: TBookmarkStr;
begin
FTreeDataSet.DisableControls;
try
// mtDBTreeLoading := True;
OldBM := FTreeDataSet.Bookmark;
FTreeDataSet.RecNo := RecordNumber;
RNBM := FTreeDataSet.Bookmark;
Id := FTreeDataSet['ID'];
if FTreeDataSet.TreeNodeHasChildren and (FTreeDataSet.TreeNodeChildCount = 0) then
begin
ChildCount := AddChilds(VariantToRefObject(FTreeDataSet['RefData']), Id);
FTreeDataSet.Bookmark := RNBM;
FTreeDataSet.TreeNodeHasChildren := (ChildCount > 0);
FTreeDataSet.Edit;
FTreeDataSet['ChieldCount'] := ChildCount;
FTreeDataSet.Post;
end;
if DataSetBookmarkValid(FTreeDataSet, OldBM) then
FTreeDataSet.Bookmark := OldBM;
finally
FTreeDataSet.EnableControls;
// mtDBTreeLoading := False;
end;
end;
procedure TDesignDataBaseEh.ResetDesignInfo;
begin
FTreeDataSet.EmptyTable;
end;
{ TSQLDataEditWin }
var
DataTypeNames :array [TFieldType] of String = (
'ftUnknown', 'ftString', 'ftSmallint', 'ftInteger', 'ftWord',
'ftBoolean', 'ftFloat', 'ftCurrency', 'ftBCD', 'ftDate', 'ftTime', 'ftDateTime',
'ftBytes', 'ftVarBytes', 'ftAutoInc', 'ftBlob', 'ftMemo', 'ftGraphic', 'ftFmtMemo',
'ftParadoxOle', 'ftDBaseOle', 'ftTypedBinary', 'ftCursor', 'ftFixedChar', 'ftWideString',
'ftLargeint', 'ftADT', 'ftArray', 'ftReference', 'ftDataSet', 'ftOraBlob', 'ftOraClob',
'ftVariant', 'ftInterface', 'ftIDispatch', 'ftGuid'
{$IFDEF EH_LIB_6}, 'ftTimeStamp', 'ftFMTBcd'{$ENDIF}
{$IFDEF EH_LIB_10}, 'ftFixedWideChar', 'ftWideMemo', 'ftOraTimeStamp', 'ftOraInterval'{$ENDIF}
);
function EditSQLDataDriverEh(DataDriver: TCustomSQLDataDriverEh): Integer;
var
Win: TSQLDataEditWin;
// IDDB: IDesignDataBaseEh;
begin
Result := 0;
Win := TSQLDataEditWin.Create(Application);
SQLDataEditWin := Win;
if DataDriver.GetDesignDataBase = nil then Exit;
Win.DataDriver := DataDriver;
Win.DesignDriver := TDesignDataBaseEh(Win.DataDriver.DesignDataBase).CreateDesignCopy(DataDriver);
// Win.DesignDriver := IDDB.CreateDesignCopy(DataDriver);
// IDDB := nil;
Win.DesignDriver.OnExecuteCommand := Win.ExecuteCommand;
Win.DesignDriver.DesignDataBase := DataDriver.GetDesignDataBase;
Win.DesignDataBase := TDesignDataBaseEh(DataDriver.GetDesignDataBase);
Win.DesignDataBase.AssignToDesignDataDriver(Win.DesignDriver, Win.DataDriver);
// Win.BuildObjectTree;
// ShowMessage('Win.SetObjectTreeParams');
Win.SetObjectTreeParams;
Win.MemTableEh1.DataDriver := Win.DesignDriver;
Win.AssignToDesignControls;
Result := Win.ShowModal;
if Result = mrOk then
begin
if Win.DesignDataBase = nil then
DataDriver.GetDesignDataBase;
if Win.DesignDataBase <> nil then
Win.DesignDataBase.AssignFromDesignDataDriver(Win.DesignDriver, Win.DataDriver);
if (DataDriver.Owner is TForm) and (TForm(DataDriver.Owner).Designer <> nil) then
TForm(DataDriver.Owner).Designer.Modified;
end;
Win.DesignDriver.Free;
Win.Free;
end;
procedure TSQLDataEditWin.FormCreate(Sender: TObject);
begin
Font := Screen.IconFont;
FrameInsertSQL.mtParams.CreateDataSet;
FrameInsertSQL.Created;
FrameUpdateSQL.mtParams.CreateDataSet;
FrameUpdateSQL.Created;
FrameDeleteSQL.mtParams.CreateDataSet;
FrameDeleteSQL.Created;
FrameGetRecSQL.mtParams.CreateDataSet;
FrameGetRecSQL.Created;
(* mtDBTree.TreeList.KeyFieldName := 'Id';
mtDBTree.TreeList.RefParentFieldName := 'RefParent';
mtDBTree.TreeList.DefaultNodeExpanded := False;
mtDBTree.TreeList.DefaultNodeHasChildren := True;
mtDBTree.TreeList.Active := True;
mtDBTree.OnTreeNodeExpanding := mtDBTreeExpanding;
*)
end;
destructor TSQLDataEditWin.Destroy;
begin
mtTreeDetail.DestroyTable;
mtDBTree.DestroyTable;
MemTableEh1.DestroyTable;
inherited Destroy;
end;
function TSQLDataEditWin.ExecuteCommand(DataDriver: TCustomSQLDataDriverEh;
Command: TCustomSQLCommandEh; var Cursor: TDataSet; var FreeOnEof: Boolean): Integer;
begin
// FreeOnEof := True;
// Result := (DesignDriver.DesignDataBase as IDesignDataBaseEh).Execute(Command, Cursor);
Result := TDesignDataBaseEh(DesignDriver.DesignDataBase).Execute(Command, Cursor, FreeOnEof);
end;
{
procedure TSQLDataEditWin.SetDataDriver(const Value: TCustomSQLDataDriverEh);
var
i: Integer;
begin
FDataDriver := Value;
if FDataDriver.DesignDataBase = nil then
begin
for i := 0 to GetDesignDataBaseList.Count-1 do
if TDesignDataBaseEh(GetDesignDataBaseList[i]).DesignDataBaseConnetionEqual(DataDriver) then
begin
DataDriver.DesignDataBase := IDesignDataBaseEh(GetDesignDataBaseList[i]);
Exit;
end;
DataDriver.DesignDataBase := DataDriver.CreateDesignDataBase;
end;
end;
}
procedure TSQLDataEditWin.bExecuteClick(Sender: TObject);
//var
// ds: TDataSet;
begin
// DataDriver.DesignDataBase.Execute(DataDriver.SelectCommand, ds);
mtParams.CheckBrowseMode;
MemTableEh1.Close;
AssignToDesignDriver;
// MemTableEh1.ProviderDataSet := ds;
MemTableEh1.Open;
end;
procedure TSQLDataEditWin.AssignToDesignControls;
var
i: Integer;
Params: TParams;
begin
if DesignDriver <> nil then
begin
mtParams.EmptyTable;
Memo1.Lines.Text := DesignDriver.SelectCommand.CommandText.Text;
// Params := TParams.Create;
try
Params := DesignDriver.SelectCommand.GetParams;//(Params);
for i := 0 to Params.Count-1 do
begin
mtParams.AppendRecord(
[Params[i].Name,
DataTypeNames[Params[i].DataType],
Params[i].Text
]);
end;
finally
// Params.Free;
end;
FrameInsertSQL.AssignToDesignControls(DesignDriver.InsertCommand);
FrameUpdateSQL.AssignToDesignControls(DesignDriver.UpdateCommand);
FrameDeleteSQL.AssignToDesignControls(DesignDriver.DeleteCommand);
FrameGetRecSQL.AssignToDesignControls(DesignDriver.GetRecCommand);
mSpecParams.Lines := TCustomSQLDataDriverEh(DesignDriver).SpecParams;
MemoUpdateFields.Lines.CommaText := TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.UpdateFields;
MemoKeyFields.Lines.CommaText := TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.KeyFields;
dbeUpdateTable.Text := TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.UpdateTable;
cbDinaUpdateSQL.Checked := dsoDynamicSQLUpdateEh in TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.Options;
cbDinaInsertSQL.Checked := dsoDynamicSQLInsertEh in TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.Options;
cbDinaDeleteSQL.Checked := dsoDynamicSQLDeleteEh in TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.Options;
end;
end;
procedure TSQLDataEditWin.AssignToDesignDriver;
var
i: Integer;
Params: TParams;
begin
if DesignDriver <> nil then
begin
Params := TParams.Create;
try
//Select
DesignDriver.SelectCommand.CommandText.Text := Memo1.Lines.Text;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -