mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2026-03-13 09:24:25 +08:00
1241 lines
37 KiB
Plaintext
1241 lines
37 KiB
Plaintext
unit Main;
|
|
|
|
|
|
// -------------------------------------
|
|
// HeidiSQL
|
|
// Main-window
|
|
// -------------------------------------
|
|
|
|
|
|
interface
|
|
|
|
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus,
|
|
StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns,
|
|
ActnList, ImgList, Registry, ShellApi, ToolWin, Clipbrd, db, DBCtrls,
|
|
SynMemo, synedit, smdbgrid, ZDataSet, ThemeMgr, ThemeMgrDB;
|
|
|
|
type
|
|
TMainForm = class(TForm)
|
|
MainMenu1: TMainMenu;
|
|
File1: TMenuItem;
|
|
FileNewItem: TMenuItem;
|
|
FileCloseItem: TMenuItem;
|
|
Window1: TMenuItem;
|
|
Help1: TMenuItem;
|
|
N1: TMenuItem;
|
|
FileExitItem: TMenuItem;
|
|
WindowCascadeItem: TMenuItem;
|
|
WindowTileItem: TMenuItem;
|
|
WindowArrangeItem: TMenuItem;
|
|
HelpAboutItem: TMenuItem;
|
|
Edit1: TMenuItem;
|
|
CopyItem: TMenuItem;
|
|
PasteItem: TMenuItem;
|
|
WindowMinimizeItem: TMenuItem;
|
|
StatusBar: TStatusBar;
|
|
ActionList1: TActionList;
|
|
EditCopy1: TEditCopy;
|
|
EditPaste1: TEditPaste;
|
|
FileNew1: TAction;
|
|
FileExit1: TAction;
|
|
WindowCascade1: TWindowCascade;
|
|
WindowTileHorizontal1: TWindowTileHorizontal;
|
|
WindowArrangeAll1: TWindowArrange;
|
|
WindowMinimizeAll1: TWindowMinimizeAll;
|
|
FileClose1: TWindowClose;
|
|
WindowTileVertical1: TWindowTileVertical;
|
|
WindowTileItem2: TMenuItem;
|
|
ImageList1: TImageList;
|
|
Extra1: TMenuItem;
|
|
FlushUserPrivileges1: TMenuItem;
|
|
N2: TMenuItem;
|
|
MenuCopyCSV: TMenuItem;
|
|
N3: TMenuItem;
|
|
MenuRefresh: TMenuItem;
|
|
MenuExport: TMenuItem;
|
|
MenuCreateDatabase: TMenuItem;
|
|
MenuCreateTable: TMenuItem;
|
|
N4: TMenuItem;
|
|
MenuDropDatabase: TMenuItem;
|
|
MenuDropTable: TMenuItem;
|
|
ResetWindowOptions1: TMenuItem;
|
|
N5: TMenuItem;
|
|
MenuImportTextFile: TMenuItem;
|
|
Timer1: TTimer;
|
|
Flush1: TMenuItem;
|
|
MenuFlushLogs: TMenuItem;
|
|
MenuFlushHosts: TMenuItem;
|
|
MenuFlushTables: TMenuItem;
|
|
MenuFlushTableswithreadlock: TMenuItem;
|
|
MenuFlushStatus: TMenuItem;
|
|
N6: TMenuItem;
|
|
MenuUserManager: TMenuItem;
|
|
MenuPreferences: TMenuItem;
|
|
N7: TMenuItem;
|
|
ImageList2: TImageList;
|
|
Readme1: TMenuItem;
|
|
N8: TMenuItem;
|
|
UserManager: TAction;
|
|
ShowAboutBox: TAction;
|
|
Diagnostics: TAction;
|
|
OptimizeTables1: TMenuItem;
|
|
ImExport1: TMenuItem;
|
|
CopyContentsasHTMLTable1: TMenuItem;
|
|
CopyHTMLtable: TAction;
|
|
Copy2CSV: TAction;
|
|
menuOnTheWeb: TMenuItem;
|
|
N9: TMenuItem;
|
|
N11: TMenuItem;
|
|
PrintList: TAction;
|
|
CopyTable: TAction;
|
|
ControlBar1: TControlBar;
|
|
ToolBar2: TToolBar;
|
|
ToolButton9: TToolButton;
|
|
FileCloseItem2: TToolButton;
|
|
ToolButton3: TToolButton;
|
|
ToolButton5: TToolButton;
|
|
ToolButton6: TToolButton;
|
|
ToolButton12: TToolButton;
|
|
ToolButton7: TToolButton;
|
|
ToolButton8: TToolButton;
|
|
ToolButton10: TToolButton;
|
|
ToolButton11: TToolButton;
|
|
ButtonCreateDatabase: TToolButton;
|
|
ButtonCreateTable: TToolButton;
|
|
ButtonDropDatabase: TToolButton;
|
|
ButtonDropTable: TToolButton;
|
|
ToolButton4: TToolButton;
|
|
ButtonRefresh: TToolButton;
|
|
ButtonReload: TToolButton;
|
|
ToolButton13: TToolButton;
|
|
ButtonImportTextfile: TToolButton;
|
|
ButtonExport: TToolButton;
|
|
ButtonUserManager: TToolButton;
|
|
ToolButton15: TToolButton;
|
|
ToolBarData: TToolBar;
|
|
DBNavigator1: TDBNavigator;
|
|
PanelLimit: TPanel;
|
|
CheckBoxLimit: TCheckBox;
|
|
EditLimitStart: TEdit;
|
|
EditLimitEnd: TEdit;
|
|
ButtonOK: TButton;
|
|
UpDownLimitStart: TUpDown;
|
|
UpDownLimitEnd: TUpDown;
|
|
SaveDialog1: TSaveDialog;
|
|
SQLFunctions: TPopupMenu;
|
|
MenuRun: TMenuItem;
|
|
MenuRunSelection: TMenuItem;
|
|
N10: TMenuItem;
|
|
menuclear: TMenuItem;
|
|
OpenDialog1: TOpenDialog;
|
|
PopupMenu6: TPopupMenu;
|
|
EditUndo1: TEditUndo;
|
|
ToolButton14: TToolButton;
|
|
ExecuteQuery: TAction;
|
|
ExecuteSelection: TAction;
|
|
MenuSetFilter: TMenuItem;
|
|
menucopy: TMenuItem;
|
|
N12: TMenuItem;
|
|
menupaste: TMenuItem;
|
|
menuload: TMenuItem;
|
|
menusave: TMenuItem;
|
|
MenuFind: TMenuItem;
|
|
FindDialog1: TFindDialog;
|
|
SaveDialog2: TSaveDialog;
|
|
ExportSettings1: TMenuItem;
|
|
Importsettings1: TMenuItem;
|
|
OpenDialog2: TOpenDialog;
|
|
menuForum: TMenuItem;
|
|
Copy2XML: TAction;
|
|
ExportData: TAction;
|
|
Exportdata1: TMenuItem;
|
|
CopyasXMLdata1: TMenuItem;
|
|
SearchReplace: TAction;
|
|
ReplaceDialog1: TReplaceDialog;
|
|
Searchandreplace1: TMenuItem;
|
|
ManualCopy: TAction;
|
|
ExecuteLine: TAction;
|
|
ExecuteLine1: TMenuItem;
|
|
HTMLview: TAction;
|
|
InsertFiles: TAction;
|
|
InsertfilesintoBLOBfields1: TMenuItem;
|
|
ExportTables: TAction;
|
|
ThemeManager1: TThemeManager;
|
|
DataSearch: TAction;
|
|
procedure ShowConnections(Sender: TObject);
|
|
procedure FileExit1Execute(Sender: TObject);
|
|
procedure connect(Sender: TObject);
|
|
procedure FlushClick(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
procedure FormShow(Sender: TObject);
|
|
procedure ButtonRefreshClick(Sender: TObject);
|
|
procedure ButtonCreateDatabaseClick(Sender: TObject);
|
|
procedure ButtonCreateTableClick(Sender: TObject);
|
|
procedure ButtonDropDatabaseClick(Sender: TObject);
|
|
procedure ButtonDropTableClick(Sender: TObject);
|
|
procedure ButtonAdvancedPropertiesClick(Sender: TObject);
|
|
procedure ResetWindowOptions1Click(Sender: TObject);
|
|
procedure ButtonImportTextfileClick(Sender: TObject);
|
|
procedure Timer1Timer(Sender: TObject);
|
|
procedure MenuPreferencesClick(Sender: TObject);
|
|
procedure Readme1Click(Sender: TObject);
|
|
procedure FormResize(Sender: TObject);
|
|
procedure UserManagerExecute(Sender: TObject);
|
|
procedure ShowAboutBoxExecute(Sender: TObject);
|
|
procedure DiagnosticsExecute(Sender: TObject);
|
|
procedure CopyHTMLtableExecute(Sender: TObject);
|
|
procedure Copy2CSVExecute(Sender: TObject);
|
|
procedure Save2CSVExecute(Sender: TObject);
|
|
procedure SaveHTMLTableExecute(Sender: TObject);
|
|
procedure PrintListExecute(Sender: TObject);
|
|
procedure CopyTableExecute(Sender: TObject);
|
|
procedure StatusBarDrawPanel(StatusBar: TStatusBar;
|
|
Panel: TStatusPanel; const Rect: TRect);
|
|
procedure showstatus(msg: string=''; panel : Integer=0; Icon: Integer=50);
|
|
procedure ButtonOKClick(Sender: TObject);
|
|
procedure CheckBoxLimitClick(Sender: TObject);
|
|
procedure LimitPanelEnter(Sender: TObject);
|
|
procedure LimitPanelExit(Sender: TObject);
|
|
procedure ButtonSaveSQLClick(Sender: TObject);
|
|
procedure ButtonLoadSQLFile(Sender: TObject);
|
|
procedure insertFunction(sender: TObject);
|
|
procedure menuclearClick(Sender: TObject);
|
|
procedure SQLFunctionsPopup(Sender: TObject);
|
|
procedure MenuSetFilterClick(Sender: TObject);
|
|
procedure OpenURL(Sender: TObject);
|
|
function mask(str: String) : String;
|
|
procedure FindDialog1Find(Sender: TObject);
|
|
procedure ExportSettings1Click(Sender: TObject);
|
|
procedure Importsettings1Click(Sender: TObject);
|
|
procedure LoadSQLFile(sender: TObject);
|
|
procedure ExecuteQueryExecute(Sender: TObject);
|
|
procedure ExecuteSelectionExecute(Sender: TObject);
|
|
procedure MenuFindClick(Sender: TObject);
|
|
procedure Save2XMLExecute(Sender: TObject);
|
|
procedure Copy2XMLExecute(Sender: TObject);
|
|
procedure DBNavigator1BeforeAction(Sender: TObject;
|
|
Button: TNavigateBtn);
|
|
procedure ExportDataExecute(Sender: TObject);
|
|
procedure SearchReplaceExecute(Sender: TObject);
|
|
procedure ReplaceDialog1Replace(Sender: TObject);
|
|
procedure ReplaceDialog1Find(Sender: TObject);
|
|
procedure ImportWizardExecute(Sender: TObject);
|
|
procedure ManualCopyExecute(Sender: TObject);
|
|
procedure ExecuteLineExecute(Sender: TObject);
|
|
procedure HTMLviewExecute(Sender: TObject);
|
|
procedure InsertFilesExecute(Sender: TObject);
|
|
procedure debug( msg : String = '' );
|
|
procedure ExportTablesExecute(Sender: TObject);
|
|
procedure DataSearchExecute(Sender: TObject);
|
|
|
|
private
|
|
{ Private declarations }
|
|
public
|
|
logsqlnum : Integer;
|
|
CSVSeparator, CSVEncloser,
|
|
CSVTerminator : String[10];
|
|
ConvertHTMLEntities : Boolean;
|
|
DefaultColWidth : Integer;
|
|
NativeFieldTypes : Boolean;
|
|
LanguageOffset : Integer;
|
|
DataAlwaysEditMode : Boolean;
|
|
DataNullBackground : TColor;
|
|
debugfile : TextFile;
|
|
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
highestcon : Integer; // Remember last connection
|
|
appstarted : Boolean = false; // see connections.pas
|
|
StatusText : String = 'Initializing...';
|
|
StatusIconIndex : Integer = 51;
|
|
loadsqlfile : boolean = true; // load sql-file into query-memo at startup?
|
|
appversion : String = '3.0 RC2 $Rev$';
|
|
|
|
const
|
|
appname = 'HeidiSQL';
|
|
regpath = 'Software\' + appname;
|
|
|
|
type TMyKey = record
|
|
Name : String;
|
|
_type : String;
|
|
Columns : TStringList
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses ChildWin, About, connections, exportsql, tbl_properties, loaddata,
|
|
usermanager, options, optimizetables, helpers,
|
|
printlist, copytable, insertfiles;
|
|
|
|
{$R *.DFM}
|
|
|
|
|
|
procedure TMainForm.ShowConnections(Sender: TObject);
|
|
begin
|
|
connform.showmodal;
|
|
end;
|
|
|
|
|
|
procedure TMainForm.showstatus(msg: string=''; panel : Integer=0; Icon: Integer=50);
|
|
begin
|
|
// show Message in statusbar
|
|
if panel = 2 then begin
|
|
StatusText := msg;
|
|
StatusIconIndex := Icon;
|
|
end
|
|
else
|
|
StatusBar.Panels[panel].Text := msg;
|
|
StatusBar.Repaint;
|
|
end;
|
|
|
|
procedure TMainForm.FileExit1Execute(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
procedure TMainForm.connect(Sender: TObject);
|
|
begin
|
|
// MDI-Child erzeugen und Verbindung aufbauen...
|
|
Screen.Cursor := crSQLWait;
|
|
{ create a new MDI child window }
|
|
TMDIChild.Create(Application);
|
|
Screen.Cursor := crDefault;
|
|
end;
|
|
|
|
procedure TMainForm.FlushClick(Sender: TObject);
|
|
var
|
|
flushwhat : String;
|
|
begin
|
|
if sender is TMenuItem then
|
|
flushwhat := (sender as TMenuItem).Caption
|
|
else if sender is TToolButton then
|
|
flushwhat := 'PRIVILEGES';
|
|
delete(flushwhat, pos('&', flushwhat), 1);
|
|
TMDIChild(Application.Mainform.ActiveMDIChild).ExecQuery('FLUSH ' + flushwhat);
|
|
end;
|
|
|
|
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
|
|
var
|
|
ws : String;
|
|
filename : String;
|
|
buffer : array[0..MAX_PATH] of char;
|
|
begin
|
|
if ActiveMDIChild <> nil then
|
|
ActiveMDIChild.Close;
|
|
|
|
if windowstate = wsNormal
|
|
then ws := 'Normal' else
|
|
if windowstate = wsMinimized
|
|
then ws := 'Minimized' else
|
|
if windowstate = wsMaximized
|
|
then ws := 'Maximized';
|
|
|
|
with TRegistry.Create do
|
|
begin
|
|
if OpenKey(regpath, true) then
|
|
begin
|
|
WriteString('windowstate', ws);
|
|
WriteInteger('windowleft', left);
|
|
WriteInteger('windowtop', top);
|
|
WriteInteger('windowwidth', width);
|
|
WriteInteger('windowheight', height);
|
|
// Position of Toolbars
|
|
WriteInteger('ToolBar2Left', ToolBar2.Left);
|
|
WriteInteger('ToolBarDataLeft', ToolBarData.Left);
|
|
WriteInteger('ToolBar2Top', ToolBar2.Top);
|
|
WriteInteger('ToolBarDataTop', ToolBarData.Top);
|
|
// Limit-options
|
|
WriteBool('DataLimit', CheckBoxLimit.Checked);
|
|
WriteInteger('DataLimitStart', UpDownLimitStart.Position);
|
|
WriteInteger('DataLimitEnd', UpDownLimitEnd.Position);
|
|
end;
|
|
CloseKey;
|
|
end;
|
|
GetTempPath(MAX_PATH, buffer);
|
|
filename := buffer+'\heidisql-preview.';
|
|
if FileExists(filename+'html') then
|
|
deletefile(filename+'html');
|
|
if FileExists(filename+'jpg') then
|
|
deletefile(filename+'jpg');
|
|
if FileExists(filename+'gif') then
|
|
deletefile(filename+'gif');
|
|
if FileExists(filename+'bmp') then
|
|
deletefile(filename+'bmp');
|
|
end;
|
|
|
|
procedure TMainForm.FormShow(Sender: TObject);
|
|
var
|
|
ws : String;
|
|
mi : TMenuItem;
|
|
f : TextFile;
|
|
functionname, functionhint : String;
|
|
i, pipeposition : Integer;
|
|
begin
|
|
caption := appname;
|
|
DateSeparator := '-';
|
|
TimeSeparator := ':';
|
|
ShortDateFormat := 'yyyy/mm/dd';
|
|
LongTimeFormat := 'hh:nn:ss';
|
|
DecimalSeparator := '.';
|
|
|
|
with TRegistry.Create do
|
|
begin
|
|
if OpenKey(regpath, true) then
|
|
begin
|
|
ws := ReadString('windowstate');
|
|
if ws = 'Minimized'
|
|
then windowstate := wsMinimized else
|
|
if ws = 'Normal' then begin
|
|
windowstate := wsNormal;
|
|
left := ReadInteger('windowleft');
|
|
top := ReadInteger('windowtop');
|
|
width := ReadInteger('windowwidth');
|
|
height := ReadInteger('windowheight');
|
|
end else
|
|
if ws = 'Maximized'
|
|
then windowstate := wsMaximized;
|
|
CSVSeparator := ',';
|
|
CSVEncloser := '';
|
|
CSVTerminator := '\r\n';
|
|
ConvertHTMLEntities := true;
|
|
logsqlnum := 300;
|
|
if Valueexists('CSVSeparator') then
|
|
CSVSeparator := ReadString('CSVSeparator');
|
|
if Valueexists('CSVEncloser') then
|
|
CSVEncloser := ReadString('CSVEncloser');
|
|
if Valueexists('CSVTerminator') then
|
|
CSVTerminator := ReadString('CSVTerminator');
|
|
if Valueexists('ConvertHTMLEntities') then
|
|
ConvertHTMLEntities := ReadBool('ConvertHTMLEntities');
|
|
if valueExists('logsqlnum') then
|
|
logsqlnum := ReadInteger('logsqlnum');
|
|
if valueExists('NativeFieldTypes') then
|
|
NativeFieldTypes := ReadBool('NativeFieldTypes')
|
|
else
|
|
NativeFieldTypes := false;
|
|
|
|
// Position of Toolbars
|
|
if valueExists('ToolBar2Left') then
|
|
ToolBar2.Left := ReadInteger('ToolBar2Left');
|
|
if valueExists('ToolBarDataLeft') then
|
|
ToolBarData.Left := ReadInteger('ToolBarDataLeft');
|
|
if valueExists('ToolBar2Top') then
|
|
ToolBar2.Top := ReadInteger('ToolBar2Top');
|
|
if valueExists('ToolBarDataTop') then
|
|
ToolBarData.Top := ReadInteger('ToolBarDataTop');
|
|
|
|
// SQLFiles-History
|
|
i := 1;
|
|
PopUpMenu6.Items.Clear;
|
|
while ValueExists('SQLFile'+inttostr(i)) do begin
|
|
mi := Tmenuitem.Create(self);
|
|
mi.Caption := inttostr(PopUpMenu6.Items.count+1) + ' ' + ReadString('SQLFile'+inttostr(i));
|
|
mi.OnClick := LoadSQLFile;
|
|
PopUpMenu6.Items.Add(mi);
|
|
inc(i);
|
|
end;
|
|
|
|
// Limit-options
|
|
if valueExists('DataLimit') then
|
|
CheckBoxLimit.Checked := ReadBool('DataLimit');
|
|
if valueExists('DataLimitStart') then
|
|
UpDownLimitStart.Position := ReadInteger('DataLimitStart');
|
|
if valueExists('DataLimitEnd') then
|
|
UpDownLimitEnd.Position := ReadInteger('DataLimitEnd');
|
|
|
|
// Other values
|
|
DataAlwaysEditMode := true;
|
|
if valueExists('DataAlwaysEditMode') then
|
|
DataAlwaysEditMode := ReadBool('DataAlwaysEditMode');
|
|
if valueExists('DataNullBackground') then
|
|
DataNullBackground := StringToColor(ReadString('DataNullBackground'))
|
|
else
|
|
DataNullBackground := clAqua;
|
|
end;
|
|
CloseKey;
|
|
end;
|
|
|
|
// read function-list from function.txt:
|
|
if fileexists(ExtractFilePath(paramstr(0)) + 'function.txt') then
|
|
try
|
|
AssignFile(f, ExtractFilePath(paramstr(0)) + 'function.txt');
|
|
Reset(f);
|
|
i := 1;
|
|
|
|
while not eof(f) do
|
|
begin
|
|
functionname := '';
|
|
Readln(f, functionname);
|
|
pipeposition := pos('|', functionname);
|
|
if pipeposition > 0 then // read hint
|
|
begin
|
|
functionhint := copy(functionname, 0, pipeposition-1) + ' - ' + copy(functionname, pipeposition+1, length(functionname)-1);
|
|
functionname := copy(functionname, 0, pos('(', functionname)-1)
|
|
end else
|
|
functionhint := '';
|
|
if (functionname[1] <> '#') and (length(trim(functionname)) > 0) then
|
|
begin
|
|
mi := TMenuItem.Create(self);
|
|
mi.Caption := trim(functionname);
|
|
mi.Hint := trim(functionhint);
|
|
mi.OnClick := insertFunction;
|
|
if functionname[1] <> ' ' then // build submenu
|
|
begin
|
|
SQLfunctions.Items.add(mi);
|
|
inc(i);
|
|
end else
|
|
begin
|
|
SQLfunctions.Items[i+11].OnClick := nil; // deactivate parent Menuitem
|
|
SQLfunctions.Items[i+11].Add(mi);
|
|
end;
|
|
end;
|
|
end;
|
|
finally
|
|
CloseFile(f);
|
|
end;
|
|
|
|
// Beautify appversion
|
|
appversion := StringReplace( appversion, '$Rev', 'Revision', [rfIgnoreCase] );
|
|
appversion := StringReplace( appversion, '$', '', [] );
|
|
appversion := Trim( appversion );
|
|
|
|
timer1.Enabled := true;
|
|
end;
|
|
|
|
procedure TMainform.LoadSQLFile(sender: TObject);
|
|
begin
|
|
TMDIChild(Mainform.ActiveMDIChild).LoadSQLClick(sender);
|
|
end;
|
|
|
|
procedure TMainForm.insertFunction(sender: TObject);
|
|
var
|
|
t1,t2,f : String;
|
|
oldSelStart : Integer;
|
|
sm : TSynMemo;
|
|
begin
|
|
// insert function from function.txt
|
|
if TMDIChild(Mainform.ActiveMDIChild).SynMemo3.Focused then
|
|
sm := TMDIChild(Mainform.ActiveMDIChild).SynMemo3
|
|
else
|
|
sm := TMDIChild(Mainform.ActiveMDIChild).SynMemo1;
|
|
f := TMenuItem(Sender).Hint;
|
|
f := stringreplace(f, '&', '', [rfReplaceAll]);
|
|
f := copy(f, 0, pos(')', f));
|
|
oldSelStart := sm.SelStart;
|
|
t1 := copy(sm.Text, 0, sm.SelStart-1);
|
|
t2 := copy(sm.Text, sm.SelStart, Length(sm.Text) - sm.SelStart);
|
|
sm.Text := t1 + f + t2;
|
|
sm.SelStart := oldSelStart + length(f);
|
|
if not TMDIChild(Mainform.ActiveMDIChild).SynMemo3.Focused then
|
|
TMDIChild(Mainform.ActiveMDIChild).SynMemo1Change(self);
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.ButtonRefreshClick(Sender: TObject);
|
|
begin
|
|
// Refresh
|
|
with TMDIChild(Application.Mainform.ActiveMDIChild) do
|
|
begin
|
|
if PageControl1.ActivePage = SheetHost then
|
|
ShowVariablesAndProcesses(self)
|
|
else if PageControl1.ActivePage = SheetDatabase then
|
|
ShowDBProperties(self)
|
|
else if PageControl1.ActivePage = SheetTable then
|
|
ShowTableProperties(self)
|
|
else if PageControl1.ActivePage = SheetData then
|
|
viewdata(self)
|
|
else
|
|
ReadDatabasesAndTables(self);
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.ButtonCreateDatabaseClick(Sender: TObject);
|
|
begin
|
|
// create database
|
|
TMDIChild(Application.Mainform.ActiveMDIChild).CreateDatabase(self);
|
|
end;
|
|
|
|
procedure TMainForm.ButtonCreateTableClick(Sender: TObject);
|
|
begin
|
|
// create table
|
|
TMDIChild(Application.Mainform.ActiveMDIChild).CreateTable(self);
|
|
end;
|
|
|
|
procedure TMainForm.ButtonDropDatabaseClick(Sender: TObject);
|
|
begin
|
|
// drop db
|
|
with TMDIChild(Application.Mainform.ActiveMDIChild) do
|
|
if ActualDatabase <> '' then
|
|
DBLoeschen(self);
|
|
end;
|
|
|
|
procedure TMainForm.ButtonDropTableClick(Sender: TObject);
|
|
begin
|
|
// delete table
|
|
with TMDIChild(Application.Mainform.ActiveMDIChild) do
|
|
if ActualTable <> '' then
|
|
TabelleLoeschen(self);
|
|
end;
|
|
|
|
procedure TMainForm.ButtonAdvancedPropertiesClick(Sender: TObject);
|
|
begin
|
|
// Show advanced table-properties
|
|
tbl_properties_form.showmodal;
|
|
end;
|
|
|
|
|
|
procedure TMainForm.ResetWindowOptions1Click(Sender: TObject);
|
|
var
|
|
reg : TRegistry;
|
|
begin
|
|
// reset all options for window-size, height ...
|
|
|
|
if ActiveMDIChild <> nil then
|
|
begin
|
|
MessageDlg('Close all open windows before you do this.', mtError, [mbok], 0);
|
|
exit;
|
|
end;
|
|
|
|
reg := TRegistry.Create;
|
|
with reg do
|
|
begin
|
|
Access := KEY_ALL_ACCESS;
|
|
if OpenKey(regpath, false) then
|
|
begin
|
|
DeleteValue('childwinstate');
|
|
DeleteValue('childwinleft');
|
|
DeleteValue('childwintop');
|
|
DeleteValue('childwinwidth');
|
|
DeleteValue('childwinheight');
|
|
DeleteValue('querymemoheight');
|
|
DeleteValue('dbtreewidth');
|
|
DeleteValue('sqloutheight');
|
|
|
|
CloseKey;
|
|
MessageDlg('All Window-Settings were reset to default values.', mtInformation, [mbok], 0);
|
|
end;
|
|
Free;
|
|
end;
|
|
|
|
end;
|
|
|
|
procedure TMainForm.ButtonImportTextfileClick(Sender: TObject);
|
|
begin
|
|
// Import Textfile
|
|
loaddataform.showmodal;
|
|
end;
|
|
|
|
procedure TMainForm.Timer1Timer(Sender: TObject);
|
|
begin
|
|
// Startup!
|
|
timer1.Enabled := false;
|
|
ShowConnections(self);
|
|
end;
|
|
|
|
procedure TMainForm.MenuPreferencesClick(Sender: TObject);
|
|
begin
|
|
// Preferences
|
|
optionsform.showmodal;
|
|
end;
|
|
|
|
procedure TMainForm.Readme1Click(Sender: TObject);
|
|
begin
|
|
// show readme.txt
|
|
shellexecute(0, 'open', pchar('readme.txt'), Nil, pchar(ExtractFilePath(paramstr(0))), 5);
|
|
end;
|
|
|
|
procedure TMainForm.FormResize(Sender: TObject);
|
|
begin
|
|
StatusBar.Panels[0].Width := width - StatusBar.Panels[1].Width - StatusBar.Panels[2].Width;
|
|
end;
|
|
|
|
procedure TMainForm.UserManagerExecute(Sender: TObject);
|
|
begin
|
|
// Usermanager
|
|
usermanagerform.showmodal;
|
|
end;
|
|
|
|
procedure TMainForm.ShowAboutBoxExecute(Sender: TObject);
|
|
begin
|
|
// Info-Box
|
|
AboutBox.showmodal;
|
|
end;
|
|
|
|
procedure TMainForm.DiagnosticsExecute(Sender: TObject);
|
|
begin
|
|
// optimize / repair... tables
|
|
optimize.showmodal;
|
|
end;
|
|
|
|
|
|
procedure TMainForm.Copy2CSVExecute(Sender: TObject);
|
|
begin
|
|
// Copy data in actual dataset as CSV
|
|
with TMDIChild(Application.Mainform.ActiveMDIChild) do begin
|
|
if PageControl1.ActivePage = SheetData then
|
|
dataset2csv(ZQuery2, CSVSeparator, CSVEncloser, CSVTerminator)
|
|
else if PageControl1.ActivePage = SheetQuery then
|
|
dataset2csv((ZQuery1 as TZQuery), CSVSeparator, CSVEncloser, CSVTerminator);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TMainForm.Save2CSVExecute(Sender: TObject);
|
|
begin
|
|
// Save data in actual dataset as CSV
|
|
with TMDIChild(Application.Mainform.ActiveMDIChild) do
|
|
with TSaveDialog.Create(self) do begin
|
|
// Separator := CSVSeparator;
|
|
// Encloser := CSVEncloser;
|
|
// Terminator := CSVTerminator;
|
|
Filter := 'CSV-Files (*.csv)|*.csv|Textfiles (*.txt)|*.txt|All files (*.*)|*.*';
|
|
DefaultExt := 'csv';
|
|
if PageControl1.ActivePage = SheetData then
|
|
FileName := ActualTable
|
|
else
|
|
FileName := sstr(ZQuery1.Sql[0], 20);
|
|
Options := [ofOverwritePrompt,ofEnableSizing];
|
|
|
|
if Execute and (FileName <> '') then begin
|
|
if PageControl1.ActivePage = SheetData then
|
|
dataset2csv(ZQuery2, CSVSeparator, CSVEncloser, CSVTerminator, Filename)
|
|
else if PageControl1.ActivePage = SheetQuery then
|
|
dataset2csv(ZQuery1, CSVSeparator, CSVEncloser, CSVTerminator, Filename);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TMainForm.CopyHTMLtableExecute(Sender: TObject);
|
|
begin
|
|
// Copy data in actual dataset as HTML
|
|
with TMDIChild(Application.Mainform.ActiveMDIChild) do begin
|
|
if PageControl1.ActivePage = SheetData then
|
|
dataset2html(ZQuery2, ZConn.HostName + ': ' + ActualDatabase + '.' + ActualTable)
|
|
else if PageControl1.ActivePage = SheetQuery then
|
|
dataset2html(ZQuery1, ZQuery1.Sql[0]);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TMainForm.SaveHTMLTableExecute(Sender: TObject);
|
|
begin
|
|
// Save data in actual dataset as HTML
|
|
with TMDIChild(Application.Mainform.ActiveMDIChild) do begin
|
|
|
|
with TSaveDialog.Create(self) do begin
|
|
Filter := 'Hypertext-Files (*.html, *.htm)|*.html;*.htm|All files (*.*)|*.*';
|
|
DefaultExt := 'html';
|
|
if PageControl1.ActivePage = SheetData then
|
|
FileName := ActualTable
|
|
else
|
|
FileName := sstr(ZQuery1.Sql[0], 20);
|
|
Options := [ofOverwritePrompt,ofEnableSizing];
|
|
|
|
if Execute and (FileName <> '') then
|
|
begin
|
|
if PageControl1.ActivePage = SheetData then
|
|
dataset2html(ZQuery2, ZConn.HostName + ' / ' + ActualDatabase + ' / ' + ActualTable, FileName)
|
|
else
|
|
dataset2html(ZQuery1, ZQuery1.Sql[0], FileName);
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
procedure TMainForm.PrintListExecute(Sender: TObject);
|
|
var
|
|
page : TTabSheet;
|
|
begin
|
|
// print
|
|
page := TMDIChild(Mainform.ActiveMDIChild).PageControl1.ActivePage;
|
|
if page.Name = 'SheetData' then
|
|
begin
|
|
// TODO: Print data
|
|
end
|
|
else if (page.Name = 'SheetQuery') then
|
|
begin
|
|
// TODO: Print data
|
|
end
|
|
else
|
|
printlistform.showmodal;
|
|
end;
|
|
|
|
|
|
procedure TMainForm.CopyTableExecute(Sender: TObject);
|
|
begin
|
|
// copy table
|
|
CopyTableForm.ShowModal;
|
|
end;
|
|
|
|
|
|
procedure TMainForm.StatusBarDrawPanel(StatusBar: TStatusBar;
|
|
Panel: TStatusPanel; const Rect: TRect);
|
|
begin
|
|
// clear panel
|
|
StatusBar.Canvas.Pen.Color := StatusBar.Canvas.Brush.Color;
|
|
StatusBar.Canvas.Rectangle(rect);
|
|
StatusBar.Canvas.Pen.Color := clWindowText;
|
|
// draw icon and message
|
|
ImageList1.Draw(StatusBar.Canvas, Rect.Left, Rect.Top, StatusIconIndex);
|
|
StatusBar.Canvas.TextOut(Rect.left + 17, Rect.top+1, StatusText);
|
|
end;
|
|
|
|
|
|
procedure TMainForm.ButtonOKClick(Sender: TObject);
|
|
begin
|
|
// Set Filter
|
|
TMDIChild(Mainform.ActiveMDIChild).DBTree.SetFocus;
|
|
TMDIChild(Mainform.ActiveMDIChild).viewdata(self);
|
|
end;
|
|
|
|
|
|
procedure TMainForm.CheckBoxLimitClick(Sender: TObject);
|
|
begin
|
|
// Check/Uncheck popupmenu-item
|
|
if TMDIChild(Mainform.ActiveMDIChild) <> nil then
|
|
TMDIChild(Mainform.ActiveMDIChild).MenuLimit.Checked := CheckBoxLimit.Checked;
|
|
end;
|
|
|
|
procedure TMainForm.LimitPanelEnter(Sender: TObject);
|
|
begin
|
|
// Entering Data-Toolbar
|
|
ButtonOK.Default := true;
|
|
end;
|
|
|
|
procedure TMainForm.LimitPanelExit(Sender: TObject);
|
|
begin
|
|
// Exiting Data-Toolbar
|
|
ButtonOK.Default := false;
|
|
end;
|
|
|
|
procedure TMainForm.menuclearClick(Sender: TObject);
|
|
begin
|
|
// Clear SynMemo
|
|
with TMDIChild(Mainform.ActiveMDIChild) do begin
|
|
if SynMemo3.Focused then
|
|
SynMemo3.Lines.Clear
|
|
else
|
|
SynMemo1.Lines.Clear;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TMainForm.ButtonSaveSQLClick(Sender: TObject);
|
|
var f : TextFile;
|
|
begin
|
|
// Save SQL
|
|
if SaveDialog1.Execute then begin
|
|
Screen.Cursor := crHourGlass;
|
|
AssignFile(f, SaveDialog1.FileName);
|
|
Rewrite(f);
|
|
Write(f, TMDIChild(Mainform.ActiveMDIChild).SynMemo1.Text);
|
|
CloseFile(f);
|
|
Screen.Cursor := crDefault;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.ButtonLoadSQLFile(Sender: TObject);
|
|
var
|
|
menuitem : Tmenuitem;
|
|
m,i : Integer;
|
|
filename : String;
|
|
dontadd : Boolean;
|
|
begin
|
|
// Load file
|
|
if OpenDialog1.Execute then
|
|
begin
|
|
Screen.Cursor := crHourGlass;
|
|
TMDIChild(ActiveMDIChild).SynMemo1.Lines.LoadFromFile(OpenDialog1.FileName);
|
|
Screen.Cursor := crDefault;
|
|
TMDIChild(ActiveMDIChild).SynMemo1Change(self);
|
|
|
|
// don't get one filename more than one time
|
|
dontadd := false;
|
|
for m:=0 to PopUpMenu6.Items.Count-1 do begin
|
|
filename := PopUpMenu6.Items[m].Caption;
|
|
i := 0;
|
|
while filename[i] <> ' ' do
|
|
inc(i);
|
|
filename := copy(filename, i+1, length(filename));
|
|
filename := stringreplace(filename, '&', '', [rfReplaceAll]);
|
|
if filename = OpenDialog1.FileName then
|
|
dontadd := true;
|
|
end;
|
|
|
|
if not dontadd then begin
|
|
with TRegistry.Create do begin
|
|
openkey(regpath, true);
|
|
for i:=1 to 20 do
|
|
begin
|
|
if not ValueExists('SQLFile'+inttostr(i)) then
|
|
break;
|
|
end;
|
|
while i > 1 do
|
|
begin
|
|
WriteString('SQLFile'+inttostr(i), ReadString('SQLFile'+inttostr(i-1)));
|
|
dec(i);
|
|
end;
|
|
WriteString('SQLFile1', OpenDialog1.FileName);
|
|
|
|
i := 1;
|
|
PopUpMenu6.Items.Clear;
|
|
while ValueExists('SQLFile'+inttostr(i)) do
|
|
begin
|
|
menuitem := Tmenuitem.Create(self);
|
|
menuitem.Caption := inttostr(PopUpMenu6.Items.count+1) + ' ' + ReadString('SQLFile'+inttostr(i));
|
|
menuitem.OnClick := LoadSQLFile;
|
|
PopUpMenu6.Items.Add(menuitem);
|
|
inc(i);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
procedure TMainForm.SQLFunctionsPopup(Sender: TObject);
|
|
begin
|
|
|
|
if TMDIChild(ActiveMDIChild).SynMemo3.focused then begin // set Filter with F9
|
|
MenuRun.ShortCut := TextToShortCut('');
|
|
MenuSetFilter.ShortCut := TextToShortCut('F9');
|
|
MenuSetFilter.Visible := true;
|
|
MenuRun.Visible := false;
|
|
MenuRunSelection.Visible := false;
|
|
MenuCopy.Visible := false;
|
|
MenuPaste.Visible := false;
|
|
MenuLoad.Visible := false;
|
|
MenuSave.Visible := false;
|
|
MenuFind.Visible := false;
|
|
searchreplace.Visible := false;
|
|
end
|
|
else begin // Exec SQL with F9
|
|
MenuRun.ShortCut := TextToShortCut('F9');
|
|
MenuSetFilter.ShortCut := TextToShortCut('');
|
|
MenuSetFilter.Visible := false;
|
|
MenuRun.Visible := true;
|
|
MenuRunSelection.Visible := true;
|
|
MenuCopy.Visible := true;
|
|
MenuPaste.Visible := true;
|
|
MenuLoad.Visible := true;
|
|
MenuSave.Visible := true;
|
|
MenuFind.Visible := true;
|
|
searchreplace.Visible := true;
|
|
end;
|
|
|
|
end;
|
|
|
|
procedure TMainForm.MenuSetFilterClick(Sender: TObject);
|
|
begin
|
|
TMDIChild(ActiveMDIChild).SetFilter(self);
|
|
end;
|
|
|
|
|
|
procedure TMainForm.OpenURL(Sender: TObject);
|
|
var url : Pchar;
|
|
begin
|
|
// open url (hint)
|
|
if sender is TMenuItem then
|
|
url := pchar(TMenuItem(Sender).Hint)
|
|
else
|
|
url := pchar(TControl(Sender).Hint);
|
|
shellexecute(0, 'open', url, Nil, Nil, sw_shownormal);
|
|
end;
|
|
|
|
|
|
|
|
|
|
// mask tablenames, dbs and so on with backtick
|
|
function TMainform.mask(str: String) : String;
|
|
begin
|
|
if TMDIChild(ActiveMDIChild).mysql_version >= 32300 then
|
|
result := '`' + str + '`'
|
|
else
|
|
result := str;
|
|
end;
|
|
|
|
|
|
procedure TMainForm.FindDialog1Find(Sender: TObject);
|
|
var foundat: Longint;
|
|
begin
|
|
with TMDIChild(ActiveMDIChild).SynMemo1 do begin
|
|
FoundAt := pos(FindDialog1.FindText, copy(Text, SelEnd, Length(Text)));
|
|
if FoundAt > 0 then begin
|
|
SetFocus;
|
|
SelStart := FoundAt + SelEnd -1;
|
|
SelEnd := SelStart + Length(FindDialog1.FindText);
|
|
end else
|
|
messagebeep(0);
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.ExportSettings1Click(Sender: TObject);
|
|
begin
|
|
// Export settings to .reg-file
|
|
if SaveDialog2.Execute then begin
|
|
if winexec(pchar('regedit.exe /e "'+SaveDialog2.FileName+'" HKEY_CURRENT_USER\'+regpath), SW_SHOW) = ERROR_FILE_NOT_FOUND then
|
|
MessageDlg('File not found: regedit.exe', mtError, [mbOK], 0);
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.Importsettings1Click(Sender: TObject);
|
|
begin
|
|
// Import settings from .reg-file
|
|
if OpenDialog2.Execute then begin
|
|
if winexec(pchar('regedit.exe "'+OpenDialog2.FileName+'"'), SW_SHOW) = ERROR_FILE_NOT_FOUND then
|
|
MessageDlg('File not found: regedit.exe', mtError, [mbOK], 0);
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.ExecuteQueryExecute(Sender: TObject);
|
|
begin
|
|
TMDIChild(ActiveMDIChild).ExecSqlClick(sender, false);
|
|
end;
|
|
|
|
procedure TMainForm.ExecuteSelectionExecute(Sender: TObject);
|
|
begin
|
|
TMDIChild(ActiveMDIChild).ExecSqlClick(sender, true);
|
|
end;
|
|
|
|
procedure TMainForm.MenuFindClick(Sender: TObject);
|
|
begin
|
|
TMDIChild(ActiveMDIChild).ToolButton15Click(sender);
|
|
end;
|
|
|
|
procedure TMainForm.ExecuteLineExecute(Sender: TObject);
|
|
begin
|
|
TMDIChild(ActiveMDIChild).ExecSqlClick(sender, false, true);
|
|
end;
|
|
|
|
procedure TMainForm.Save2XMLExecute(Sender: TObject);
|
|
begin
|
|
// Save data in actual dataset as HTML
|
|
with TMDIChild(Application.Mainform.ActiveMDIChild) do begin
|
|
|
|
with TSaveDialog.Create(self) do begin
|
|
Filter := 'XML-Files (*.xml)|*.xml|All files (*.*)|*.*';
|
|
DefaultExt := 'xml';
|
|
if PageControl1.ActivePage = SheetData then
|
|
FileName := ActualTable
|
|
else
|
|
FileName := sstr(ZQuery1.Sql[0], 20);
|
|
Options := [ofOverwritePrompt,ofEnableSizing];
|
|
|
|
if Execute and (FileName <> '') then begin
|
|
if PageControl1.ActivePage = SheetData then
|
|
dataset2xml(ZQuery2, ActualTable, FileName)
|
|
else
|
|
dataset2xml(ZQuery1, 'SQL-query', FileName);
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.Copy2XMLExecute(Sender: TObject);
|
|
begin
|
|
// Copy data in actual dataset as XML
|
|
with TMDIChild(Application.Mainform.ActiveMDIChild) do begin
|
|
if PageControl1.ActivePage = SheetData then
|
|
dataset2xml(ZQuery2, ActualTable)
|
|
else if PageControl1.ActivePage = SheetQuery then
|
|
dataset2xml(ZQuery1, 'SQL-query');
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.DBNavigator1BeforeAction(Sender: TObject;
|
|
Button: TNavigateBtn);
|
|
begin
|
|
if Button = nbdelete then begin
|
|
TMDIChild(Application.Mainform.ActiveMDIChild).Delete1Click(sender);
|
|
abort;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.ExportDataExecute(Sender: TObject);
|
|
var
|
|
query : TZQuery;
|
|
titel : String;
|
|
begin
|
|
// Save data in actual dataset as CSV, HTML or XML
|
|
with TMDIChild(Application.Mainform.ActiveMDIChild) do begin
|
|
case PageControl1.ActivePageIndex of
|
|
3 : begin query := ZQuery2; titel := ActualTable; end;
|
|
4 : begin query := ZQuery1; titel := 'SQL-query'; end;
|
|
end;
|
|
|
|
with SaveDialogExportData do begin
|
|
Title := 'Export result-set from '+titel+'...';
|
|
FileName := titel;
|
|
|
|
if Execute and (FileName <> '') then
|
|
begin
|
|
Screen.Cursor := crHourGlass;
|
|
case FilterIndex of
|
|
1 : dataset2csv(query, CSVSeparator, CSVEncloser, CSVTerminator, Filename);
|
|
2 : dataset2html(query, titel, FileName);
|
|
3 : dataset2xml(query, titel, FileName);
|
|
end;
|
|
Screen.Cursor := crDefault;
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.SearchReplaceExecute(Sender: TObject);
|
|
begin
|
|
ReplaceDialog1.Execute;
|
|
end;
|
|
|
|
|
|
{ Replace Text with replace-dialog }
|
|
procedure TMainForm.ReplaceDialog1Replace(Sender: TObject);
|
|
var
|
|
SelPos: Integer;
|
|
m : TSynMemo;
|
|
begin
|
|
m := TMDIChild(Mainform.ActiveMDIChild).synmemo1;
|
|
with TReplaceDialog(Sender) do begin
|
|
if not (frReplaceAll in options) then begin
|
|
{ Perform a global case-sensitive search for FindText in Memo1 }
|
|
SelPos := Pos(FindText, m.Lines.Text);
|
|
if SelPos > 0 then
|
|
begin
|
|
m.SetFocus;
|
|
m.SelStart := SelPos;
|
|
m.SelEnd := m.SelStart + Length(FindText);
|
|
{ Replace selected text with ReplaceText }
|
|
m.SelText := ReplaceText;
|
|
end
|
|
else
|
|
messagebeep(0);
|
|
end
|
|
else
|
|
m.SearchReplace(FindText, ReplaceText, [ssoReplaceAll, ssoEntireScope]);
|
|
end;
|
|
end;
|
|
|
|
{ Find Text with replace-dialog }
|
|
procedure TMainForm.ReplaceDialog1Find(Sender: TObject);
|
|
begin
|
|
FindDialog1.FindText := ReplaceDialog1.FindText;
|
|
FindDialog1Find (ReplaceDialog1);
|
|
end;
|
|
|
|
procedure TMainForm.ImportWizardExecute(Sender: TObject);
|
|
begin
|
|
end;
|
|
|
|
|
|
// copy field-contents to clipboard
|
|
procedure TMainForm.ManualCopyExecute(Sender: TObject);
|
|
var g : TSMDBGrid;
|
|
begin
|
|
with TMDIChild(Mainform.ActiveMDIChild) do begin
|
|
case PageControl1.ActivePageIndex of
|
|
3: g := DBGrid1;
|
|
4: g := DBGrid2;
|
|
else begin messagebeep(MB_ICONASTERISK); exit; end;
|
|
end;
|
|
end;
|
|
if g.datasource.State <> dsInactive then
|
|
clipboard.AsText := g.SelectedField.AsString
|
|
else
|
|
messagebeep(MB_ICONASTERISK);
|
|
end;
|
|
|
|
|
|
// view HTML
|
|
procedure TMainForm.HTMLviewExecute(Sender: TObject);
|
|
var
|
|
g : TSMDBGrid;
|
|
filename,extension : String;
|
|
f : Textfile;
|
|
buffer : array[0..MAX_PATH] of char;
|
|
begin
|
|
with TMDIChild(Mainform.ActiveMDIChild) do begin
|
|
case PageControl1.ActivePageIndex of
|
|
3: g := DBGrid1;
|
|
4: g := DBGrid2;
|
|
else begin messagebeep(MB_ICONASTERISK); exit; end;
|
|
end;
|
|
end;
|
|
if g.datasource.State = dsInactive then begin
|
|
messagebeep(MB_ICONASTERISK);
|
|
exit;
|
|
end;
|
|
Screen.Cursor := crHourGlass;
|
|
showstatus('Saving contents to file...', 2, 51);
|
|
GetTempPath(MAX_PATH, buffer);
|
|
if g.SelectedField.IsBlob and (pos('JFIF', copy(g.SelectedField.AsString, 0, 20)) <> 0) then
|
|
extension := 'jpg'
|
|
else if g.SelectedField.IsBlob and StrCmpBegin('GIF', g.SelectedField.AsString) then
|
|
extension := 'gif'
|
|
else if g.SelectedField.IsBlob and StrCmpBegin('BM', g.SelectedField.AsString) then
|
|
extension := 'bmp'
|
|
else
|
|
extension := 'html';
|
|
filename := buffer+'\heidisql-preview.'+extension;
|
|
AssignFile(f, filename);
|
|
Rewrite(f);
|
|
Write(f, g.SelectedField.AsString);
|
|
CloseFile(f);
|
|
showstatus('Ready', 2);
|
|
Screen.Cursor := crDefault;
|
|
ShellExecute(0, 'open', pchar(filename), nil, nil, SW_SHOWNORMAL);
|
|
end;
|
|
|
|
procedure TMainForm.InsertFilesExecute(Sender: TObject);
|
|
begin
|
|
FrmInsertFiles.showmodal;
|
|
end;
|
|
|
|
procedure TMainForm.debug( msg : String = '' );
|
|
var
|
|
debugfilename : String;
|
|
begin
|
|
debugfilename := ExtractFilePath(paramstr(0)) + 'debug.txt';
|
|
if fileexists(debugfilename) then
|
|
begin
|
|
try
|
|
// MessageDlg(msg, mtInformation, [mbok], 0);
|
|
AssignFile(debugfile, debugfilename);
|
|
Append(debugfile);
|
|
//Reset(debugfile);
|
|
Writeln( debugfile, datetimetostr(date()) + ' ' + timetostr(time()) + ': ' + msg );
|
|
closefile( debugfile );
|
|
except
|
|
raise exception.Create( 'Problem with debug-file: ' + debugfilename );
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TMainForm.ExportTablesExecute(Sender: TObject);
|
|
begin
|
|
// Export SQL
|
|
exportsqlform.showmodal;
|
|
end;
|
|
|
|
procedure TMainForm.DataSearchExecute(Sender: TObject);
|
|
begin
|
|
with TMDIChild(Mainform.ActiveMDIChild).EditDataSearch do
|
|
begin
|
|
SetFocus;
|
|
SelectAll;
|
|
end;
|
|
end;
|
|
|
|
end.
|