📄 kjkm02p.pas
字号:
unit kjkm02p;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, Buttons, ToolWin, ComCtrls, ImgList,
DB, DBTables, STRUTILS;
type
Tkjkm02f = class(TForm)
TreeView1: TTreeView;
cbcszl: TCoolBar;
spappend: TSpeedButton;
Label56: TLabel;
spexit: TSpeedButton;
sppost: TSpeedButton;
spedit: TSpeedButton;
spcancel: TSpeedButton;
Label57: TLabel;
spdelete: TSpeedButton;
EDP: TEdit;
Label1: TLabel;
Label2: TLabel;
Query1: TQuery;
Query2: TQuery;
ETYPE_NO: TEdit;
StatusBar1: TStatusBar;
Label3: TLabel;
EFTYPE_NO: TEdit;
procedure spexitClick(Sender: TObject);
procedure spappendClick(Sender: TObject);
procedure REFRESHDATA;
procedure REFRESHTREEVIEW;
procedure FormShow(Sender: TObject);
procedure spcancelClick(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
procedure sppostClick(Sender: TObject);
procedure FormClick(Sender: TObject);
procedure spdeleteClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure speditClick(Sender: TObject);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
private
{ Private declarations }
public
{ Public declarations }
end;
var
kjkm02f: Tkjkm02f;
ADDMODE, EDITMODE: BOOLEAN;
implementation
{$R *.dfm}
procedure Tkjkm02f.spexitClick(Sender: TObject);
begin
CLOSE;
end;
procedure Tkjkm02f.REFRESHData;
VAR
I,LEN:INTEGER;
KMCODE:STRING;
begin
if ADDMODE then
BEGIN
ETYPE_NO.Text:='';
EDP.Text:='';
if (treeview1.selected <> nil) and not (treeview1.Selected.IsFirstNode) then
BEGIN
I:=ANSIPOS(')',TREEVIEW1.Selected.Text);
eFTYPE_NO.Text := MIDSTR(TREEVIEW1.Selected.Text,2,I-2);
END
else
eFTYPE_NO.text := '';
if (treeview1.Selected = nil) or treeview1.Selected.IsFirstNode then
eFTYPE_NO.Text := '';
END;
if ADDMODE or EDITMODE then
begin
SPPOST.Visible := TRUE;
SPAPPEND.Visible := FALSE;
SPCANCEL.Visible := TRUE;
SPEDIT.Visible := FALSE;
SPDELETE.Enabled := FALSE;
ETYPE_NO.ReadOnly := FALSE;
EDP.ReadOnly :=FALSE;
end
else
begin
if (treeview1.selected <> nil) and not treeview1.Selected.IsFirstNode then
BEGIN
I:=ANSIPOS(')',TREEVIEW1.Selected.Text);
len:=length(TREEVIEW1.Selected.Text);
eTYPE_NO.Text := MIDSTR(TREEVIEW1.Selected.Text,2,I-2);
EDP.Text:=midSTR(TREEVIEW1.Selected.Text,I+1,len);
IF TREEVIEW1.Selected.Parent<>NIL
THEN
BEGIN
I:=ANSIPOS(')',TREEVIEW1.Selected.Parent.Text);
eFTYPE_NO.Text := MIDSTR(TREEVIEW1.Selected.PARENT.Text,2,I-2);
END
ELSE
EFTYPE_NO.Text :='';
END
else
BEGIN
eFTYPE_NO.text := '';
EDP.Text:='';
ETYPE_NO.Text:='';
END;
SPPOST.Visible := FALSE;
SPAPPEND.Visible := TRUE;
SPCANCEL.Visible := FALSE;
SPEDIT.Visible := TRUE;
SPDELETE.Enabled := TRUE;
ETYPE_NO.ReadOnly := TRUE;
EDP.ReadOnly :=TRUE;
end;
end;
procedure Tkjkm02f.spappendClick(Sender: TObject);
begin
ADDMODE := TRUE;
REFRESHDATA;
etype_no.SetFocus ;
end;
procedure Tkjkm02f.REFRESHTREEVIEW;
var
SQL: string;
I: INTEGER;
NODE,root: TTREENODE;
begin
TREEVIEW1.Items.Clear;
root:=treeview1.Items.Add(nil,'会计科目分类');
SQL := 'SELECT * FROM KJ01 ORDER BY TYPE';
QUERY1.Close;
QUERY1.SQL.Clear;
QUERY1.SQL.Add(SQL);
QUERY1.OPEN;
while not QUERY1.Eof do
begin
//定位其父节点
I := LENGTH(QUERY1.FIELDBYNAME('TYPE').AsString);
//如果为第一层
if I = 2 then
begin
TREEVIEW1.Selected := nil;
NODE := TREEVIEW1.Items.Addchild(root,
'('+QUERY1.FIELDBYNAME('TYPE_NO').ASSTRING+')'+QUERY1.FIELDBYNAME('DP').AsString);
NODE.Data := POINTER(QUERY1.FIELDBYNAME('ID').ASINTEGER);
end
else
//如果不是第一层
begin
//找出父节点
SQL := MIDSTR(QUERY1.FIELDBYNAME('TYPE').AsString, 0, (I - 2));
SQL := ' SELECT * FROM KJ01 WHERE TYPE=' + '''' + SQL + '''';
QUERY2.Close;
QUERY2.SQL.Clear;
QUERY2.SQL.Add(SQL);
QUERY2.Open;
if not QUERY2.IsEmpty then
begin
I := 0;
while I < TREEVIEW1.Items.Count do
begin
NODE := TREEVIEW1.Items[I];
if INTEGER(TREEVIEW1.Items[I].Data) = QUERY2.FieldByName('ID').AsInteger then
begin
NODE := TREEVIEW1.Items.AddChild(NODE,
'('+QUERY1.FIELDBYNAME('TYPE_NO').ASSTRING+')'+QUERY1.FIELDBYNAME('DP').ASSTRING);
NODE.Data := POINTER(QUERY1.FieldByName('ID').AsInteger);
end;
I := I + 1;
end;
end;
end;
QUERY1.Next;
end;
end;
procedure Tkjkm02f.FormShow(Sender: TObject);
begin
REFRESHTREEVIEW;
REFRESHDATA;
end;
procedure Tkjkm02f.spcancelClick(Sender: TObject);
begin
ADDMODE := FALSE;
EDITMODE := FALSE;
REFRESHDATA;
end;
procedure Tkjkm02f.TreeView1Click(Sender: TObject);
begin
refreshdata;
end;
procedure Tkjkm02f.sppostClick(Sender: TObject);
var
SQL, FTYPE_NO: string;
I: INTEGER;
FLAG: BOOLEAN;
NODE: TTREENODE;
begin
if ADDMODE then
begin
//查找同一级编号,取最大的编号再加1
//第一级
if TREEVIEW1.SelectionCount = 0 then
begin
I := 10;
FLAG := FALSE;
while (I <= 99) and not FLAG do
begin
SQL := 'SELECT * FROM KJ01 WHERE TYPE=' + '''' + INTTOSTR(I) + '''';
QUERY1.Close;
QUERY1.SQL.Clear;
QUERY1.SQL.Add(SQL);
QUERY1.Open;
if QUERY1.IsEmpty then
begin
SQL := ' INSERT INTO KJ01 (TYPE,DP,TYPE_NO) VALUES (' +
'''' + INTTOSTR(I) + '''' +
',' + '''' + EDP.Text + '''' +
','+''''+ETYPE_NO.Text+''''+ ')';
QUERY1.Close;
QUERY1.SQL.Clear;
QUERY1.SQL.ADD(SQL);
QUERY1.ExecSQL;
FLAG := TRUE;
end;
I := I + 1;
end;
if not FLAG then
MESSAGEDLG('错误,同一层类别不能超过90个!', mtInformation,
[mbOk], 0)
else
begin
//更新树
SQL := ' SELECT * FROM KJ01 WHERE TYPE=' + '''' + INTTOSTR(I - 1) + '''';
QUERY1.Close;
QUERY1.SQL.Clear;
// SHOWMESSAGE(SQL);
QUERY1.SQL.ADD(SQL);
QUERY1.OPEN;
TREEVIEW1.Selected := nil;
NODE := TREEVIEW1.Items.Add(nil,
'('+QUERY1.FIELDBYNAME('TYPE_NO').ASSTRING+')'+ QUERY1.FIELDBYNAME('DP').AsString);
NODE.Data := POINTER(QUERY1.FIELDBYNAME('ID').ASINTEGER);
TREEVIEW1.Repaint;
TREEVIEW1.Refresh;
end;
ADDMODE := FALSE;
EDITMODE := FALSE;
REFRESHDATA;
end //END SELECT=NIL
else
begin //不是第一层,则须取得上层编号加上本层编号
//取得父节点编号
I := INTEGER(TREEVIEW1.Selected.Data); //取得父世点的ID
SQL := ' SELECT * FROM KJ01 WHERE ID=' + INTTOSTR(I);
QUERY1.Close;
QUERY1.SQL.Clear;
QUERY1.SQL.Add(SQL);
QUERY1.OPEN;
FTYPE_NO := QUERY1.FIELDBYNAME('TYPE').AsString;
I := 10;
FLAG := FALSE;
while (I <= 99) and not FLAG do
begin
SQL := 'SELECT * FROM KJ01 WHERE TYPE=' + '''' + FTYPE_NO + INTTOSTR(I) + '''';
QUERY1.Close;
QUERY1.SQL.Clear;
QUERY1.SQL.Add(SQL);
QUERY1.Open;
if QUERY1.IsEmpty then
begin
SQL := ' INSERT INTO KJ01 (TYPE,DP,TYPE_NO) VALUES (' +
'''' + FTYPE_NO + INTTOSTR(I) + '''' +
',' + '''' + EDP.Text + '''' +
','+''''+ETYPE_NO.Text+''''+ ')';
QUERY1.Close;
QUERY1.SQL.Clear;
QUERY1.SQL.ADD(SQL);
QUERY1.ExecSQL;
FLAG := TRUE;
end; // END ISEMPTY
I := I + 1;
end; // END WHILE
if not FLAG then
MESSAGEDLG('错误,同一层类别不能超过90个!', mtInformation,
[mbOk], 0)
else
begin
//更新树
SQL := ' SELECT * FROM KJ01 WHERE TYPE=' + ''''
+ FTYPE_NO + INTTOSTR(I - 1) + '''';
QUERY1.Close;
QUERY1.SQL.Clear;
// SHOWMESSAGE(SQL);
QUERY1.SQL.ADD(SQL);
QUERY1.OPEN;
NODE := TREEVIEW1.Selected;
NODE := TREEVIEW1.Items.AddChild(NODE,
'('+QUERY1.FIELDBYNAME('TYPE_NO').ASSTRING+')'+ QUERY1.FIELDBYNAME('DP').ASSTRING);
NODE.Data := POINTER(QUERY1.FieldByName('ID').AsInteger);
TREEVIEW1.Repaint;
TREEVIEW1.Refresh;
end;
ADDMODE := FALSE;
EDITMODE := FALSE;
REFRESHDATA;
// REFRESHTREEVIEW;
end; //END SELECT=NIL
end; // END ADDMODE
if editmode then
begin
sql := ' update KJ01 set dp=' + '''' + eDP.Text + '''' +
',TYPE_NO='+''''+ETYPE_NO.Text+''''+
' where id=' + inttostr(integer(treeview1.selected.data));
QUERY1.Close;
QUERY1.SQL.Clear;
QUERY1.SQL.ADD(SQL);
QUERY1.ExecSQL;
treeview1.Selected.Text :='('+ETYPE_NO.Text+')'+eDP.text;
TREEVIEW1.Repaint;
TREEVIEW1.Refresh;
ADDMODE := FALSE;
EDITMODE := FALSE;
REFRESHDATA;
end;
end;
procedure Tkjkm02f.FormClick(Sender: TObject);
begin
// treeview1.Selected := nil;
// refreshdata;
end;
procedure Tkjkm02f.spdeleteClick(Sender: TObject);
var
SQL, TYPE_NO: string;
I: INTEGER;
begin
if TREEVIEW1.SelectionCount = 0 then
MESSAGEDLG('错误,你还没选择要删除的节点!', mtERROR,
[mbOk], 0)
else
begin
I := INTEGER(TREEVIEW1.Selected.Data);
SQL := ' SELECT * FROM KJ01 WHERE ID=' + INTTOSTR(I);
QUERY1.Close;
QUERY1.SQL.Clear;
QUERY1.SQL.ADD(SQL);
QUERY1.OPEN;
TYPE_NO := QUERY1.FIELDBYNAME('TYPE').AsString;
SQL := ' SELECT * FROM KJ01 WHERE TYPE LIKE ' + '''' + TYPE_NO + '%' + '''';
QUERY1.Close;
QUERY1.SQL.Clear;
QUERY1.SQL.ADD(SQL);
QUERY1.OPEN;
if QUERY1.RecordCount > 1 then
MESSAGEDLG('错误,你还有下级节点,不能删除!', mtERROR,
[mbOk], 0)
else
if MESSAGEDLG('你确定要删除此节点吗?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
SQL := 'DELETE FROM KJ01 WHERE TYPE=' + '''' + TYPE_NO + '''';
QUERY1.Close;
QUERY1.SQL.Clear;
QUERY1.SQL.ADD(SQL);
QUERY1.ExecSQL;
TREEVIEW1.Selected.Delete;
TREEVIEW1.Repaint;
TREEVIEW1.Refresh;
TREEVIEW1.Selected := nil;
refreshdata;
end;
end;
end;
procedure Tkjkm02f.Button1Click(Sender: TObject);
var
I, J: INTEGER;
begin
I := 0;
while I < TREEVIEW1.Items.Count do
begin
J := INTEGER(TREEVIEW1.Items[I].DATA);
SHOWMESSAGE(INTTOSTR(J));
I := I + 1;
end;
end;
procedure Tkjkm02f.speditClick(Sender: TObject);
begin
editmode := true;
eDP.ReadOnly := false;
refreshdata;
eDP.SetFocus;
end;
procedure Tkjkm02f.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
refreshdata;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -