Delphi 仿DBNavigator方式

Delphi有很好用的DBNavitor元件,美中不足的是按鈕的樣式稍嫌不足!那是否可以仿DBNavigator的方式?
筆者提供一個簡單的範例給大家 🙂
delphi_simulate_dbnavigator
一、自訂首筆/上筆/下筆/末筆

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  BtnFirst.Enabled := not Datasource1.DataSet.Bof;
  BtnPrior.Enabled := not Datasource1.DataSet.Bof;
  BtnNext.Enabled := not Datasource1.DataSet.eof;
  BtnLast.Enabled := not Datasource1.DataSet.eof;
  if TDataSource(Sender).State in [dsEdit,dsInsert]  then begin
    BtnFirst.Enabled := False;
    BtnPrior.Enabled := False;
    BtnNext.Enabled := False;
    BtnLast.Enabled := False;
  end;
end;

二、自訂新增/修改/刪除/取消/存檔

procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
  BtnAdd.Enabled := TDataSource(Sender).State in [dsbrowse];
  BtnEdit.Enabled := TDataSource(Sender).State in [dsbrowse];
  BtnDelete.Enabled := TDataSource(Sender).State in [dsBrowse];
  BtnAbort.Enabled := TDataSource(Sender).State in [dsEdit,dsInsert];
  BtnSave.Enabled := TDataSource(Sender).State in [dsEdit,dsInsert];
end;

三、讓button按下後與DBNavigator一樣

procedure TForm1.BtnAbortClick(Sender: TObject);
begin
  dbnavigator1.BtnClick(nbcancel);
end;

procedure TForm1.BtnAddClick(Sender: TObject);
begin
  dbnavigator1.BtnClick(nbinsert);
end;

procedure TForm1.BtnDeleteClick(Sender: TObject);
begin
  dbnavigator1.BtnClick(nbdelete);
end;

procedure TForm1.BtnEditClick(Sender: TObject);
begin
  dbnavigator1.BtnClick(nbedit);
end;

procedure TForm1.BtnFirstClick(Sender: TObject);
begin
  dbnavigator1.BtnClick(nbfirst);
end;

procedure TForm1.BtnLastClick(Sender: TObject);
begin
  dbnavigator1.BtnClick(nblast);
end;

procedure TForm1.BtnNextClick(Sender: TObject);
begin
  dbnavigator1.BtnClick(nbnext);
end;

procedure TForm1.BtnPriorClick(Sender: TObject);
begin
  dbnavigator1.BtnClick(nbprior);
end;

procedure TForm1.BtnSaveClick(Sender: TObject);
begin
  dbnavigator1.BtnClick(nbpost);
end;

Delphi BDE逐漸走入歷史

Delphi XE7版本release之後,發現一直跟隨Delphi很久的BDE(Borland Database Engine)並沒有隨著版本發佈。
而是需要註冊使用者才能自行下載,BDE是Borland在16位元環境下一直叱吒資料庫開發界的利器,不過隨著Embarcadero將Delphi推至行動開發,更不斷精進新版本的dbExpress以及FireDAC技術。
看來應該是Embarcadero準備放手BDE的時候了!

相關連結:
ID: 29997, BDE Installer for RAD Studio, Delphi, C++Builder XE7
http://cc.embarcadero.com/item/29997

Delphi透過MySQL存入檔案備份

MySQL存Blog的大小
TINYBLOB – 255 bytes
BLOB – 65535 bytes
MEDIUMBLOB – 16,777,215 bytes (2^24 – 1)
LONGBLOB – 4G bytes (2^32 – 1)

透過資料庫存取的方式重點:

TBlobField – LoadFromStream、SaveToStream
Tmemorystream – LoadFromFile、SaveToFile(.Position :=0)

存入資料庫

var
  astream : Tmemorystream;
begin
  AStream := TMemoryStream.Create;
  try
    astream.LoadFromFile(filename);
    AStream.Position := 0;
    if adotable1.Active then
    begin
      adotable1.Edit;
      TBlobField(adotable1.FieldByName('t2')).LoadFromStream(AStream);
      adotable1.Post;
    end;
  finally
    AStream.free;
  end;
end;

存回檔案

var
  Ms:Tmemorystream;
begin
  Ms := Tmemorystream.Create;
  try
    if adotable1.Active then
    begin
      TBlobField(adotable1.FieldByName('t2')).SaveToStream(Ms);
      Ms.Position := 0;
      MS.SaveToFile(sname);
    end;
  finally
    ms.Free;
  end;
end;

MySQL預設的BLOB為1M
別忘了 My.ini調整
max_allowed_packet = XXM

[Delphi] DBGrid顯示不同字型、顏色

dbgrid選擇顏色字型的方式
1.在DBGrid的Columns Editor中,將要出現按鈕的欄位的ButtonStyle設為cbsEllipsis
2.接著到OnEditButtonClick中增加程式判斷
if dbgrid1.SelectedField = xxxx(欄位名稱) then begin
end;
3.顯示的方式則是在OnDrawColumnCell中增加程式
IF COLUMN.FieldName = ‘xxxx(欄位名稱)’ THEN BEGIN
DBGrid1.canvas.brush.Color := STRINGTOCOLOR(‘clGreen’);
END;
// 記得要加上
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, []);

Delphi-將POS系統的Interbase匯到MySQL資料庫

前一陣子研究各家的餐飲、簡餐POS系統,意外的發現不少系統都是用Delphi寫的,資料庫也大多使用Interbase或是Firebird。

為了方便研究,就嘗試將資料庫轉到MySQL上去~記錄一下轉移方式。

工具:

做法:

在MySQL建立空白資料庫(utf8)

4

 

資料來源 (ODBC)新增 MySQL ODBC 3.51 Driver,注意一點要記得打開Details,將 Character Set 選成 Big5(不是utf8喔)

5

SQL Explorer→New Database→Database Driver Name選INTRBASE,SERVER NAME選擇您要連結的GDB檔案

8

6

7

打開Datapump,Source Alias選擇在SQL Explorer建立的名稱,User Name是SYSDBA(注意大小寫),password是 masterkey(注意大小寫)。接著Target Alias選擇MySQL ODBC建立的名稱。

11

10

9

12

13

 

 

 

14