青华模具培训学校

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2011-6-22 17:43 | 显示全部楼层 |阅读模式
我想用MFC的树形控件做个零件导航器,树形控件要和数据库连接(显示数据库里的数据),我用的是ACCESS数据库,自己怎么都没做不出来,网上的资料都是用MFC(EXE)单文档做的,我要用MFC中的dll,该怎么办啊?请高手救命啊,最好能有段实例代码,感激不尽!
发表于 2011-6-24 10:45 | 显示全部楼层
MFC的DLL可以办到!但是你要在UG里运行的话最好是UIStyler结合上MFC,MFC调用ACCESS1 _* G& _) u4 E- e( F4 s) a
下面是部分代码:(我这是一套的,代码很多也很杂,给你下面部分)9 c' Y, E$ x" g  k3 K% @/ {6 F
BOOL Database_main::OnInitDialog() " {$ ~, p7 V% w3 H+ S
{4 ?9 Y7 m$ A; p+ r( H
        CDialog::OnInitDialog();7 V  |- H$ O; q. B
        # @% J& H- H* Y
        // TODO: Add extra initialization here. F7 U3 A5 O0 A  M/ g
                try{        ' G' d9 {% l8 F8 l! ?) F& n- I
        m_pdatabase=new CDatabase();
& W' V) _" U2 V0 r% }        m_pset=new CRecordset();
( y& Q7 _& t8 G    m_pdatabase->Open(_T("data"),FALSE,FALSE,_T("ODBC;DSN=data"),FALSE);5 ?9 K  x- u7 d% N1 h- x5 C
        m_pset->m_pDatabase=m_pdatabase;       
0 l( M2 `# ?. V0 t2 l2 W. X        }
: {3 r/ c6 E: Y- P- u3 N# B        catch(CDBException* e){
$ \. M. M9 _2 q' ?1 m- ~- ^                e->ReportError();% l" `% {( A, h6 z6 B( l) v
        e->Delete();* S' I( W) j2 F! h* S/ Y
            delete m_pset;
7 l: e# K& G" g; ~" k# h9 H* D0 A1 \( T                delete m_pdatabase;3 K7 O1 |6 W7 i1 m* J
                return TRUE;}6 s  z8 c4 b+ f6 g# I  I
        DataShow("data");& j6 d( g0 P7 u4 C! e6 r, p
        return TRUE;  // return TRUE unless you set the focus to a control
! Z, J0 {4 ~* L+ X. g                      // EXCEPTION: OCX Property Pages should return FALSE
& g0 y) X: F) ]# q- G0 n5 O7 W}
' u. H6 |; N% a- v6 \. H+ l5 }. C" v  k% k
void Database_main::OnOK()
+ l4 t* A9 |+ Q/ S/ p/ h2 t{) |, @9 ]3 X& ]1 N
        // TODO: Add extra validation here9 B5 p6 V9 d. K; _1 f5 d' A' J; o# ?
   UINT uSelectedCount=m_list_control.GetSelectedCount();( k, E9 S9 K& C" g
int nItemSel=0;
/ f, v+ C+ Q3 h+ r: w+ \7 _9 g  R        nItemSel=m_list_control.GetNextItem(nItemSel-1,LVNI_SELECTED);, D7 F2 e/ l$ W" e) E2 V9 h' x7 r
                for(int j=0;j<nFieldCount;j++)
6 ~* v+ m' V) m0 X: }                    str[j]=m_list_control.GetItemText(nItemSel,j);8 _# H) a$ Q$ P  i2 r. h
        }
3 s+ ?7 y. ]2 [+ P" b$ [+ t1 b  L  [
" f% |- y( Z) n0 g( c+ I6 w' A8 {3 ]6 [' y: {/ P+ c

4 W8 T# e+ O; {2 P- ?       
& \& m9 k# p5 E; X# z' [' P        CDialog::OnOK();- P7 a+ Q% G% W) N
}* ]2 f: V" K$ b$ S2 z* L
3 v$ x$ j7 g9 M" [
void Database_main::ClearList()
2 o" Z, \# X; C/ w; J; \0 ]{6 Y4 ~' J9 A0 M/ G4 H
        //m_list_control.SetExtendedStyle(LVS_EX_FULLROWSELECT);3 i) q; I- I2 p
        //m_list_control.SetExtendedStyle(LVS_EX_GRIDLINES);
3 s2 s7 V9 H+ N: [. @, X* p        m_list_control.DeleteAllItems();# ]4 R: ~8 q! ~0 V6 X
        while(m_list_control.DeleteColumn(0));
8 D5 x0 e4 |! f" A$ O- D) z* y    UpdateWindow();+ t5 w% H( Q) f# a
}
- A, h$ U6 m" P& K. }////////////////////////////////////////////////////////////////////////////////////) N* A* |1 n( \9 J% I
void Database_main:ataShow(CString table_name)! n, j% R6 z. p/ q
{4 j: L' y  L1 E: l
    ClearList();2 a+ v" y, t$ [! }- M- n0 y
    CString strSQL;: e" c4 C3 m! C' C1 H
        strSQL="select * from "+table_name;
9 K2 E. _& R$ |        ShowInformation(strSQL);
4 M: h4 {5 t5 Z. i% c: h& G1 H# n}% l' y, c0 B0 s, N  I3 H8 ]" N

! ^# u  z+ ^% S( s9 _/ T1 @BOOL Database_main::ShowInformation(CString strSQL)
4 D5 P* c2 t, ?! R- X' C/ s) W{
: h; \# U6 e! H- Y2 K: D& p! w4 _- P    if(!m_pdatabase->IsOpen()) return FALSE;
; ~+ F: p$ O$ ?        if(!m_pset) return FALSE;& D2 p8 @9 _! T1 A
        try{
) u3 }+ v+ x# C  W2 P2 r                BeginWaitCursor();
. S) M, p+ r9 {1 y+ z! P                if(m_pset->IsOpen()) m_pset->Close();9 h( a! ]! y2 I, V1 o8 C, S4 K. E
                m_pset->Open(CRecordset::dynaset,strSQL);
& U& S& m. c* j4 ^1 q                if(!m_pset->IsEOF())
! c, b9 I9 ^* q/ u                {m_pset->MoveLast();" q2 K+ G" y/ C
                m_pset->MoveFirst();}# {5 m4 J. H! P: w# `1 j7 Y0 z8 t
                nFieldCount=m_pset->GetODBCFieldCount();
# ~5 @+ S7 {6 d5 s& s8 _, Z                CODBCFieldInfo fieldinfo;5 m3 _2 Z2 D+ u' P. L3 ~
                for(int n=0;n<nFieldCount;n++){
: Q9 h  i; L. A( V                        m_pset->GetODBCFieldInfo(n,fieldinfo);
! _& {' q  L1 H5 V1 K- z2 e$ [% w                        int nWidth=m_list_control.GetStringWidth(fieldinfo.m_strName)+35;
  L* G/ P2 D/ C; b" M) @3 R& D                        m_list_control.InsertColumn(n,fieldinfo.m_strName,LVCFMT_RIGHT,nWidth);# W/ d# I9 \  Z; N0 Q
                }
* K/ o. J* ]4 C/ R" t: z! r                CString strValue;
, N  M: A& G  m. M                m_pset->MoveFirst();
" J8 r+ U0 C$ h9 u" e& F' W                int nCount=0;. E3 a3 ]! f( }+ \; Y. K5 E
                while(!m_pset->IsEOF()){
1 I. _5 T- u& _9 L' i" \+ Z4 E  h  ?3 [                        m_list_control.InsertItem(nCount,strValue);  S1 `/ `, m* x9 `
                        for(int j=0;j<nFieldCount;j++){0 G9 ?! h$ a4 G: ~
                                m_pset->GetFieldValue(j,strValue);
& }0 F% ~4 a1 q: p) ]                                m_list_control.SetItemText(nCount,j,strValue);
% ^6 A0 l# @( k( d9 L% d- e9 z                        }  g  X8 v- j; X* h
                        m_pset->MoveNext();; r5 {# X5 W' _) _) q' C4 O
                        nCount++;
5 `+ k' g/ F, Q, p; J                }( m) w8 R. y* e
                EndWaitCursor();5 }8 ]. c2 {& g8 f! u) X
        }' A5 _# o% d$ G: C
        catch(CDBException *e){
2 l: g8 s' B6 x9 s                e->Delete();: O5 ?! c: f+ d! O$ P; l( l& n7 e
        EndWaitCursor();
1 t, Y: h# ^' Y$ m& u                return FALSE;, O: c+ j( j- x1 F  D1 i
        }4 y( l) R8 Z# r6 X
        return TRUE;
6 O, T: ~  n  H$ _0 P1 g' `}
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2011-7-1 20:58 | 显示全部楼层
回复 2# UG二次开发毕设
" y, c" L/ {& o% o( k6 g  l+ m  Y2 n' [我要的是用树形控件做的,你这是用列表控件做的,不过还是谢谢你!呵呵
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-21 03:16 , Processed in 0.060712 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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