⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eerstoreindatabase.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -