转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
datatree和数据库绑定的最少代码 -20050829完成         ★★★★

datatree和数据库绑定的最少代码 -20050829完成

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1466 更新时间:2009/4/23 18:26:18

『绝对原创 飞飞』

unit mmslibrarypage;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, VirtualTrees, ComCtrls, ToolWin, mpToolBar,basicModal,DataModal,
  database,myScroll,insertdemon,mysql,newmmsForlibrary;

type
  TMMSLibraryForm = class(TPageForm)
    mainToolBar: TmpToolBar;
    btnNewMMS: TToolButton;
    btnDelete: TToolButton;
    DataTree: TVirtualStringTree;
    ilImages: TImageList;
    btnImport: TToolButton;
    btn2: TToolButton;
    btn3: TToolButton;
    btn4: TToolButton;
    btn5: TToolButton;
    btnExport: TToolButton;
    btnRefresh: TToolButton;
    procedure FormCreate(Sender: TObject);
    procedure btnNewMMSClick(Sender: TObject);
    procedure btnDeleteClick(Sender: TObject);
    procedure btnImportClick(Sender: TObject);
    procedure btnExportClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btnRefreshClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DataTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
      Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: WideString);
    procedure DataTreeInitNode(Sender: TBaseVirtualTree; ParentNode,
      Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
  
  private
    { Private declarations }
    stringlist:TStringList;
  public
    procedure  refreshtree();
  end;

  procedure GetMMSFromLibrary(dparam: TStringList; mysql_rows: PMYSQL_ROW);

type
 PMMSTreeNode=^TMMStreeNode;

//自定义的datatree的结构
 TMMStreeNode=record
   mmsid:string;
   mmstype:string;
   mmssmil:string;
   mmssize:Integer;
   mmssubject:string;
 end;

var
  MMSLibraryForm: TMMSLibraryForm;

implementation

{$R *.dfm}

procedure TMMSLibraryForm.FormCreate(Sender: TObject);
begin
  Self.Font:=Application.MainForm.Font;                                        //保持程序中字体一致
  stringlist:=TStringList.Create;                                                       //保存要显示的数据
  DataTree.NodeDataSize:=SizeOf(TMMStreeNode);                 //初始化datatree的节点大小
end;

procedure TMMSLibraryForm.FormShow(Sender: TObject);
var
  pdbinfo: PDatabaseInfo;
  column : TVirtualTreeColumn;
  Header : TStrings;
  i      : Integer;
  node   : PVirtualNode;
  data   : PINT;

  sql    : string;
  pnode1 : PMMSTreeNode;
begin
  Header:=TStringList.Create;

//添加显示的列名
  if trim(Header.Text)='''''''' then
  begin
    Header.Add(''''ID'''');
    Header.Add(''''Type'''');
    Header.Add(''''Smil 1.0/2.0'''');
    Header.Add(''''Size(B)'''');
    Header.Add(''''Subject'''');
  end;

//设置列的显示

  for i:=0 to Header.Count-1 do
  begin
    column:= DataTree.Header.Columns.Add;
    column.Text:= Header[I];
    column.Width:=dataTree.ClientWidth div 6;
    if i=4 then
       column.Width:= dataTree.ClientWidth div 3-10;
  end;

//    连接数据库,获取指定的数据库(是不是忒简单

pdbinfo:=currentdatabase.databases.GetByIndex(0);

    Refreshtree;

end;

procedure  TMMSLibraryForm.refreshtree();
var
  sql : string;
begin
  DataTree.Clear;
  stringlist.Clear;

  sql:=''''select MMS_ID,MMS_Type,MMS_Smil,MMS_Size,MMS_Subject from mmslibrary'''';

//回调函数:让被调用者调用调用者自身的函数。执行ExeuteSQlQurey时调用了GetMMSFromLibrary

(***********************************************************************************************************

procedure TDatabase.ExeuteSQlQurey(dparam: Pointer; sql: string; callback: TDbDataCallBack);
var
  aHandle, db: pmysql;
  qresult: PMYSQL_RES;
  mysql_rows: PMYSQL_ROW;
  iRtn, fcount, i: Integer;
begin

  try
    aHandle := mysql_init(nil);
   //mysql_real_connect(aHandle, nil, nil, nil, nil, 0, nil, 0);
    if commonconfig.remotemode = 0 then
      db := mysql_real_connect(aHandle, nil, nil, nil, PAnsichar(FCurrentDataBase), 0, nil, 0)
    else
      db := mysql_real_connect(aHandle, PAnsichar(RHost), PAnsichar(RUser), PAnsichar(RPassword), PAnsichar(FCurrentDataBase), 0, nil, 0);

    if db <> nil then
    begin
      iRtn := mysql.mysql_query(db, Pchar(sql));
      if iRtn = 0 then
      begin
        qresult := mysql.mysql_store_result(db);
        if qresult <> nil then
        begin
          fcount := mysql.mysql_num_rows(qresult);
          for i := 0 to fcount - 1 do
          begin
            mysql_rows := mysql.mysql_fetch_row(qresult);
            callback(dparam, mysql_rows);
          end;
        end;
        mysql.mysql_free_result(qresult);
      end;
    end;
  finally
    mysql_Close(db);
  end;

end;

*************************************************************************************************************)


  currentdatabase.ExeuteSQlQurey(stringlist,sql,@GetMMSFromLibrary);

  DataTree.RootNodeCount:=stringlist.Count div 5 ; //小技巧啦
  DataTree.Refresh;
end;

//daparam即是currentdatabase.ExeuteSQlQurey(stringlist,sql,@GetMMSFromLibrary);中的stringlist,

//即用被调用者的值(mysql_rows )初始化调用者的参数

//这个观点很重要,使用也很广泛和特殊
procedure GetMMSFromLibrary(dparam:  TStringList; mysql_rows: PMYSQL_ROW);
begin
    dparam.Add(mysql_rows[0]);
    dparam.Add(mysql_rows[1]);
    dparam.Add(mysql_rows[2]);
    dparam.Add(mysql_rows[3]);
    dparam.Add(mysql_rows[4]);
end;

procedure TMMSLibraryForm.btnNewMMSClick(Sender: TObject);
begin
  NewMMS:=TNewMMS.Create(MMSLibraryForm);
  if NewMMS.ShowModal= mrok then
     refreshtree;
end;

procedure TMMSLibraryForm.btnDeleteClick(Sender: TObject);
var
  node:PVirtualNode;

  sql:string;
begin
  if DataTree.FocusedNode=nil then  Exit;

  node:=DataTree.FocusedNode;

  sql:=''''delete from mmslibrary where MMS_ID="''''+ stringlist[node.index * 5]+''''"'''';
  currentdatabase.ExecuteSqlNoQurey(sql);
  RefreshTree;

end;
procedure TMMSLibraryForm.btnImportClick(Sender: TObject);
var
  dl:TOpenDialog;
begin
  dl.Filter:=''''eml files|*.eml'''';

end;

procedure TMMSLibraryForm.btnExportClick(Sender: TObject);
begin
//
end;

procedure TMMSLibraryForm.btnRefreshClick(Sender: TObject);
begin
  RefreshTree;
end;

procedure TMMSLibraryForm.FormDestroy(Sender: TObject);
begin
  stringlist.Free;
  inherited;
end;

procedure TMMSLibraryForm.DataTreeGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  i:Integer;
begin

//这是关键的步骤:将stringlist和datatree绑定。这个函数的解释如下:

(**********************************************************************************************************

property OnGetText: TVSTGetTextEvent;
Description

[1] [2]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台