青华模具培训学校

 找回密码
 注册

QQ登录

只需一步,快速开始

青华模具培训学院
查看: 2649|回复: 4

[疑难] 二次开发中树形控件与数据库连接问题

[复制链接]
发表于 2011-6-22 17:43 | 显示全部楼层 |阅读模式
我想用MFC的树形控件做个零件导航器,树形控件要和数据库连接(显示数据库里的数据),我用的是ACCESS数据库,自己怎么都没做不出来,网上的资料都是用MFC(EXE)单文档做的,我要用MFC中的dll,该怎么办啊?请高手救命啊,最好能有段实例代码,感激不尽!
发表于 2011-6-24 10:45 | 显示全部楼层
MFC的DLL可以办到!但是你要在UG里运行的话最好是UIStyler结合上MFC,MFC调用ACCESS' a. h8 s8 U! U: g9 S
下面是部分代码:(我这是一套的,代码很多也很杂,给你下面部分)& N9 _8 v2 O5 E8 e
BOOL Database_main::OnInitDialog()
' K7 y9 E1 u3 D! x) S3 m{
; o; s* ~* h% ^: V, l( [# `        CDialog::OnInitDialog();$ D1 k( @" a( u0 {9 ^) P
       
) K: ^8 t" P* z% k# g        // TODO: Add extra initialization here: ?0 t; D# x" U: {2 M4 d8 P
                try{        2 h0 k! U, p2 F! h  x+ I' B
        m_pdatabase=new CDatabase();
  D# E4 C7 S- H        m_pset=new CRecordset();8 g% b  T: A. M7 h  u* f2 u9 E6 F! a
    m_pdatabase->Open(_T("data"),FALSE,FALSE,_T("ODBC;DSN=data"),FALSE);
/ p) u+ R4 l( k/ q9 R0 O        m_pset->m_pDatabase=m_pdatabase;       
2 j$ B; F6 J. g" ~! I        }2 d9 i. i1 P8 F: \+ L3 v
        catch(CDBException* e){
0 k0 Z" z& g# y" x                e->ReportError();
: b- z+ i  N: Q2 h. Q2 ]2 y- [        e->Delete();
6 H4 B4 _; Q- t( k4 j+ f            delete m_pset;' K* F% L; y, {5 D- b. X
                delete m_pdatabase;
5 K2 p+ z  }$ n                return TRUE;}
  p& q9 P; ]( H        DataShow("data");
- \  R- V0 D2 Z, q        return TRUE;  // return TRUE unless you set the focus to a control
( |8 k+ o& p9 ?! l6 Y4 a1 C1 [: n                      // EXCEPTION: OCX Property Pages should return FALSE! T, J" D2 l% S( ~0 k! w. F" O
}+ n9 }+ A& g$ L( j- M: v

# g0 O! J) M+ Xvoid Database_main::OnOK() * e1 X0 f0 K8 d! j, J9 X) Q% }
{
4 ~* J  X0 e4 _0 W        // TODO: Add extra validation here
8 {. O# f# X: L. w  g1 v# h0 g7 B   UINT uSelectedCount=m_list_control.GetSelectedCount();
' \5 d4 c2 O  z. H* r- @4 D- eint nItemSel=0;
2 f4 X& \% c+ p" C8 ?/ I1 O$ \* Z        nItemSel=m_list_control.GetNextItem(nItemSel-1,LVNI_SELECTED);
$ Z) x+ g& a, n8 v; B( l; P3 G2 F7 Y% m                for(int j=0;j<nFieldCount;j++)2 U9 S( M/ {* X1 v; Q4 _0 z
                    str[j]=m_list_control.GetItemText(nItemSel,j);
7 t4 r7 f9 ^& E2 r5 A        }
% {9 P3 p. c4 L+ F0 g% K+ D, w5 T9 T

! R% D! @4 J4 F; O
" I9 g& U- |; W) d$ t        1 F! C" w/ F/ q: D0 }9 K9 S: i
        CDialog::OnOK();
& o5 F7 K/ |0 A6 V' E' I5 Y, p+ a}9 m5 a8 q  H  F" @% G( I

* ^2 j: Q0 ^& \( a7 M3 X5 g7 Vvoid Database_main::ClearList()
3 y/ Q: J- }( [* q{
5 E& k6 F! }# ?1 s( {# P7 e        //m_list_control.SetExtendedStyle(LVS_EX_FULLROWSELECT);
0 b, f, @9 ~+ N' j. |% \& t        //m_list_control.SetExtendedStyle(LVS_EX_GRIDLINES);
) x$ |% R6 b4 F$ w/ q" y        m_list_control.DeleteAllItems();
" u1 q7 Y; ]; Z  }8 P3 M        while(m_list_control.DeleteColumn(0));
4 V& ^0 m; M& {1 h    UpdateWindow();
/ x1 Z0 Y0 c( l2 t& f}8 {/ ]& J: }- J: x
////////////////////////////////////////////////////////////////////////////////////
; q1 m8 E+ A# tvoid Database_main:ataShow(CString table_name)) g3 R, a  ]: B- N
{, k' }6 S3 k4 ^
    ClearList();
) ?- a& N8 I, O5 ^) \6 L    CString strSQL;& a+ ^1 D8 x: c
        strSQL="select * from "+table_name;  J3 h/ `9 S, b8 q
        ShowInformation(strSQL);
8 @) _% n" b& H# d7 c- Z}
2 @& M% t. A7 `  w8 F4 E
+ A, m7 }4 v! K4 R* n. C% U- N" HBOOL Database_main::ShowInformation(CString strSQL)
7 j7 _  N/ `1 A) T  S{
& k9 i( ]- \3 [# \    if(!m_pdatabase->IsOpen()) return FALSE;
6 c  D! {5 z# \5 e        if(!m_pset) return FALSE;& Q8 D/ V, i( t- d2 B" s
        try{; o( T- N6 A/ m* [# d
                BeginWaitCursor();
7 n" _! k0 d6 j, z! ?6 u8 y8 H                if(m_pset->IsOpen()) m_pset->Close();+ g# ]1 z5 J+ T, q
                m_pset->Open(CRecordset::dynaset,strSQL);9 V8 l, f; L$ D- h5 G. K( v! \' D3 T
                if(!m_pset->IsEOF())! A' z, r" @. ?# [- N$ ]: W+ d
                {m_pset->MoveLast();. l7 O0 a9 e" m0 o7 N. y0 K
                m_pset->MoveFirst();}- t8 S: m8 i. o
                nFieldCount=m_pset->GetODBCFieldCount();, \) Y& l$ w& n- h
                CODBCFieldInfo fieldinfo;
& Q( k1 b; q) x# o- Q3 y                for(int n=0;n<nFieldCount;n++){  E7 V1 c. @* R3 y$ L& N
                        m_pset->GetODBCFieldInfo(n,fieldinfo);. k9 C* D* @  _/ m: ]6 b# u1 c; K
                        int nWidth=m_list_control.GetStringWidth(fieldinfo.m_strName)+35;- h( C2 a7 G' A" f" C) ]
                        m_list_control.InsertColumn(n,fieldinfo.m_strName,LVCFMT_RIGHT,nWidth);
# h, d6 k1 ], P* K; s5 {7 k                }
7 u: s" Z1 ]& W% t$ w( L0 Y                CString strValue;
9 a* a' u: l, s) v1 C& g2 z8 v                m_pset->MoveFirst();
/ H( I! |1 k! q8 J* m4 `                int nCount=0;* j3 \( n4 w- ]  A. G8 T7 }- i
                while(!m_pset->IsEOF()){
3 ]( |  s7 I% o3 U( ]2 x                        m_list_control.InsertItem(nCount,strValue);. A+ M& Z, p5 K: M$ k/ I8 |
                        for(int j=0;j<nFieldCount;j++){9 w% L5 R! n! d' @
                                m_pset->GetFieldValue(j,strValue);
/ q  v2 G, w- m( a+ m# [                                m_list_control.SetItemText(nCount,j,strValue);  ~+ v3 {# [4 s( y4 F/ T
                        }
$ G% e7 s1 C/ i% p1 O' F! p* E2 v                        m_pset->MoveNext();
9 [4 ~1 L( _  Q( F                        nCount++;
2 P% e1 \: Z& C$ L2 k                }" P( B9 W6 {9 L& u
                EndWaitCursor();( P, `/ c. W8 j4 A9 i' D' e% o; I
        }
- c% ]1 R8 V% K5 M* g% ]- F; j1 D        catch(CDBException *e){
, E( A0 w+ N/ M: R2 s/ P2 u( V                e->Delete();
. g& w3 o. U, P* G5 s. \& i. q5 V$ s        EndWaitCursor();
5 l: m* W  O2 s+ O5 Z                return FALSE;. Z" f& }- d1 K, v  ~6 x' r  L, u$ d
        }
* Z+ {( i1 k2 p7 R* l+ w        return TRUE;$ f5 g( S2 M% ~! w2 i+ ]
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-7-1 20:58 | 显示全部楼层
我要的是用树形控件做的,你这是用列表控件做的,不过还是谢谢你!呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-7-1 20:58 | 显示全部楼层
回复 2# UG二次开发毕设
( z4 `9 \' K: o0 F- L我要的是用树形控件做的,你这是用列表控件做的,不过还是谢谢你!呵呵
回复 支持 反对

使用道具 举报

发表于 2011-7-8 11:30 | 显示全部楼层
呵呵,有偿的话,我给你做个。MyQQ:593939109.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于我们|sitemap|小黑屋|Archiver|手机版|UG网-UG技术论坛-青华数控模具培训学校 ( 粤ICP备15108561号 )

GMT+8, 2025-5-13 12:59 , Processed in 0.054383 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表