目錄
- 前言
- 一、Record是什麼?
- 二、使用步驟
- 1.根據資料庫欄位型別寫對應的Record的資料型別
- 2.封裝CRUD及相關方法
- 總結
前言
用Delphi+Unigui開發系統,基礎的就是增刪改查,而對於串聯的功能,需要不停的對相應的關聯表進行CRUD。對於Delphi而言,寫這個異常麻煩。最簡單的辦法,就是根據資料庫表封裝該表的CRUD方法,大大提升工作效率
一、Record是什麼?
Record 當作一個用來打包多個資料項的容器。
二、使用步驟
1.根據資料庫欄位型別寫對應的Record的資料型別
程式碼如下(示例):
在這個例子中,Teventitemmaterial就是一個 Record 型別,它包含了四個欄位來表示一個人的基本資訊。當你宣告一個 eventitemmaterial變數時,它會自動分配足夠的記憶體空間來儲存 EventItemMaterialID、EventID、MaterialID 這三個欄位的內容。
type
Teventitemmaterial= record
[Serialize(1)]
EventItemMaterialID: integer;
[Serialize(2)]
EventID: string;
[Serialize(3)]
MaterialID: integer;
end;
var
eventitemmaterial: Teventitemmaterial;
2.封裝CRUD及相關方法
程式碼如下(示例):
type
TeventitemmaterialCRUD = class(TObject)
private
FUniCon: TUniConnection;
FeventitemmaterialQuery: TUniQuery;
procedure PrepareMaterialQuery; // 準備查詢元件指向材料資訊表
public
constructor Create(AConnection: TUniConnection);
destructor Destroy; override;
// CRUD 方法
function CreateEventItemMaterial(const EventItemMaterial: Teventitemmaterial): Boolean;
function SelectEventItemMaterial(const EventItemMaterialID: Integer): Teventitemmaterial;
function UpdateEventItemMaterial(const Oldeventitemmaterial, Neweventitemmaterial: Teventitemmaterial): Boolean;
function DeleteEventItemMaterial(const EventItemMaterialID: Integer): Boolean;
end;
增:
function TeventitemmaterialCRUD.CreateEventItemMaterial(const EventItemMaterial: Teventitemmaterial): Boolean;
begin
FeventitemmaterialQuery.close;
FeventitemmaterialQuery.SQL.Text := 'INSERT INTO EventItemMaterial (EventItemMaterialID, EventID, MaterialID) ' + 'VALUES (:EventItemMaterialID, :EventID, :MaterialID)';
// 設定引數值
FeventitemmaterialQuery.ParamByName('EventItemMaterialID').AsInteger := EventItemMaterial.EventItemMaterialID;
FeventitemmaterialQuery.ParamByName('EventID').AsString := EventItemMaterial.EventID;
FeventitemmaterialQuery.ParamByName('MaterialID').AsInteger := EventItemMaterial.MaterialID;
FeventitemmaterialQuery.Execute;
Result := FeventitemmaterialQuery.RowsAffected > 0;
end;
改:
function TeventitemmaterialCRUD.UpdateEventItemMaterial(const Oldeventitemmaterial, Neweventitemmaterial: Teventitemmaterial): Boolean;
begin
FeventitemmaterialQuery.Close;
FeventitemmaterialQuery.SQL.Text := 'UPDATE EventItemMaterial SET ' + 'EventID = :EventID, ' + 'MaterialID = :MaterialID ' + 'WHERE EventItemMaterialID = :EventItemMaterialID';
FeventitemmaterialQuery.ParamByName('EventItemMaterialID').AsInteger := Neweventitemmaterial.EventItemMaterialID;
FeventitemmaterialQuery.ParamByName('EventID').AsString := Neweventitemmaterial.EventID;
FeventitemmaterialQuery.ParamByName('MaterialID').AsInteger := Neweventitemmaterial.MaterialID;
FeventitemmaterialQuery.Execute;
Result := FeventitemmaterialQuery.RowsAffected > 0;
end;
刪:
function TeventitemmaterialCRUD.DeleteEventItemMaterial(const EventItemMaterialID: Integer): Boolean;
begin
FeventitemmaterialQuery.SQL.Text := 'DELETE FROM EventItemMaterial WHERE EventItemMaterialID = :EventItemMaterialID';
FeventitemmaterialQuery.ParamByName('EventItemMaterialID').AsInteger := EventItemMaterialID;
FeventitemmaterialQuery.Execute;
Result := FeventitemmaterialQuery.RowsAffected > 0;
end;
查:
function TeventitemmaterialCRUD.SelectEventItemMaterial(const EventItemMaterialID: Integer): Teventitemmaterial;
var
RecordFound: Boolean;
begin
FeventitemmaterialQuery.close;
FeventitemmaterialQuery.SQL.Text := 'SELECT * FROM EventItemMaterial WHERE EventItemMaterialID = :EventItemMaterialID';
FeventitemmaterialQuery.ParamByName('EventItemMaterialID').AsInteger := EventItemMaterialID;
FeventitemmaterialQuery.open;
RecordFound := not FeventitemmaterialQuery.EOF;
if RecordFound then
begin
Result.EventItemMaterialID := FeventitemmaterialQuery.FieldByName('EventItemMaterialID').AsInteger;
Result.EventID := FeventitemmaterialQuery.FieldByName('EventID').AsString;
Result.MaterialID := FeventitemmaterialQuery.FieldByName('MaterialID').AsInteger;
end
else
Result := Default(Teventitemmaterial); // 返回預設值或丟擲異常,取決於你的設計
FeventitemmaterialQuery.Close;
end;
其他:
constructor TeventitemmaterialCRUD.Create(AConnection: TUniConnection);
begin
inherited Create;
FUniCon := AConnection;
PrepareMaterialQuery;
end;
destructor TeventitemmaterialCRUD.Destroy;
begin
FeventitemmaterialQuery.Free;
inherited;
end;
procedure TeventitemmaterialCRUD.PrepareMaterialQuery;
begin
FeventitemmaterialQuery := TUniQuery.Create(nil);
FeventitemmaterialQuery.Connection := FUniCon;
FeventitemmaterialQuery.SQL.Text := 'SELECT * FROM eventitemmaterial';
FeventitemmaterialQuery.Active := True;
end;
這時候一個輪子就造完成了。此事例呼叫時候首先呼叫Create方法連線資料庫。就可以執行增刪改查了。最後呼叫Destory方法。根據需求where條件可以適當修改。
總結
當需要用到他的時候,直接就去呼叫就可以。不需要重複的去寫sql。