?? dbtreeview.pas
字號:
unit DBTreeView;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Base, ComCtrls, ADODB, DB, ImgList, StdCtrls, Buttons;
type
TDBTreeViewForm = class(TBaseForm)
TreeView1: TTreeView;
ADOQuery1: TADOQuery;
BitBtn1: TBitBtn;
GroupBox1: TGroupBox;
Edit1: TEdit;
GroupBox2: TGroupBox;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
procedure FormCreate(Sender: TObject);
procedure TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode);
procedure TreeView1GetSelectedIndex(Sender: TObject; Node: TTreeNode);
procedure TreeView1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
function LoadCode(ADOQueryTmp : TDataSet):Integer;
function GetLevel(sFormat,sCode:String):Integer;
{ Private declarations }
public
{ Public declarations }
end;
var
DBTreeViewForm: TDBTreeViewForm;
const
SCodeFormat = '322222'; //科目代碼結構
SFirstNodeTxt = '現金銀行帳戶'; //首節點顯示的文字
implementation
uses DataM, SysPublic;
{$R *.dfm}
procedure TDBTreeViewForm.FormCreate(Sender: TObject);
begin
inherited;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * From DBTreeView');
ADOQuery1.Open;
LoadCode(ADOQuery1);
end;
function TDBTreeViewForm.GetLevel(sFormat, sCode: String): Integer;
var
i,Level,iLen:Integer;
begin
Level:=-1;//如果代碼不符合標準,則返回-1
iLen:=0;
if (sFormat<>'')and(sCode<>'')then
for i:=1 to Length(sFormat) do
begin
iLen:=iLen+StrToInt(sFormat[i]);
if Length(sCode)=iLen then
begin
Level:=i;
Break;
end;
end;
Result:=Level;
end;
//上面函數的功能是返回一代碼的級數
//以下函數是本文的重點部分,其主要功能是用一循環將Code.db表中的
//科目代碼和科目代碼名稱顯示出來
function TDBTreeViewForm.LoadCode(ADOQueryTmp: TDataSet): Integer;
var
NowID,sName,ShowTxt:String;
i,Level:Integer;
MyNode:array[0..6]of TTreeNode;
//保存各級節點,最長支持6級(重點)
begin
Screen.Cursor:=crHourGlass;
Level:=0;
With ADOQueryTmp do
begin
try
if not ADOQueryTmp.Active then Open;
First;
TreeView1.Items.Clear;
//以下是增加第一項
MyNode[Level]:=TreeView1.Items.Add(TreeView1.TopItem,SFirstNodeTxt);
// MyNode[Level].ImageIndex:=0;
// MyNode[Level].SelectedIndex:=0;
//以上是增加第一項
While Not ADOQueryTmp.Eof do
begin
NowID:=Trim(FieldByName('aCode').AsString);
ShowTxt:=NowID+' '+FieldByName('aName').AsString;
Level:=GetLevel(SCodeFormat,NowID);
//返回代碼的級數
//以下是增加子項
//以下用上一級節點為父節點添加子節點
if Level>0 then//確保代碼符合標準
begin
MyNode[Level]:=TreeView1.Items.AddChild(MyNode[Level-1],ShowTxt);
// MyNode[Level].ImageIndex:=1;
// MyNode[Level].SelectedIndex:=2;
end;
//以上是增加子項
Next;
end;
finally
Close;
end;
end;
MyNode[0].Expand(False);//將首節點展開
Screen.Cursor:=crDefault;
end;
//以上函數將Code.db表中的科目代碼和科目代碼名稱顯示出來
procedure TDBTreeViewForm.TreeView1GetImageIndex(Sender: TObject;
Node: TTreeNode);
begin
inherited;
if Node.HasChildren then
if Node.Expanded then
Node.ImageIndex := 17 //節點有子節點時打開的圖標
else
Node.ImageIndex := 16 //節點有子節點時收起來的圖標
else Node.ImageIndex := 16; //節點沒有子節點時圖標
end;
procedure TDBTreeViewForm.TreeView1GetSelectedIndex(Sender: TObject;
Node: TTreeNode);
begin
inherited;
Node.SelectedIndex := Node.ImageIndex; //節點選擇后使用的圖標
end;
procedure TDBTreeViewForm.TreeView1Click(Sender: TObject);
var
s, sID, sSql, sFirst, sLast, sCode : string;
Llevel, iID : integer;
ADOQryTmp: TADOQuery;
begin
inherited;
//選取節點的TEXT
s := TreeView1.Selected.Text;
//取出編號
sID := Trim(Copy(s, 0, Pos(' ', s)-1));
//娶編號的長度
Llevel:= Length(sID);
sFirst:= Copy(sID, 1, Length(sID)-2);
if lLevel = 3 then
sSql:= 'Select Max(aCode) as acode From DBTreeView where len(acode)='+IntToStr(Llevel)
else
sSql:= 'Select Max(aCode) as aCode From DBTreeView Where aCode like '+QuotedStr(sFirst+'__');
//把此編號長度的最大值
ADOQryTmp:= TADOQuery.Create(Nil);
GetConn(ADOQryTmp);
ADOQryTmp.Close;
ADOQryTmp.SQL.Clear;
ADOQryTmp.SQL.Add(sSql);
ADOQryTmp.Open;
sCode:= ADOQryTmp.FieldByName('aCode').AsString;
Edit2.Text := sFirst;
sLast:= Copy(sCode, Length(sCode)-1, Length(sCode));
Edit3.Text:= formatfloat('00',StrToInt(sLast)+1);
ADOQryTmp.Close;
ADOQryTmp.Free;
end;
procedure TDBTreeViewForm.BitBtn1Click(Sender: TObject);
var
ADOQryTmp: TADOQuery;
s: string;
begin
inherited;
s:= Trim(Edit2.Text) + Trim(Edit3.Text);
ADOQryTmp:= TADOQuery.Create(Nil);
GetConn(ADOQryTmp);
ADOQryTmp.Close;
ADOQryTmp.SQL.Clear;
ADOQryTmp.SQL.Add('Insert Into DBTreeView(aCode, aName) Values(:aCode, :aName)');
ADOQryTmp.Parameters.ParamByName('aCode').Value := Trim(s);
ADOQryTmp.Parameters.ParamByName('aName').Value := Trim(Edit4.Text);
ADOQryTmp.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * From DBTreeView');
ADOQuery1.Open;
LoadCode(ADOQuery1);
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -