请发给我!!!
[email protected]

解决方案 »

  1.   

    多得很/*=========================================
    函数功能:从数据源信息文件提取信息到树形控件
    参数说明:CTreeCtrl* pTree,   --树形控件指针
              CString strFileName --数据源文件名称
    ==========================================*/
    BOOL source::InsertInfo(CTreeCtrl* pTree,CString strDsnFile)
    {
    if(strDsnFile.IsEmpty()) return FALSE;
    CFile fp;
    if(!fp.Open(strDsnFile,CFile::modeRead|CFile::typeBinary))return false;
    long len=fp.GetLength();
    if(len<20)return false;
    char *ptr=new char[len];
    memset(ptr,0,len);
    fp.Read(ptr,len);
    fp.Close();
    CString s=ptr;
    CString name,desc;
    delete ptr;
    HTREEITEM hRoot=pTree->GetRootItem();
    int l1,l2;
    if(-1==(l1=s.Find("[%ip=",0)))return false;
    if(-1==(l2=s.Find(",,",1)))return false;
    name=s.Mid(l1+5,l2-l1-5);
    if(-1==(l1=s.Find(",,desc=",1)))return false;
    if(-1==(l2=s.Find("%]",l1+1)))return false;
    desc=s.Mid(l1+7,l2-l1-7);
    desc+="(";
    desc+=name;
    desc+=")";
    //pTree->InsertItem(desc.GetBuffer(0));
    int l=0;
    CString srcName,srcDesc;  //数据源名和描述
    do{
       if(-1==(l1=s.Find("[%source=",l)))break;
       if(-1==(l2=s.Find(",,",l1+1)))break;
       srcName=s.Mid(l1+9,l2-l1-9);
       if(-1==(l1=s.Find(",,desc=",l1+2)))break;
       if(-1==(l2=s.Find(",,",l1+2)))break;
       srcDesc=s.Mid(l1+7,l2-l1-7);
       srcDesc+="(";
       srcDesc+=srcName;
       srcDesc+=")";
       HTREEITEM hSource=pTree->InsertItem(srcDesc.GetBuffer(0));
       int l3=0,l4=0,l5=0;
       CString tabDesc,tabName,inof;//表名和描述,所在数据源
       do{
          if(-1==(l3=s.Find("[%table=",l5)))break;
          if(-1==(l4=s.Find(",,",l3+1)))break;
      tabName=s.Mid(l3+8,l4-l3-8);
          if(-1==(l3=s.Find(",,inof=",l3+1)))break;
      if(-1==(l4=s.Find(",,",l3+2)))break;
      inof=s.Mid(l3+7,l4-l3-7);
      if(inof==srcName)
      pTree->InsertItem(tabName.GetBuffer(0),hSource);      l5=l4+1;
       }while(1);
       l=l2+1;
    }while(1);return true;}