TTreeview控件在数据库编程中(提供源码)(100分)

  • 主题发起人 SujmSujm
  • 开始时间
S

SujmSujm

Unregistered / Unconfirmed
GUEST, unregistred user!
TTreeview控件在数据库编程中起到了重要的位置,以下是<<收费系统>>的一段代码是用treeview控件
实现一对多多树形结构以供交流,系统所有界面全部采用treeview 控件控制,.如需要系统全部源代码(150K),
请与我联系:E_mail :sujm@public1.sz.js.cn

unit PrintInv;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, StdCtrls, DBCtrls, Grids, DBGrids, ComCtrls, ExtCtrls,
ImgList, Menus;

type
TVillage=record //村记录
vid:string; //村ID
vname:string; //村名
end;
PVillage=^TVillage; //村指针

TTeam=record //组记录
vid:string; //村ID
tid:string; //组ID
tname:string //组名
end;
PTeam=^TTeam; //组指针

TfmPrintInv = class(TForm)
sqlVillage: TQuery;
sqlTeam: TQuery;
dsMonthly: TDataSource;
tv: TTreeView;
Splitter: TSplitter;
pnlFamily: TPanel;
ImageList: TImageList;
dbgFamily: TDBGrid;
pnlMonth: TPanel;
Label1: TLabel;
btnRefresh: TButton;
edtYY1: TEdit;
cbMM1: TComboBox;
sqlMonthLy: TQuery;
sqlCommon: TQuery;
cbMM2: TComboBox;
Label3: TLabel;
cbSort: TComboBox;
edtYY2: TEdit;
Label5: TLabel;
Label2: TLabel;
Label6: TLabel;
chkSort: TCheckBox;
PopupMenu: TPopupMenu;
pmPrintAll: TMenuItem;
pmPrintOne: TMenuItem;
pmPrintSelect: TMenuItem;
MainMenu: TMainMenu;
mmPrintInv: TMenuItem;
mmPrintOne: TMenuItem;
mmPrintAll: TMenuItem;
mmPrintSelect: TMenuItem;
N1: TMenuItem;
pmPreviewOne: TMenuItem;
N2: TMenuItem;
mmPreviewOne: TMenuItem;
mmReport: TMenuItem;
mmReportCharge: TMenuItem;
N3: TMenuItem;
pmReportCharge: TMenuItem;
mmPreviewSample: TMenuItem;
N4: TMenuItem;
mmDataOut: TMenuItem;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure tvDeletion(Sender: TObject; Node: TTreeNode);
procedure tvGetImageIndex(Sender: TObject; Node: TTreeNode);
procedure tvGetSelectedIndex(Sender: TObject; Node: TTreeNode);
procedure edtYY1KeyPress(Sender: TObject; var Key: Char);
procedure tvChange(Sender: TObject; Node: TTreeNode);
procedure edtYY2KeyPress(Sender: TObject; var Key: Char);
procedure chkSortClick(Sender: TObject);
procedure btnRefreshClick(Sender: TObject);
procedure pmPrintAllClick(Sender: TObject);
procedure pmPrintOneClick(Sender: TObject);
procedure pmPrintSelectClick(Sender: TObject);
procedure mmPrintOneClick(Sender: TObject);
procedure mmPrintAllClick(Sender: TObject);
procedure mmPrintSelectClick(Sender: TObject);
procedure pmPreviewOneClick(Sender: TObject);
procedure mmPreviewOneClick(Sender: TObject);
procedure mmReportChargeClick(Sender: TObject);
procedure pmReportChargeClick(Sender: TObject);
procedure mmPreviewSampleClick(Sender: TObject);
procedure mmDataOutClick(Sender: TObject);
private
{ Private declarations }
procedure InitTree; //显示村组树
procedure DisplayMonth(Node:TTreeNode); //显示某月收费

public
{ Public declarations }
end;

var
fmPrintInv: TfmPrintInv;

implementation

uses catv_vars, ReportInv, SelectID, ReportCharge, ReportSample, SelectDir;
var strSelect,strFrom,strWhere,strGroup,strOrder:string; //由DisplayMonth函数生成,以提供打印数据,开票时引用这些


{$R *.DFM}

procedure TfmPrintInv.InitTree;
var tn0,tn1:TTreeNode;
aVillage:pVillage;
aTeam:pTeam;
begin
tv.Items.Clear;
tn0:=tv.Items.Add(nil,_AreaName);
with sqlVillage do
begin
Close;
SQL.Clear;
SQL.Add('select vid,vname from village order by vid ')
Open;
while not eof do
begin
New(aVillage);
aVillage.vid:=FieldByName('vid').asstring;
aVillage.vname:=FieldByName('vname').asstring;
tn1:=tv.Items.AddChildObject(tn0,aVillage.vname,aVillage);
with sqlTeam do
begin
Close;
SQL.Clear;
SQL.Add('select vid,tid,tname from team where vid=:vid order by tid ');
ParamByName('vid').asstring:=aVillage.vid;
Open;
while not eof do
begin
New(aTeam);
aTeam.vid:=aVillage.vid;
aTeam.tid:=FieldByName('tid').asstring;
aTeam.tname:=FieldByName('tname').asstring;
tv.Items.AddChildObject(tn1,aTeam.tname,aTeam);
Next;
end;
Close;
end;
Next;
end;
Close;
end;


end;

procedure TfmPrintInv.DisplayMonth(Node:TTreeNode);
var s:string; //显示指定村组、指定年月的收费用户,!!!!!!!!这里不区分有效和无效用户
begin
strSelect:='select f.id,max(f.fname) as fname,max(f.address) as address,count(*) as cnt,';
strSelect:=strSelect+' max(f.bankid) as bankid,max(f.terms) as terms,';
strSelect:=strSelect+' sum(m.m_reg) as m_reg,sum(m.m_charges) as m_charges,';
strSelect:=strSelect+' sum(m.m_other) as m_other,sum(m.m_all) as m_all ';
strFrom:=' from family f,monthly m ';
strGroup:=' group by f.id ';
strOrder:=' order by f.id ';


case Node.Level of
0: //所有用户
begin
s:=' f.id=m.id ';
s:=s+' and (m.yy+m.mm)>='''+edtYY1.Text+cbMM1.Text+'''';
s:=s+' and (m.yy+m.mm)<='''+edtYY2.Text+cbMM2.Text+'''';
end;
1: //指定村用户
begin
s:=' f.id=m.id and f.vid='''+PVillage(Node.data)^.vid+'''';
s:=s+' and (m.yy+m.mm)>='''+edtYY1.Text+cbMM1.Text+'''';
s:=s+' and (m.yy+m.mm)<='''+edtYY2.Text+cbMM2.Text+'''';
end;
2: //指定组用户
begin
s:=' f.id=m.id and f.vid='''+PTeam(Node.data)^.vid+''' and f.tid='''+PTeam(Node.data)^.tid+'''';
s:=s+' and (m.yy+m.mm)>='''+edtYY1.Text+cbMM1.Text+'''';
s:=s+' and (m.yy+m.mm)<='''+edtYY2.Text+cbMM2.Text+'''';
end;
end;
if chkSort.Checked then
strWhere:=' where sid='''+_Sid[cbSort.ItemIndex]+''' and '+s
else
strWhere:=' where '+s;

with sqlMonthly do
begin
Close;
SQL.Clear;
SQL.add(strSelect+strFrom+strWhere+strGroup+strOrder);
Open;
end;


end;



procedure TfmPrintInv.FormClose(Sender: TObject;
var Action: TCloseAction);
begin

Action:=caFree;
end;

procedure TfmPrintInv.FormCreate(Sender: TObject);
var y,m,d:Word;
i:integer;
begin
DecodeDate(Date,y,m,d);
edtYY1.Text:=IntToStr(y);
edtYY2.Text:=IntToStr(y);
cbMM1.ItemIndex:=m-1;
cbMM2.ItemIndex:=m-1;
cbSort.Items.Clear;
for i:=0 to Length(_Sname)-1 do
cbSort.Items.Add(_Sname);
cbSort.ItemIndex:=0;
chkSort.Checked:=False;
cbSort.Enabled:=False;

InitTree;
end;

procedure TfmPrintInv.tvDeletion(Sender: TObject; Node: TTreeNode);
begin
if Assigned(Node.data) then
case Node.Level of
1:
Dispose(PVillage(Node.Data));
2:
Dispose(PTeam(Node.Data));
end;
end;

procedure TfmPrintInv.tvGetImageIndex(Sender: TObject; Node: TTreeNode);
begin
if Node.Expanded then
Node.ImageIndex:=1
else
Node.ImageIndex:=0;
end;

procedure TfmPrintInv.tvGetSelectedIndex(Sender: TObject;
Node: TTreeNode);
begin
Node.SelectedIndex:=Node.ImageIndex;
end;

procedure TfmPrintInv.edtYY1KeyPress(Sender: TObject; var Key: Char);
begin
if ((Key>'9') or (Key <'0')) and not (Key=#8) then Key:=#0; //只允许 0-9 和退格键
end;

procedure TfmPrintInv.tvChange(Sender: TObject; Node: TTreeNode);
begin
DisplayMonth(Node);
end;

procedure TfmPrintInv.edtYY2KeyPress(Sender: TObject; var Key: Char);
begin
if ((Key>'9') or (Key <'0')) and not (Key=#8) then Key:=#0; //只允许 0-9 和退格键

end;

procedure TfmPrintInv.chkSortClick(Sender: TObject);
begin
cbSort.Enabled:=chkSort.Checked;
end;

procedure TfmPrintInv.btnRefreshClick(Sender: TObject);
begin
DisplayMonth(tv.selected);
end;

procedure TfmPrintInv.pmPrintAllClick(Sender: TObject);
begin
rptInv.DataSet:=rptInv.sqlPrint;
with rptInv.sqlPrint do
begin
Close;
SQL.Clear;
SQL.add(strSelect+strFrom+strWhere+strGroup+strOrder);
Open;
end;
rptInv.Print;
rptInv.sqlPrint.Close;
end;

procedure TfmPrintInv.pmPrintOneClick(Sender: TObject);
var select_id:string;
begin
Select_Id:=sqlMonthly.FieldByName('id').asstring;
rptInv.DataSet:=rptInv.sqlPrint;
with rptInv.sqlPrint do
begin
Close;
SQL.Clear;
SQL.add(strSelect+strFrom+strWhere+' and f.id='''+Select_id+''''+strGroup+strOrder);
Open;
end;
rptInv.Print;
rptInv.sqlPrint.Close;

end;

procedure TfmPrintInv.pmPrintSelectClick(Sender: TObject);
begin
with TfmSelectId.Create(nil) do
try
ShowModal;
if ModalResult=mrOk then
begin
with rptInv.sqlPrint do
begin
Close;
SQL.Clear;
SQL.add(strSelect+strFrom+strWhere+' and f.id>='''+edtID1.text+''' and f.id<='''+edtID2.Text+''''+strGroup+strOrder);
Open;
end;
rptInv.Print;
rptInv.sqlPrint.Close;
end;
finally
free;
end;
end;

procedure TfmPrintInv.mmPrintOneClick(Sender: TObject);
begin
pmPrintOne.Click;
end;

procedure TfmPrintInv.mmPrintAllClick(Sender: TObject);
begin
pmPrintAll.Click;
end;

procedure TfmPrintInv.mmPrintSelectClick(Sender: TObject);
begin
pmPrintSelect.Click;
end;

procedure TfmPrintInv.pmPreviewOneClick(Sender: TObject);
var select_id:string;
begin
Select_Id:=sqlMonthly.FieldByName('id').asstring;
rptInv.DataSet:=rptInv.sqlPrint;
with rptInv.sqlPrint do
begin
Close;
SQL.Clear;
SQL.add(strSelect+strFrom+strWhere+' and f.id='''+Select_id+''''+strGroup+strOrder);
Open;
end;
rptInv.Preview;
rptInv.sqlPrint.Close;

end;

procedure TfmPrintInv.mmPreviewOneClick(Sender: TObject);
begin
pmPreviewOne.Click;
end;

procedure TfmPrintInv.mmReportChargeClick(Sender: TObject);
var tn:TTreeNode;
S:string;
begin
tn:=tv.Selected;
case tn.Level of
0:
s:='';
1:
s:=tn.Text; //村镇
2:
s:=tn.Parent.Text+tn.Text; //村镇+组街
end;
if chkSort.Checked then
S:=S+' 用户类别:'+cbSort.Text;
if Trim(S)<>'' then
S:='('+trim(s)+')';
with rptCharge do
begin
qrlTitle.Caption:=_AreaName+edtYY1.Text+'年'+cbMM1.Text+'月至'+edtYY2.Text+'年'+cbMM2.Text+'月有线电视收费情况表'
qrlSubTitle.Caption:=S;
qrlUserName.Caption:='制表人:'+_UserName;
Dataset:=sqlMonthly; //???在报表中已静态设定,但 打印报表有时出现不存在的函数错误,本行以期解决.
Preview;
end;
end;

procedure TfmPrintInv.pmReportChargeClick(Sender: TObject);
begin
mmReportCharge.Click;
end;

procedure TfmPrintInv.mmPreviewSampleClick(Sender: TObject);
var select_id:string;
begin
Select_Id:=sqlMonthly.FieldByName('id').asstring;
rptSample.DataSet:=rptSample.sqlPrint;
with rptSample.sqlPrint do
begin
Close;
SQL.Clear;
SQL.add(strSelect+strFrom+strWhere+' and f.id='''+Select_id+''''+strGroup+strOrder);
Open;
end;
rptSample.Preview;
rptSample.sqlPrint.Close;

end;
end.

 
W

wangyw_77

Unregistered / Unconfirmed
GUEST, unregistred user!
给我一份,谢谢wangyw_tt@263.net
 
C

cui27

Unregistered / Unconfirmed
GUEST, unregistred user!
给我一份,谢谢。cui26@china.com
 
E

easytop

Unregistered / Unconfirmed
GUEST, unregistred user!
给我一份,Thanks!! easytop@21cn.com
 
W

weiweiHU

Unregistered / Unconfirmed
GUEST, unregistred user!
给我一份,谢谢。libo_lijiawei@163.com
 
C

chyw123

Unregistered / Unconfirmed
GUEST, unregistred user!
给我一份,谢谢。chyw123@163.com
 
J

joe-chen

Unregistered / Unconfirmed
GUEST, unregistred user!
请给我一份,THANK joe-chen@21cn.com
 
B

bugs

Unregistered / Unconfirmed
GUEST, unregistred user!
给我一份吧,万分感谢!!!
sxake@sina.com
 
F

fullstrong

Unregistered / Unconfirmed
GUEST, unregistred user!
给我一份: lizhijian@china.com
 
G

gfong

Unregistered / Unconfirmed
GUEST, unregistred user!
给我一份:gfong@163.com,谢谢
 

尘莽

Unregistered / Unconfirmed
GUEST, unregistred user!
Email To : Fangmin@yeah.net.

保证提供良好的建议(提高程序的效率)
 
Z

zs

Unregistered / Unconfirmed
GUEST, unregistred user!
给我一份:zhsen@263.net,谢谢
 
T

terrydelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢,能不能给我一份wuhanyt@21cn.com
 
L

liyoubin

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢,能不能给我一份liyoubin@21cn.com
 
A

asaili

Unregistered / Unconfirmed
GUEST, unregistred user!
能给我发一份吗
mfgme@21cn.com
 
D

Dephic

Unregistered / Unconfirmed
GUEST, unregistred user!
也给我一份:wudaiquan@china.com
谢谢!
 

蓝色暇想

Unregistered / Unconfirmed
GUEST, unregistred user!
也给我一份吧,谢谢
harry1818@21cn.com
 

蛐蛐

Unregistered / Unconfirmed
GUEST, unregistred user!
你上载到某个地方,如果你方便。anzuo@fm365.com
 
T

TIDE_LIU

Unregistered / Unconfirmed
GUEST, unregistred user!
给我一份吧!太感谢了!我正在找这方面的东东呢!
TIDE@263.NET
 
X

xsjs

Unregistered / Unconfirmed
GUEST, unregistred user!
给俺一份吧!
hqlsta@163.net
 
顶部