📄 sqldriverediteh.pas
字号:
for i := 1 to mtParams.RecordCount do
begin
mtParams.RecNo := i;
Params.CreateParam(
ftString, mtParams['ParName'], ptInput).Text := mtParams['ParValue'];
end;
DesignDriver.SelectCommand.SetParams(Params);
//Insert
DesignDriver.InsertCommand.CommandText.Text := FrameInsertSQL.RichEdit1.Lines.Text;
Params.Clear;
for i := 1 to FrameInsertSQL.mtParams.RecordCount do
begin
FrameInsertSQL.mtParams.RecNo := i;
Params.CreateParam(
ftString, FrameInsertSQL.mtParams['ParName'], ptInput).Text := VarToStr(FrameInsertSQL.mtParams['ParValue']);
end;
DesignDriver.InsertCommand.SetParams(Params);
//Update
DesignDriver.UpdateCommand.CommandText.Text := FrameUpdateSQL.RichEdit1.Lines.Text;
Params.Clear;
for i := 1 to FrameUpdateSQL.mtParams.RecordCount do
begin
FrameUpdateSQL.mtParams.RecNo := i;
Params.CreateParam(
ftString, FrameUpdateSQL.mtParams['ParName'], ptInput).Text := VarToStr(FrameUpdateSQL.mtParams['ParValue']);
end;
DesignDriver.UpdateCommand.SetParams(Params);
//Delete
DesignDriver.DeleteCommand.CommandText.Text := FrameDeleteSQL.RichEdit1.Lines.Text;
Params.Clear;
for i := 1 to FrameDeleteSQL.mtParams.RecordCount do
begin
FrameDeleteSQL.mtParams.RecNo := i;
Params.CreateParam(
ftString, FrameDeleteSQL.mtParams['ParName'], ptInput).Text := VarToStr(FrameDeleteSQL.mtParams['ParValue']);
end;
DesignDriver.DeleteCommand.SetParams(Params);
//GetRec
DesignDriver.GetRecCommand.CommandText.Text := FrameGetRecSQL.RichEdit1.Lines.Text;
Params.Clear;
for i := 1 to FrameGetRecSQL.mtParams.RecordCount do
begin
FrameGetRecSQL.mtParams.RecNo := i;
Params.CreateParam(
ftString, FrameGetRecSQL.mtParams['ParName'], ptInput).Text := VarToStr(FrameGetRecSQL.mtParams['ParValue']);
end;
DesignDriver.GetRecCommand.SetParams(Params);
TCustomSQLDataDriverEh(DesignDriver).SpecParams := mSpecParams.Lines;
TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.UpdateFields := MemoUpdateFields.Lines.CommaText;
TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.KeyFields := MemoKeyFields.Lines.CommaText;
TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.UpdateTable := dbeUpdateTable.Text;
TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.Options := [];
if cbDinaUpdateSQL.Checked then
TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.Options :=
TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.Options + [dsoDynamicSQLUpdateEh];
if cbDinaInsertSQL.Checked then
TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.Options :=
TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.Options + [dsoDynamicSQLInsertEh];
if cbDinaDeleteSQL.Checked then
TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.Options :=
TCustomSQLDataDriverEh(DesignDriver).DynaSQLParams.Options + [dsoDynamicSQLDeleteEh];
finally
Params.Free;
end;
end;
end;
procedure TSQLDataEditWin.sbHideShowClick(Sender: TObject);
begin
TabSheet1.DisableAlign;
try
if Panel3Width > 0 then
begin
PanelParams.Left := PanelParams.Left + (PanelParams.Width - Panel3Width);
PanelParams.Width := Panel3Width;
Panel3Width := -1;
end else
begin
Panel3Width := PanelParams.Width;
PanelParams.Left := PanelParams.Left + PanelParams.Width;
PanelParams.Width := 0;
end;
finally
TabSheet1.EnableAlign;
end;
end;
procedure TSQLDataEditWin.Splitter2CanResize(Sender: TObject;
var NewSize: Integer; var Accept: Boolean);
begin
Panel3Width := -1;
end;
procedure TSQLDataEditWin.bBuildUpdatesClick(Sender: TObject);
begin
AssignToDesignDriver;
if Assigned(DataDriver.DesignDataBase) then
// if (DataDriver.DesignDataBase as IDesignDataBaseEh).BuildUpdates(DesignDriver) then
if TDesignDataBaseEh(DataDriver.DesignDataBase).BuildUpdates(DesignDriver) then
begin
AssignToDesignControls;
end;
end;
procedure TSQLDataEditWin.MemTableEh1AfterOpen(DataSet: TDataSet);
var
i: Integer;
begin
for i := 0 to DBGridEh1.Columns.Count-1 do
begin
DBGridEh1.Columns[i].MaxWidth := 200;
DBGridEh1.Columns[i].MaxWidth := 0;
end;
end;
function SubstitueFileds(FMemRec: TMemoryRecordEh; FTableFilter: String): String;
var
i: Integer;
begin
Result := FTableFilter;
for i := 0 to FMemRec.DataStruct.Count-1 do
begin
Result := StringReplace(Result, '%[' + FMemRec.DataStruct[i].FieldName + ']',
VarToStr(FMemRec.DataValues[FMemRec.DataStruct[i].FieldName, dvvValueEh]),
[rfReplaceAll, rfIgnoreCase]);
end;
end;
procedure TSQLDataEditWin.DrawCaretPosIndicator;
var
XPos, YPos: Integer;
begin
with Memo1.CaretPos do
begin
FSQLCanvas.Control := Memo1;
FSQLCanvas.Font := Memo1.Font;
YPos := (Y+1) * FCharHeight;
XPos := FSQLCanvas.TextWidth(Copy(Memo1.Lines[Y], 1, X)) - 3 ;
FSQLCanvas.Draw(XPos ,YPos, Image1.Picture.Graphic);
end;
end;
procedure TSQLDataEditWin.FormShow(Sender: TObject);
begin
FSQLCanvas := TControlCanvas.Create;
FSQLCanvas.Control := Memo1;
FCharHeight := FSQLCanvas.TextHeight('0');
end;
procedure TSQLDataEditWin.FormDestroy(Sender: TObject);
begin
mtDBTree.Close;
mtTreeDetail.Close;
MemTableEh1.Close;
FSQLCanvas.Free;
gridTreeDetail.DataSource := nil;
gridTreeDetail.Free; gridTreeDetail := nil;
end;
procedure TSQLDataEditWin.Memo1Exit(Sender: TObject);
begin
DrawCaretPosIndicator;
end;
procedure TSQLDataEditWin.Memo1Enter(Sender: TObject);
begin
Memo1.Invalidate;
end;
(*procedure TSQLDataEditWin.InsertText(Text: string; AddComma: Boolean);
var
StartSave: Integer;
S: string;
begin
S := Memo1.Text;
StartSave := Memo1.SelStart;
if (S <> '') and (StartSave > 0) and not (S[StartSave] in [' ','(']) and
not (Text[1] = ' ') then
begin
if AddComma and (S[StartSave] <> ',') then
Text := ', '+Text else
Text := ' ' + Text;
end;
System.Insert(Text, S, StartSave+1);
Memo1.Lines.Text := S;
Memo1.SelStart := StartSave + Length(Text);
Memo1.Update;
DrawCaretPosIndicator;
end;
*)
procedure TSQLDataEditWin.mtDBTreeExpanding(Sender: TObject;
RecordNumber: Integer; var AllowExpansion: Boolean);
var
vDBTree: TMemTableEh;
function AddChilds(Node: TObject; RefParent: Variant): Integer;
var
List: Tlist;
i: Integer;
// TreeNode: TTreeNode;
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;
vDBTree.TreeList.DefaultNodeHasChildren := FNodesTemplate.FHasNodes;
for i := 0 to List.Count-1 do
begin
vDBTree.Append;
vDBTree.Fields[0].Value := Null;
vDBTree.Fields[1].Value := RefParent;
vDBTree.Fields[2].Value := TSQLTreeNode(List[i]).FName;
vDBTree.Fields[3].Value := 0;
vDBTree.Fields[4].Value := TSQLTreeNode(List[i]).FName;
vDBTree.Fields[5].Value := RefObjectToVariant(List[i]);
vDBTree.Fields[6].Value := TSQLTreeNode(List[i]).FImageIndex;
vDBTree.Post;
// TreeNode := TreeView1.Items.AddChild(Node, TSQLTreeNode(List[i]).FName);
// TreeNode.HasChildren := (TSQLTreeNode(List[i]).FNodesTemplate <> nil);
// TreeNode.Data := List[i];
Inc(Result);
end;
List.Free;
end;
FNodesLoaded := True;
mtDBTreeLoading := False;
// Node.HasChildren := (Node.Count > 0);
end;
end;
var
Id, ChildCount: Integer;
// Path: String;
OldBM, RNBM: TBookmarkStr;
begin
vDBTree := TMemTableEh(dsDBTree.DataSet);
vDBTree.DisableControls;
try
mtDBTreeLoading := True;
OldBM := vDBTree.Bookmark;
vDBTree.RecNo := RecordNumber;
RNBM := vDBTree.Bookmark;
Id := vDBTree['ID'];
// Path := vDBTree['FileDirPath'];
if vDBTree.TreeNodeHasChildren and (vDBTree.TreeNodeChildCount = 0) then
begin
ChildCount := AddChilds(VariantToRefObject(vDBTree['RefData']), Id);
vDBTree.Bookmark := RNBM;
// vDBTree.TreeNode.SortByFields('IsDir Desc, FileDirName');
vDBTree.TreeNodeHasChildren := (ChildCount > 0);
vDBTree.Edit;
vDBTree['ChieldCount'] := ChildCount;
vDBTree.Post;
end;
if DataSetBookmarkValid(vDBTree, OldBM) then
vDBTree.Bookmark := OldBM;
finally
vDBTree.EnableControls;
mtDBTreeLoading := False;
end;
end;
{function TSQLDataEditWin.DesignDataBase: TDesignDataBaseEh;
begin
Result := nil;
if Assigned(DataDriver) and Assigned(DataDriver.DesignDataBase) then
Result := DataDriver.DesignDataBase as TDesignDataBaseEh;
end;}
procedure TSQLDataEditWin.SetDesignDataBase(const Value: TDesignDataBaseEh);
begin
if FDesignDataBase <> Value then
begin
FDesignDataBase := Value;
if Value <> nil then Value.FreeNotification(Self);
DesignDatabaseChanged();
end;
end;
procedure TSQLDataEditWin.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and
(AComponent <> nil) and
(FDesignDataBase = AComponent)
then
begin
FDesignDataBase := nil;
DesignDatabaseChanged;
end;
end;
procedure TSQLDataEditWin.DesignDatabaseChanged;
begin
// bExecute.Enabled := (DesignDataBase <> nil) and DesignDataBase.Connected;
if (DesignDataBase <> nil) and DesignDataBase.Connected then
SetObjectTreeParams;
(* mtDBTree.EmptyTable;
mtDBTree.Close;
mtTreeDetail.EmptyTable;
if (DesignDataBase <> nil) and DesignDataBase.Connected then
BuildObjectTree;*)
end;
{ TCustomDBService }
constructor TCustomDBService.Create(ADesignDB: TDesignDataBaseEh);
begin
inherited Create;
FDesignDB := ADesignDB;
FMTList := TStringList.Create;
// FTempateList := ATempateList;
FTempateList := TStringList.Create;
FSQLRoot := CreateNode;// TSQLTreeNode.Create;
FSQLClassListNames := TStringList.Create;
FSQLClassListTexts := TStringList.Create;
FLoadedSQLClasses := TStringList.Create;
end;
destructor TCustomDBService.Destroy;
var
i: Integer;
begin
for i := 0 to FMTList.Count-1 do
FMTList.Objects[i].Free;
FreeAndNil(FMTList);
FreeAndNil(FSQLRoot);
FreeAndNil(FSQLClassListNames);
FreeAndNil(FSQLClassListTexts);
for i := 0 to FTempateList.Count-1 do
FTempateList.Objects[i].Free;
FreeAndNil(FTempateList);
FreeAndNil(FLoadedSQLClasses);
FreeAndNil(FIncrementObjectsList);
inherited Destroy;
end;
function TCustomDBService.CreateReader(SQL: String;
FParams: TParamsArr): TDataSet;
begin
Result := nil;
if FDesignDB <> nil then
Result := FDesignDB.CreateReader(SQL, FParams);
end;
procedure TCustomDBService.AddTemplate(Template: TSQLTreeNodeTemplate);
begin
FTempateList.AddObject(Template.FName, Template);
end;
function TCustomDBService.GetTemplate(TemplateName: String): TSQLTreeNodeTemplate;
begin
Result := nil;
if UpperCase(TemplateName) = UpperCase('_RecordAsList') then
Result := nil //RecordAsListTempate
else if FTempateList.IndexOf(TemplateName) > -1 then
Result := TSQLTreeNodeTemplate(FTempateList.Objects
[FTempateList.IndexOf(TemplateName)]);
end;
function TCustomDBService.CreateRootNodes: TList;
var
MemTable: TMemTableEh;
Reader: TDataSet;
// Node: IGetSQLTreeNode;
Node: TSQLTreeNode;
Template: TSQLTreeNodeTemplate;
begin
Result := TList.Create;
if FTempateList.Count = 0 then Exit;
Template := TSQLTreeNodeTemplate(FTempateList.Objects[0]);
MemTable := GetMemTable(Template.FNodesMemTableName);
Reader := CreateReader(SQLClassTextByName(Template.FNodesSQLClassName), Template.FParams);
if Reader = nil then Exit;
// if MemTable.Active
// then MemTable.LoadFromDataSet(Reader, -1, lmAppend, False)
// else MemTable.LoadFromDa
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -