青华模具培训学校

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2011-6-22 17:43 | 显示全部楼层 |阅读模式
我想用MFC的树形控件做个零件导航器,树形控件要和数据库连接(显示数据库里的数据),我用的是ACCESS数据库,自己怎么都没做不出来,网上的资料都是用MFC(EXE)单文档做的,我要用MFC中的dll,该怎么办啊?请高手救命啊,最好能有段实例代码,感激不尽!
发表于 2011-6-24 10:45 | 显示全部楼层
MFC的DLL可以办到!但是你要在UG里运行的话最好是UIStyler结合上MFC,MFC调用ACCESS
' ^, K" a6 a, g8 B下面是部分代码:(我这是一套的,代码很多也很杂,给你下面部分)" c& u3 R& L0 H# _& V
BOOL Database_main::OnInitDialog()
3 B; L. M9 ^% B5 z' v1 g  V% v{
- V. Z! O; T" C% r5 @0 x7 m        CDialog::OnInitDialog();- w" M: R, V4 B+ g, K( C
       
, b+ o: A; }( l        // TODO: Add extra initialization here
. I2 Q4 F) [6 y9 p) b& v                try{        # z, q& g# L: B2 G" N$ N( [  e+ n4 p. I
        m_pdatabase=new CDatabase();
0 ?+ ?8 w6 F0 |+ w        m_pset=new CRecordset();
- k: i5 H; b$ H$ E* U8 B    m_pdatabase->Open(_T("data"),FALSE,FALSE,_T("ODBC;DSN=data"),FALSE);" [+ s1 H4 O0 e; k9 w/ e0 s
        m_pset->m_pDatabase=m_pdatabase;        % {9 D9 P) k0 U& l9 R2 J8 w( [
        }% p8 ^8 @/ g, w! j- P( ?# Z
        catch(CDBException* e){
9 f2 z( a6 b# J/ f                e->ReportError();* @& c# H; C2 z0 V/ i" Q+ H
        e->Delete();/ [- D" I! Y- W% i
            delete m_pset;0 W# t2 Y! \& B* {
                delete m_pdatabase;; m8 y2 R$ L/ f1 C9 s: C
                return TRUE;}; l$ L! a+ `0 I5 ]1 B  M3 C
        DataShow("data");
1 o8 Q; l! w, I        return TRUE;  // return TRUE unless you set the focus to a control# ]  z; Q- s8 ^2 y
                      // EXCEPTION: OCX Property Pages should return FALSE
- r! d) v+ H& V7 C  K1 e, Y0 C}
: }- e2 k5 p( q6 B7 y  G, M; b$ E5 e* d5 [( E3 O
void Database_main::OnOK()
, L, e2 \6 k  u3 D7 z, Y4 `{
% d$ C$ _' L- x! g5 E4 |" Y        // TODO: Add extra validation here
$ P' s* s! j4 g+ u( G   UINT uSelectedCount=m_list_control.GetSelectedCount();- K  m$ K5 A0 S
int nItemSel=0;% F( M8 t0 ]- F$ U$ D9 ~
        nItemSel=m_list_control.GetNextItem(nItemSel-1,LVNI_SELECTED);
& f- q- |9 W# `( W2 i2 c0 D- J% V                for(int j=0;j<nFieldCount;j++)
+ g+ d  L( \1 j% Z- y3 }+ E5 n                    str[j]=m_list_control.GetItemText(nItemSel,j);6 E. @( Z4 `2 ?) J9 o1 s
        }
. t" ]1 v" @" s. c- E2 W* R. V1 a, f, W$ k. @+ n
; S! f% C. _, m9 M6 U4 w% I8 |/ E
' N8 v  x6 d  G* W8 }& o6 x
        5 J& l$ w8 z# z4 C3 D
        CDialog::OnOK();* E: |: C( w: X; k0 w1 }7 o  n
}6 n6 @- D5 }8 Q0 ?6 d; v

% E8 \+ j  ]2 E' w" r* Wvoid Database_main::ClearList()
" H+ p7 T$ k) Z; E% U{
$ ]2 b/ @6 |8 M! R! E1 ^  j        //m_list_control.SetExtendedStyle(LVS_EX_FULLROWSELECT);* d; X$ @  t; I8 @1 [. `% z3 E# U
        //m_list_control.SetExtendedStyle(LVS_EX_GRIDLINES);" `2 m& x2 O4 h3 t4 E+ P
        m_list_control.DeleteAllItems();8 v4 D4 u- c" _- A2 C
        while(m_list_control.DeleteColumn(0));; j$ W7 b- M5 \! X# x5 T* f
    UpdateWindow();8 J3 o/ B( N9 [3 x1 K
}* k, ]" K% b" _" ]# I
////////////////////////////////////////////////////////////////////////////////////. c5 k+ p0 `% r8 _7 K
void Database_main:ataShow(CString table_name); K! K) s& w! p' t0 I% y9 A! K
{
7 d9 j$ |* U/ P. s    ClearList();0 p: B  |' O# X( }8 @' _# r$ U
    CString strSQL;
; u4 s! |( v# C* Z        strSQL="select * from "+table_name;
& v8 i# M/ x8 s        ShowInformation(strSQL);
) c& N6 q6 v7 a. x" s}, m  x4 Q  z, x0 }
' h0 t6 S5 V+ |0 c* d! T+ e5 a
BOOL Database_main::ShowInformation(CString strSQL)
+ Z2 i0 N- W; P2 Y# f& {$ E{5 W7 _3 C+ Z! j2 n5 S6 ^
    if(!m_pdatabase->IsOpen()) return FALSE;
4 z* H3 ^5 L+ y5 S8 `+ H        if(!m_pset) return FALSE;
. M. D0 w- ]# S$ H" G. w0 q& B4 S' f        try{9 l5 Y. L+ w. Y' o( a7 l! ~1 J
                BeginWaitCursor();
1 d5 D6 V& D/ B7 w$ ~                if(m_pset->IsOpen()) m_pset->Close();
1 f  p& H6 n* _( u: S1 z                m_pset->Open(CRecordset::dynaset,strSQL);8 `& O+ C' _  p3 g; a9 `9 O; P
                if(!m_pset->IsEOF())' Q3 r. ^7 s6 O+ z
                {m_pset->MoveLast();
) N4 e9 ^6 V: p                m_pset->MoveFirst();}& C" m, }" Y1 p* I- d0 Z1 `
                nFieldCount=m_pset->GetODBCFieldCount();
7 ]( V) @+ A' x. i; ?" H                CODBCFieldInfo fieldinfo;0 K3 `0 W  V, q& n
                for(int n=0;n<nFieldCount;n++){7 E7 y+ W9 i3 S9 [
                        m_pset->GetODBCFieldInfo(n,fieldinfo);
5 r6 }' k5 c2 R6 {9 q                        int nWidth=m_list_control.GetStringWidth(fieldinfo.m_strName)+35;. ?4 n- K9 L5 p$ Y  _# q, G: P$ }
                        m_list_control.InsertColumn(n,fieldinfo.m_strName,LVCFMT_RIGHT,nWidth);
. S0 `  H) d+ f                }7 }, a) X7 r2 k/ b4 H5 V+ G9 O
                CString strValue;
0 U' j- q* k4 J' ]& F1 V8 I                m_pset->MoveFirst();  y4 X7 ]( N+ Z$ {0 ]% A5 f
                int nCount=0;
! }3 \3 h( \; |0 H# `( [) P. [                while(!m_pset->IsEOF()){; {, m4 }$ c; H7 r$ }* H8 A. q
                        m_list_control.InsertItem(nCount,strValue);
) S6 [% {3 U' l1 z- M6 }* j4 Q- g                        for(int j=0;j<nFieldCount;j++){: R; H$ a( M" N6 A- ^! B
                                m_pset->GetFieldValue(j,strValue);! q2 r" c+ t$ G$ {. l
                                m_list_control.SetItemText(nCount,j,strValue);9 E4 l( y4 X6 r
                        }) g6 n  r* }2 V2 O+ C6 v  S
                        m_pset->MoveNext();5 Q! m* R3 a9 N6 J. q
                        nCount++;% a0 W# X) }5 Y5 w
                }/ b# H3 `" n* u" I2 ?" q3 b
                EndWaitCursor();1 V5 w) v+ m4 K5 T/ ?; }2 C" x! w9 N
        }
. P7 h2 L2 ~' Y( i- }7 C        catch(CDBException *e){
7 K1 h( W/ D, C- J7 u0 H% L' n; e                e->Delete();6 R- ~" C) K" Z7 ?* A/ F
        EndWaitCursor();4 a5 y' n$ I/ u6 `$ {. b
                return FALSE;3 Z0 O0 {: y4 J+ r. W. T2 U. N
        }+ s, D) v5 y& p4 `( q: k8 R/ w
        return TRUE;+ ?2 a8 `. h+ w' ^: G' w# u# w/ x
}
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2011-7-1 20:58 | 显示全部楼层
回复 2# UG二次开发毕设 5 T" @" x3 p# C' g$ I
我要的是用树形控件做的,你这是用列表控件做的,不过还是谢谢你!呵呵
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-10 05:13 , Processed in 0.123727 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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