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

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

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绑定。这个函数的解释如下:

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

本文关键:datatree和数据库绑定的最少代码 -20050829完成
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top