📄 eerstoreindatabase.pas
字号:
unit EERStoreInDatabase;
//----------------------------------------------------------------------------------------------------------------------
//
// This file is part of fabFORCE DBDesigner4.
// Copyright (C) 2002 Michael G. Zinner, www.fabFORCE.net
//
// DBDesigner4 is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// DBDesigner4 is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DBDesigner4; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//----------------------------------------------------------------------------------------------------------------------
//
// Unit EERStoreInDatabase
// -----------------------
// Version 1.1, 17.03.2003, Mike
// Description
// Contains the form for saving the model in a database
//
// Changes:
// Version 1.1, 17.03.2003, Mike
// changed SubmitBtnClick to update the model's VersionStr
// before saving
// Version 1.0, 13.03.2003, Mike
// initial version
//
//----------------------------------------------------------------------------------------------------------------------
interface
uses
SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
QStdCtrls, QButtons, QExtCtrls, EERModel, SqlExpr, QImgList, QComCtrls,
DB, QMenus, QTypes, DBDM;
type
TEERStoreInDatabaseForm = class(TForm)
StatusPnl: TPanel;
ConnectionSBtn: TSpeedButton;
StatusLbl: TLabel;
Panel1: TPanel;
SubmitBtn: TSpeedButton;
CancelBtn: TSpeedButton;
Bevel1: TBevel;
Panel2: TPanel;
Label1: TLabel;
DBConnEd: TEdit;
GetDBConnSBtn: TSpeedButton;
SavePnl: TPanel;
Label2: TLabel;
ModelNameEd: TEdit;
VersionEd: TEdit;
AutoIncVersionCBox: TCheckBox;
VersionLbl: TLabel;
UseVersionCBox: TCheckBox;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
SavedModelsTV: TTreeView;
ImageList: TImageList;
PopupMenu: TPopupMenu;
DeleteModelfromDatabaseMI: TMenuItem;
DeleteVersionfromDatabaseMI: TMenuItem;
N1: TMenuItem;
InfoPnl: TPanel;
Label3: TLabel;
InfoMemo: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
function SetData(theModel: TEERModel; DoSave: Boolean; SelectDBConn: TDBConn = nil): Boolean;
procedure GetDBConnSBtnClick(Sender: TObject);
procedure CancelBtnClick(Sender: TObject);
procedure SubmitBtnClick(Sender: TObject);
procedure UseVersionCBoxClick(Sender: TObject);
procedure AutoIncVersionCBoxClick(Sender: TObject);
procedure ShowModelsInDB;
procedure SavedModelsTVDblClick(Sender: TObject);
procedure DeleteModelfromDatabaseMIClick(Sender: TObject);
procedure DeleteVersionfromDatabaseMIClick(Sender: TObject);
procedure SavedModelsTVChange(Sender: TObject; Node: TTreeNode);
private
{ Private-Deklarationen }
EERModel: TEERModel;
CreateTheStorageTable: Boolean;
DialogMode: integer;
SelectDBConn: TDBConn;
public
{ Public-Deklarationen }
end;
var
EERStoreInDatabaseForm: TEERStoreInDatabaseForm;
implementation
uses MainDM;
{$R *.xfm}
procedure TEERStoreInDatabaseForm.FormCreate(Sender: TObject);
begin
DMMain.InitForm(self);
SelectDBConn:=nil;
SavedModelsTV.Items.Clear;
CreateTheStorageTable:=False;
end;
procedure TEERStoreInDatabaseForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
//
end;
procedure TEERStoreInDatabaseForm.FormDestroy(Sender: TObject);
begin
//
end;
procedure TEERStoreInDatabaseForm.FormShow(Sender: TObject);
begin
Left:=(Screen.Width-Width) div 2;
Top:=(Screen.Height-Height) div 2;
end;
function TEERStoreInDatabaseForm.SetData(theModel: TEERModel; DoSave: Boolean; SelectDBConn: TDBConn): Boolean;
begin
EERModel:=theModel;
self.SelectDBConn:=SelectDBConn;
ModelNameEd.Text:=Copy(ExtractFileName(EERModel.ModelFilename), 1, Length(ExtractFileName(EERModel.ModelFilename))-Length(ExtractFileExt(EERModel.ModelFilename)));
UseVersionCBox.Checked:=EERModel.UseVersionHistroy;
AutoIncVersionCBox.Checked:=EERModel.AutoIncVersion;
UseVersionCBoxClick(self);
AutoIncVersionCBoxClick(self);
//On Load
if(Not(DoSave))then
begin
Caption:=DMMain.GetTranslatedMessage('Load from Database', 215);
SubmitBtn.Caption:=DMMain.GetTranslatedMessage('Load Model', 216);
SavePnl.Hide;
InfoMemo.ReadOnly:=True;
DialogMode:=1;
end
else
DialogMode:=0;
GetDBConnSBtnClick(self);
//When not connected, close
SetData:=(DMDB.CurrentDBConn<>nil);
end;
procedure TEERStoreInDatabaseForm.GetDBConnSBtnClick(Sender: TObject);
var SelDBConn: TDBConn;
theTables: TStringList;
begin
DBConnEd.Text:='';
if(Sender.ClassNameIs('TSpeedButton'))then
DMDB.DisconnectFromDB;
StatusLbl.Caption:=DMMain.GetTranslatedMessage('Not connected to Database', 27);
ConnectionSBtn.Enabled:=False;
SubmitBtn.Enabled:=False;
//do until a successful connection is established or the user selects abort
while(1=1)do
begin
if(SelectDBConn<>nil)and(SelectDBConn<>DMDB.CurrentDBConn)then
SelDBConn:=DMDB.GetUserSelectedDBConn(SelectDBConn.Name)
//Let the User choose connection if there is no open connection
else if(DMDB.CurrentDBConn=nil)or(EERModel.DefSaveDBConn<>DMDB.CurrentDBConn.Name)then
SelDBConn:=DMDB.GetUserSelectedDBConn(EERModel.DefSaveDBConn)
else
SelDBConn:=DMDB.CurrentDBConn;
if(SelDBConn<>nil)then
begin
//Try to connect to the DB
try
DMDB.ConnectToDB(SelDBConn);
except
on x: Exception do
begin
MessageDlg(DMMain.GetTranslatedMessage('Connection to database failed.'+#13#10#13#10+'%s',
121, x.Message), mtError, [mbOK], 0);
continue;
end;
end;
ConnectionSBtn.Enabled:=True;
SubmitBtn.Enabled:=True;
DBConnEd.Text:=DMDB.CurrentDBConn.Name;
StatusLbl.Caption:=DMMain.GetTranslatedMessage('Connected to Database %s)', 28,
DMDB.CurrentDBConn.Params.Values['User_Name']+'@'+
DMDB.CurrentDBConn.Params.Values['Database']);
theTables:=TStringList.Create;
try
DMDB.GetDBTables(theTables);
//When there is no DBDesigner4 table, create one when saving
if(theTables.IndexOf('DBDesigner4')=-1)then
CreateTheStorageTable:=True;
if(Not(CreateTheStorageTable))then
ShowModelsInDB;
finally
theTables.Free;
end;
break;
end
else
break;
end;
end;
procedure TEERStoreInDatabaseForm.CancelBtnClick(Sender: TObject);
begin
ModalResult:=mrAbort;
end;
procedure TEERStoreInDatabaseForm.SubmitBtnClick(Sender: TObject);
var MakeUpdate: Boolean;
theFile: Textfile;
theModel, s: string;
oldidmodel, oldidversion: integer;
begin
if(DialogMode=0)then
begin
//Set Model's new Version AFTER data has been saved
oldidmodel:=EERModel.IDModel;
oldidversion:=EERModel.IDVersion;
try
MakeUpdate:=True;
DMDB.SchemaSQLQuery.ParamCheck:=False;
DMDB.SchemaSQLQuery.SetSchemaInfo(stNoSchema, '', '');
if(CreateTheStorageTable)then
begin
DMDB.SchemaSQLQuery.SQL.Text:='CREATE TABLE dbdesigner4('+
'idmodel INTEGER UNSIGNED NOT NULL, '+
'idversion INTEGER UNSIGNED NOT NULL, '+
'name VARCHAR(45), '+
'version VARCHAR(20), '+
'username VARCHAR(45), '+
'createdate DATETIME, '+
'iscurrent INTEGER(1) UNSIGNED, '+
'ischeckedout INTEGER(1) UNSIGNED, '+
'info varchar(255), '+
'model MEDIUMTEXT, '+
'PRIMARY KEY(idmodel, idversion))';
DMDB.SchemaSQLQuery.ExecSQL(True);
end;
//Check if there is a different model with the same id
if(EERModel.IDModel<>0)then
begin
//Check if model already exists in DB
DMDB.SchemaSQLQuery.SQL.Text:='SELECT name, idversion, version '+
'from dbdesigner4 where idmodel='+IntToStr(EERModel.IDModel)+' '+
'order by version desc';
DMDB.SchemaSQLQuery.Open;
if(not(DMDB.SchemaSQLQuery.EOF))then
begin
if(DMDB.SchemaSQLQuery.Fields[0].AsString<>ModelNameEd.Text)then
begin
if(MessageDlg(DMMain.GetTranslatedMessage('There may be a different model stored with the '+
'same identifier in this database. '+#13#10+
'Do you want to create a new identifier for this model?'+#13#10#13#10+
'Name of the model in database: %s', 217,
DMDB.SchemaSQLQuery.Fields[1].AsString),
mtConfirmation, [mbYes, mbNo], 0)<>mrYes)then
begin
EERModel.IDModel:=0;
end;
end;
if(DMDB.SchemaSQLQuery.Fields[1].AsInteger>EERModel.IDVersion)then
begin
if(MessageDlg(DMMain.GetTranslatedMessage('There may be a newer version of the model '+
'in this database. '+#13#10+
'Do you want to make this version the current version?'+#13#10#13#10+
'Version of the model in database: %s'+#13#10+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -