📄 editorquery.pas
字号:
if(DMGUI.UseSQLSyntaxHighlighting)then
begin
SQLMemo.Hide;
SQLSynEdit.Show;
end
else
begin
SQLMemo.Show;
SQLSynEdit.Hide;
end;
{$ENDIF}
end;
procedure TEditorQueryForm.FormDestroy(Sender: TObject);
begin
if(Visible)then
DMMain.SaveWinPos(self, True);
//Free the Hint Window
theHintWindow.ReleaseHandle;
end;
procedure TEditorQueryForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
//Apply last changes
if(OutputClientDataSet.Active)then
if(OutputClientDataSet.ChangeCount>0)then
OutputClientDataSet.ApplyUpdates(-1);
Action:=caFree;
end;
procedure TEditorQueryForm.FormResize(Sender: TObject);
begin
DBConnEd.Width:=TopPnl.Width-502;
GetDBConnSBtn.Left:=DBConnEd.Left+DBConnEd.Width+5;
end;
procedure TEditorQueryForm.FormShow(Sender: TObject);
begin
DMMain.RestoreWinPos(self, True);
FormResize(self);
end;
function TEditorQueryForm.SetTable(theTable: TEERTable): Boolean;
var theTables: TStringList;
i, j: integer;
s: string;
begin
SetTable:=False;
DBGrid.Columns.Clear;
DBMemo.DataField:='';
DBImage.DataField:='';
if(theTable=nil)then
Exit;
theEERTable:=theTable;
theEERModel:=TEERModel(theEERTable.Parent);
theTables:=TStringList.Create;
try
TableCBox.Items.Clear;
theEERModel.GetEERObjectNameList([EERTable], theTables);
TableCBox.Items.Assign(theTables);
TableCBox.ItemIndex:=TableCBox.Items.IndexOf(theEERTable.ObjName);
finally
theTables.Free;
end;
//when not connected to DB, connect now
if(DMDB.CurrentDBConn=nil)then
begin
DMDB.GetDBConnButtonClick(self, theEERModel.DefQueryDBConn);
if(DMDB.CurrentDBConn<>nil)then
begin
theEERModel.DefQueryDBConn:=DMDB.CurrentDBConn.Name;
SetTable:=True;
end
else
Exit;
end
else
begin
SetTable:=True;
//Apply changes before closing
if(OutputClientDataSet.Active)then
if(OutputClientDataSet.ChangeCount>0)then
OutputClientDataSet.ApplyUpdates(-1);
OutputQry.Close;
OutputClientDataSet.Close;
end;
DBConnEd.Text:=TDBConn(DMDB.CurrentDBConn).Name;
s:='SELECT * '+#13#10+
'FROM '+theEERTable.ObjName;
for i:=0 to theEERTable.Indices.Count-1 do
begin
if(CompareText(TEERIndex(theEERTable.Indices[i]).IndexName,
'PRIMARY')=0)then
begin
if(TEERIndex(theEERTable.Indices[i]).Columns.Count>0)then
s:=s+#13#10+
'ORDER BY ';
for j:=0 to TEERIndex(theEERTable.Indices[i]).Columns.Count-1 do
begin
s:=s+TEERColumn(theEERTable.GetColumnByID(StrToInt(TEERIndex(theEERTable.Indices[i]).Columns[j]))).ColName;
if(j<TEERIndex(theEERTable.Indices[i]).Columns.Count-1)then
s:=s+', ';
end;
break;
end;
end;
SetSQLMemoText(s);
ExecSQLBtnClick(self);
end;
procedure TEditorQueryForm.SizeGridCols;
var i: integer;
theColumn: TColumn;
theSize: TSize;
begin
DBGrid.Columns.Clear;
for i:=0 to OutputClientDataSet.Fields.Count-1 do
begin
theColumn:=DBGrid.Columns.Add;
theColumn.Field:=OutputClientDataSet.Fields[i];
theSize:=DBGrid.Canvas.TextExtent(theColumn.Field.DisplayName);
if(theColumn.Field.DataType=ftSmallint)or
(theColumn.Field.DataType=ftInteger)or
(theColumn.Field.DataType=ftWord)or
(theColumn.Field.DataType=ftLargeint)or
(theColumn.Field.DataType=ftAutoInc)then
theColumn.Width:=60
else if(theColumn.Field.DataType=ftString)or
(theColumn.Field.DataType=ftFixedChar)or
(theColumn.Field.DataType=ftWideString)then
theColumn.Width:=120
else if(theColumn.Field.DataType=ftDateTime)or
(theColumn.Field.DataType=ftTimeStamp)then
theColumn.Width:=110
else if(theColumn.Field.DataType=ftDate)or
(theColumn.Field.DataType=ftTime)then
theColumn.Width:=80
else
theColumn.Width:=50;
if(theColumn.Width<theSize.Cx+5)then
theColumn.Width:=theSize.Cx+5;
end;
DBGridColEnter(self);
end;
procedure TEditorQueryForm.ApplyChanges;
begin
//
end;
procedure TEditorQueryForm.GetDBConnSBtnClick(Sender: TObject);
begin
SetTable(theEERTable);
end;
procedure TEditorQueryForm.TableCBoxChange(Sender: TObject);
var theTable: TEERTable;
begin
theTable:=TEERModel(theEERTable.Parent).GetEERObjectByName(EERTable, TableCBox.Items[TableCBox.ItemIndex]);
if(theTable<>nil)then
SetTable(theTable);
end;
procedure TEditorQueryForm.SubmitBtnClick(Sender: TObject);
begin
if(OutputClientDataSet.Active)then
if(OutputClientDataSet.ChangeCount>0)then
OutputClientDataSet.ApplyUpdates(-1);
end;
procedure TEditorQueryForm.CancelBtnClick(Sender: TObject);
begin
if(OutputClientDataSet.Active)then
begin
OutputClientDataSet.Close;
OutputClientDataSet.Open;
end;
end;
procedure TEditorQueryForm.DBGridColEnter(Sender: TObject);
var theStream: TMemoryStream;
thePicture: TPicture;
//i, toRead: integer;
theBuffer: Array [0..1024] of Char;
theText: Array [0..2048] of Char;
begin
DBMemo.DataField:='';
DBImage.DataField:='';
if(DBGrid.SelectedField<>nil)then
begin
//String / Text
if(DBGrid.SelectedField.ClassNameIs('TMemoField'))or
(DBGrid.SelectedField.ClassNameIs('TStringField'))or
(DBGrid.SelectedField.ClassNameIs('TWideStringField'))or
(DBGrid.SelectedField.ClassNameIs('TAutoIncField'))then
begin
BlobPageControl.Activepage:=TextSheet;
DBMemo.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
end
//Numeric
else if(DBGrid.SelectedField.ClassNameIs('TAutoIncField'))or
(DBGrid.SelectedField.ClassNameIs('TBooleanField'))or
(DBGrid.SelectedField.ClassNameIs('TFloatField'))or
(DBGrid.SelectedField.ClassNameIs('TGuidField'))or
(DBGrid.SelectedField.ClassNameIs('TIntegerField'))or
(DBGrid.SelectedField.ClassNameIs('TLargeintField'))or
(DBGrid.SelectedField.ClassNameIs('TSmallIntField'))then
begin
BlobPageControl.Activepage:=TextSheet;
DBMemo.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
end
else if(DBGrid.SelectedField.ClassNameIs('TGraphicField'))or
(DBGrid.SelectedField.ClassNameIs('TBlobField'))then
begin
thePicture:=TPicture.Create;
try
theStream:=TMemoryStream.Create;
try
try
DeleteFile('blob_tmp.png');
//TBlobField(DBGrid.SelectedField).SaveToStream(theStream);
TBlobField(DBGrid.SelectedField).SaveToFile('blob_tmp.png');
//Try to display as Image
thePicture.LoadFromFile('blob_tmp.png');
DBImage.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
BlobPageControl.Activepage:=ImgSheet;
except
//if it is in another format, display as blob
BlobMemo.Lines.LoadFromFile('blob_tmp.png');
//Display Hex Data
BlobHexMemo.Text:='';
TBlobField(DBGrid.SelectedField).SaveToStream(theStream);
{toRead:=theStream.Size;
if(toRead>1024)then
toRead:=1024;
theStream.Read(theBuffer, 1024);}
BinToHex(theBuffer, theText, 1024);
BlobHexMemo.Text:=String(theText);
BlobPageControl.Activepage:=BlobSheet;
end;
finally
theStream.Free;
DeleteFile('blob_tmp.png');
end;
finally
thePicture.Free;
end;
end
else
begin
BlobPageControl.Activepage:=ClearSheet;
end;
end;
end;
procedure TEditorQueryForm.BlobClearBtnClick(Sender: TObject);
begin
if(DBGrid.SelectedField=nil)then
Exit;
if(Not(OutputClientDataSet.State=dsEdit))or
(Not(OutputClientDataSet.State=dsInsert))then
OutputClientDataSet.Edit;
DBGrid.SelectedField.Clear;
end;
procedure TEditorQueryForm.BlobOpenBtnClick(Sender: TObject);
var theOpenDialog: TOpenDialog;
RecentOpenBlobFieldDir: string;
theIni: TMemIniFile;
thePicture: TPicture;
begin
if(DBGrid.SelectedField=nil)then
Exit;
if(Not(OutputClientDataSet.Active))then
Exit;
if(Not(OutputClientDataSet.State=dsEdit))or
(Not(OutputClientDataSet.State=dsInsert))then
OutputClientDataSet.Edit;
//Open IniFile
theIni:=TMemIniFile.Create(DMMain.SettingsPath+DMMain.ProgName+'_Settings.ini');
try
theOpenDialog:=TOpenDialog.Create(nil);
try
{$IFDEF MSWINDOWS}
//On Windows use native Win32 Open Dlg
theOpenDialog.UseNativeDialog:=True;
theOpenDialog.OnShow:=DMMain.OnOpenSaveDlgShow;
{$ENDIF}
theOpenDialog.Title:=DMMain.GetTranslatedMessage('Open a File ...', 89);
theOpenDialog.DefaultExt:='';
theOpenDialog.Filter:=DMMain.GetTranslatedMessage('All files', 90)+' (*.*)|*.*';
theOpenDialog.Width:=600;
theOpenDialog.Height:=450;
//Get last dir
RecentOpenBlobFieldDir:=theIni.ReadString('RecentDirectories', 'RecentOpenBlobFieldDir', '');
if(DirectoryExists(RecentOpenBlobFieldDir))then
theOpenDialog.InitialDir:=RecentOpenBlobFieldDir
else
theOpenDialog.InitialDir:='';
if(theOpenDialog.Execute)then
begin
RecentOpenBlobFieldDir:=ExtractFilePath(theOpenDialog.Filename);
if(DBGrid.SelectedField.ClassNameIs('TBlobField'))or
(DBGrid.SelectedField.ClassParent.ClassNameIs('TBlobField'))then
begin
DBImage.DataField:='';
DBMemo.DataField:='';
//Memo Field
if(DBGrid.SelectedField.ClassNameIs('TMemoField'))then
begin
TMemoField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename);
DBMemo.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
end
else
//Blob or Image Field
begin
TBlobField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename);
thePicture:=TPicture.Create;
try
try
//try to open as Image
thePicture.LoadFromFile(theOpenDialog.Filename);
DBImage.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
BlobPageControl.ActivePage:=ImgSheet;
except
BlobPageControl.ActivePage:=BlobSheet;
TBlobField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename);
DBGridColEnter(self);
end;
finally
thePicture.Free;
end;
end;
end;
{if(DBGrid.SelectedField.ClassNameIs('TMemoField'))then
TMemoField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename)
else if(DBGrid.SelectedField.ClassNameIs('TGraphicField'))then
TGraphicField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename)
else if(DBGrid.SelectedField.ClassNameIs('TBlobField'))then
TBlobField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename);}
theIni.WriteString('RecentDirectories', 'RecentOpenBlobFieldDir', RecentOpenBlobFieldDir);
end;
finally
theOpenDialog.Free;
end;
theIni.UpdateFile;
finally
theIni.Free;
end;
end;
procedure TEditorQueryForm.StoreBlobBtnClick(Sender: TObject);
var theSaveDialog: TSaveDialog;
RecentSaveBlobFieldDir, theFileName: string;
theIni: TMemIniFile;
theStringList: TStringList;
begin
if(DBGrid.SelectedField=nil)then
Exit;
if(Not(OutputClientDataSet.Active))then
Exit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -