📄 u_zdy.pas
字号:
unit u_zdy;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp, Menus, Grids, DBGrids, ImgList, DB, ADODB,
ComCtrls;
type
//自定义一个结构的数据类型
PMyRecord = ^TMyRecord;
TMyRecord = record
ParentNodeID : String; //父节点
NodeID : String; //节点代号
Caption : String; //标题文字
//网址
end;
Tzdy = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
Button2: TButton;
Button3: TButton;
PopupMenu1: TPopupMenu;
MenuADD: TMenuItem;
DBGrid1: TDBGrid;
GroupBox1: TGroupBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Label5: TLabel;
Label4: TLabel;
Label3: TLabel;
Label1: TLabel;
Label6: TLabel;
Label2: TLabel;
Button4: TButton;
Button5: TButton;
TreeView1: TTreeView;
L_ADOConnection1: TADOConnection;
ImageList1: TImageList;
StatusBar1: TStatusBar;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure TreeView1DblClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CreateSubNodes(myNode :TTreeNode);
end;
var
zdy: Tzdy;
SEV_RESP_WAIT:boolean;
implementation
uses u_dm;
{$R *.dfm}
procedure Tzdy.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
if SEV_RESP_WAIT then
begin
//ListBox1.Items.Add('数据已被成功传输到服务器no:'+Socket.ReceiveText);
StatusBar1.SimpleText:='数据已被成功传输到服务器no:'+Socket.ReceiveText;
button2.Enabled:=true;
dm.bxb.Delete;
SEV_RESP_WAIT:=false;
end;
end;
procedure Tzdy.Button1Click(Sender: TObject);
begin
with dm.iptable do
begin
clientsocket1.Host:=dm.iptable.fieldbyname('ip').asstring
end;
ClientSocket1.Active:=true;
Button1.Enabled:=false;
end;
procedure Tzdy.Button2Click(Sender: TObject);
var
adate:TstringList;
begin
if not dm.bxb.eof
then
begin
adate:=TstringList.Create;
StatusBar1.SimpleText:='开始传输数据.....';
//ListBox1.Items.Add('开始传输数据.....');
dm.bxb.Open;
dm.bxb.First;
adate.values['报修系统']:=dm.bxb.FieldByName('报修系统').AsString;
adate.values['报修部件']:=dm.bxb.FieldByName('报修部件').AsString;
adate.values['报修位置']:=dm.bxb.FieldByName('报修位置').AsString;
adate.values['故障特征']:=dm.bxb.fieldbyname('故障特征').AsString;
adate.values['维修地点']:=dm.bxb.fieldbyname('维修地点').AsString;
adate.values['车辆号码']:=dm.bxb.fieldbyname('车辆号码').AsString;
adate.values['报修时间']:=dm.bxb.fieldbyname('报修时间').AsString;
adate.Values['故障句']:= dm.bxb.fieldbyname('故障句').AsString;
ClientSocket1.Socket.SendText(adate.text);
SEV_RESP_WAIT:=true;
button2.Enabled:=false;
while SEV_RESP_WAIT do
Application.ProcessMessages
end
else
showmessage('没有保存的数据可以传输!');
end;
procedure Tzdy.Button3Click(Sender: TObject);
begin
SEV_RESP_WAIT:=false;
ClientSocket1.Active:=false;
Button3.Enabled:=true;
button2.Enabled:=true;
StatusBar1.SimpleText:='连接已被中断';
//ListBox1.Items.Add('连接已被中断');
Button1.Enabled:=true;
end;
procedure Tzdy.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
showmessage('你已经成功连接服务器!');
end;
procedure Tzdy.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
showmessage('服务器已被关闭或者你已中断连接,请停止传输数据!');
end;
procedure Tzdy.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Edit1.text:='';
Edit2.text:='';
Edit3.text:='';
Edit4.text:='';
Edit5.text:='';
Edit6.text:='';
StatusBar1.SimpleText:='';
//ListBox1.Items.Clear;
end;
procedure Tzdy.Button4Click(Sender: TObject);
begin
if(edit1.Text<>'')and(edit2.Text<>'')and(edit3.Text<>'')and (edit4.Text<>'')
and (edit5.Text<>'') then
begin
dm.bxb.Append;
dm.bxb.FieldByName('报修系统').AsString:=Edit1.text;
dm.bxb.FieldByName('报修部件').AsString:=Edit2.text;
dm.bxb.FieldByName('报修位置').AsString:=Edit3.text;
dm.bxb.FieldByName('故障特征').AsString:=Edit4.text;
dm.bxb.FieldByName('维修地点').AsString:=Edit6.text;
dm.bxb.FieldByName('车辆号码').AsString:=Edit5.text;
dm.bxb.FieldByName('报修时间').AsString:=datetimetostr(now());
dm.bxb.FieldByName('故障句').AsString:= Edit2.text+Edit3.text+ Edit4.text;
dm.bxb.post;
Edit1.text:='';
Edit2.text:='';
Edit3.text:='';
Edit4.text:='';
Edit5.text:='';
Edit6.text:='';
end;
end;
procedure Tzdy.Button5Click(Sender: TObject);
begin
dm.bxb.Delete;
end;
procedure Tzdy.TreeView1DblClick(Sender: TObject);
var
currentnode: ttreenode;
begin
currentnode:=treeview1.selected;
if treeview1.selected.level=1 then
begin
Edit1.Text:=currentnode.Text;
end;
if treeview1.selected.level=2 then
begin
Edit2.Text:=currentnode.Text;
end;
if treeview1.selected.level=3 then
begin
Edit3.Text:=currentnode.Text;
end;
if treeview1.selected.level=4 then
begin
Edit4.Text:=currentnode.Text;
end;
end;
procedure Tzdy.FormCreate(Sender: TObject);
var
//声明指针变量
MyRecordPointer: PMyRecord;
begin
//创建指针变量
New(MyRecordPointer);
//设置根节点的指针变量内容
MyRecordPointer.ParentNodeID := '';
MyRecordPointer.NodeID := 'Root';
MyRecordPointer.Caption := TreeView1.Items[0].Text;
TreeView1.Items[0].Data := MyRecordPointer;
//将数据库的数据写到TTreeView对象中
CreateSubNodes(TreeView1.Items[0]);
end;
procedure Tzdy.CreateSubNodes(myNode :TTreeNode);
var
//声明指针变量
MyRecordPointer: PMyRecord;
tmpDataSet : TADODataSet;
tmpNode : TTreeNode;
SQLStr : string;
begin
//创建DataSet
tmpDataSet := TADODataSet.Create(nil);
//组合SQL命令,找出指定节点的所有的子节点
SQLStr := ' ParentNodeID = ''' + PMyRecord(myNode.Data)^.NodeID + '''';
//连接数据库
tmpDataSet.Connection := L_ADOConnection1;
tmpDataSet.CursorType := ctStatic;
tmpDataSet.CursorLocation := clUseClient;
tmpDataSet.CommandText := 'select * from myTTreeView where ' + SQLStr + ' Order by NodeID ';
tmpDataSet.Active := True;
tmpDataSet.First;
While Not tmpDataSet.Eof do begin
//创建Model Node
tmpNode := TreeView1.Items.AddChild(myNode,tmpDataSet.FieldValues['Caption']);
//设置图片属性
tmpNode.ImageIndex := tmpNode.Level + 1;
tmpNode.SelectedIndex := tmpNode.Level + 1;
//创建指针变量
New(MyRecordPointer);
//将相关数据保存到tmpNode
MyRecordPointer.ParentNodeID := tmpDataSet.FieldValues['ParentNodeID'];
MyRecordPointer.NodeID := tmpDataSet.FieldValues['NodeID'];
MyRecordPointer.Caption := tmpDataSet.FieldValues['Caption'];
tmpNode.Data := MyRecordPointer;
//创建子节点(以递归的方式调用)
CreateSubNodes(tmpNode);
tmpDataSet.Next;
end;
//关闭与释放DataSet
tmpDataSet.Active := False;
tmpDataSet.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -