() 新建一個窗體將窗體的Name屬性設置為DocuInput選擇Project | Options菜單命令將DocuInp窗體從自動創建的窗體列表中刪除將窗體保存為DocuInput Formpas該窗體的控件布局和設置如圖所示
圖 憑證輸入窗體
該窗體是本實例中比較重要也比較復雜的一個窗體由於每個憑證項均可對應多個分錄數據因此用StringGrid來輸入和編輯各個憑證項下屬的分錄數據比較合適這種關系在一定程度上類似於我們在第章中進銷存實例中處理的進貨單和進貨單明細的關系另外當工具欄中的【修改】【保存】等按鈕被按下時實際上是對兩個表進行操作由於憑證表和分錄表之間存在的約束關系因此代碼中對兩個表的操作順序要特別注意各控件的屬性設置如表所示窗體中除搜索欄中的編輯框為Edit控件之外其他所有編輯框都是DBEdit控件其DataSource 屬性都設置為DataSourceDataField設置為與其相鄰的文本中的內容一個DBCombobox的DataSource和DataSource 屬性和DBEdit相同其 Items 字段中添加收付轉這 項
表 憑證輸入窗體控件屬性設置
() 設置憑證輸入窗體的代碼如下
public
{ Public declarations }
procedure SetToolBar(isEnable:bool);
procedure SumAccount();
//執行新增和編輯操作後保存時會執行不同的代碼
procedure OpType(opname:string);
end;
//對將要從dll中的調用的函數的聲明
type
Tshowdllform=function(Ahandle:Thandle; Acaption:string; tablename:string):string; stdcall;
Ttable=array[] of string;
var
DocuInput: TDocuInput;
maxnumrecordnumcurRowcurCol:integer;
mytable:Ttable;
op:string;
implementation
{$R *dfm}
procedure TDocuInputFormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
end;
//初始化表
procedure TDocuInputDataSourceDataChange(Sender: TObject;
Field: TField);
var
ij:integer;
begin
//設置數據表寬度
dbgridColumns[]Width:=;
dbgridColumns[]Width:=;
dbgridColumns[]Width:=;
//顯示與憑證編號對應的分錄表
adoqueryClose;
adoquerySQLClear;
adoquerySQLAdd(select distinct a*c科目名稱 from 分錄表 a憑證表 b科目表 c
where (a憑證編號=+dbeditText+)and(a科目代碼=c科目代碼) order by 編號);
adoqueryOpen;
//初始化表將表格清空
for i:= to do
for j:= to do
if op<>insert then
stringgridCells[ji]:=;
//將分錄表數據讀入表格並保存編號數據以供後面的數據庫操作使用
i:=;
recordnum:=;
while not adoqueryEof do
begin
stringgridCells[i]:=adoqueryfieldbyname(科目代碼)AsString;
stringgridCells[i]:=adoqueryfieldbyname(科目名稱)AsString;
stringgridCells[i]:=adoqueryfieldbyname(借方)AsString;
stringgridCells[i]:=adoqueryfieldbyname(貸方)AsString;
stringgridCells[i]:=adoqueryfieldbyname(摘要)AsString;
mytable[i]:=adoqueryfieldbyname(編號)AsString;
i:=i+;
recordnum:=recordnum+;
adoqueryNext;
end;
//設置分錄表的列寬度
stringgridColWidths[]:=;
stringgridColWidths[]:=;
stringgridColWidths[]:=;
stringgridColWidths[]:=;
stringgridColWidths[]:=;
//顯示憑證數
labelCaption:=inttostr(datasourceDataSetRecordCount);
end;
[] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/25033.html