|
MFC的DLL可以办到!但是你要在UG里运行的话最好是UIStyler结合上MFC,MFC调用ACCESS% u- v& s- k' F9 g! |% i6 t" c: z' Y
下面是部分代码:(我这是一套的,代码很多也很杂,给你下面部分)
0 @3 R5 R; G$ W& i% oBOOL Database_main::OnInitDialog() 7 o: ^1 k# R4 M3 d d6 ~* T1 `' N
{$ T9 n6 {% j1 I( C! _
CDialog::OnInitDialog();, m! {! `8 }& p5 ]' M" a: P% o) y
+ L# Q1 `: b3 `! t // TODO: Add extra initialization here
9 S; O7 e, L) j) w try{ + ^/ v7 M _4 R& F8 p! V6 O
m_pdatabase=new CDatabase();
: C* ]( U+ V6 ]- `* X m_pset=new CRecordset();
7 R7 g2 w; h! U% `. ]7 F m_pdatabase->Open(_T("data"),FALSE,FALSE,_T("ODBC;DSN=data"),FALSE);
" Z0 F. ?0 a+ Q( F" n+ V m_pset->m_pDatabase=m_pdatabase; ' {4 X2 g% P" e+ m( E3 r' t
}# Z( ~! ^$ k5 @/ v m2 W7 J
catch(CDBException* e){+ y j# M( ]' |/ t
e->ReportError();9 U% @3 V+ { i( z7 c
e->Delete(); R0 B0 D( |/ u7 D8 L+ e
delete m_pset;% `. t" e$ k8 R/ v
delete m_pdatabase;
( z2 Z5 A8 ?5 q' s! S return TRUE;}
( r2 Y4 _0 b3 o5 V; ~ h DataShow("data");; y* c7 [ V# q g4 z+ R- d3 x0 F
return TRUE; // return TRUE unless you set the focus to a control6 k5 t: ]# b$ b% x. H! E
// EXCEPTION: OCX Property Pages should return FALSE
. M Y1 z" r, X' j# |}' n4 X) l' q: k& \, [' [- g4 J$ } r
& j( ^# ^( L2 v, T% ]void Database_main::OnOK() / ]. w) `9 D/ D3 i i2 ]" G
{
+ O- X$ z( ?3 O) p // TODO: Add extra validation here; c9 _# U0 a8 Z; k- a
UINT uSelectedCount=m_list_control.GetSelectedCount();6 E+ f$ v; W7 g( r0 @+ o, `& R
int nItemSel=0;
! V! O6 B" M/ p nItemSel=m_list_control.GetNextItem(nItemSel-1,LVNI_SELECTED);1 w: i: ?5 K0 ~8 c
for(int j=0;j<nFieldCount;j++)% L# f7 E' j9 Z( B% q6 r
str[j]=m_list_control.GetItemText(nItemSel,j);* @# _4 m1 z9 |8 @+ `( t
}
4 H( D6 \/ D! q/ G( a7 D/ o C# k0 n, i% _. S
4 A5 j; I, D/ w( b$ G. v3 p0 \$ R& B; ^$ r- K( Q1 H
# u. m/ P- H6 w: M5 h CDialog::OnOK();
. `" K8 j/ s( h' Y}! k+ `1 @. K( y, O6 Y6 V! v
$ O) I# ]* h+ d1 j. P0 b3 I1 o! O+ v- o
void Database_main::ClearList()- K0 A* }" x0 V" v
{
3 Q9 T; n) l$ D0 y; d$ p& F //m_list_control.SetExtendedStyle(LVS_EX_FULLROWSELECT);
0 ]* J* F- ]7 I6 Q7 L" i0 u0 @ //m_list_control.SetExtendedStyle(LVS_EX_GRIDLINES);# O( P* O# |( B1 {
m_list_control.DeleteAllItems();
0 ^7 }. X$ w. x8 h2 L while(m_list_control.DeleteColumn(0));; p/ U% N# Q: N: O* a" _
UpdateWindow();9 u3 g- w f# z- E( U! s- E3 r4 [
}
" j, f8 H i; M////////////////////////////////////////////////////////////////////////////////////% b9 f2 ]4 e) e* U8 O' O
void Database_main: ataShow(CString table_name)4 E/ F2 c" U# t1 t0 G
{
7 F" ]0 ]+ p0 e8 q! ~ ClearList();+ T1 V+ [6 b: w8 p
CString strSQL;& K6 q6 _$ |4 U$ |
strSQL="select * from "+table_name;
: @% ?- h- h9 n8 b6 e- d8 ` ShowInformation(strSQL);
+ }( m5 t+ O% H u' p2 g! K" D: u1 z}
3 e2 u# |# q8 |3 Z- ]
! X) A6 C- g1 H9 m: ?BOOL Database_main::ShowInformation(CString strSQL)
1 U4 x% f0 D1 t{
2 b0 F. Q- c, O* ~7 N& f7 y" n if(!m_pdatabase->IsOpen()) return FALSE;! V4 o( T. i$ P6 S
if(!m_pset) return FALSE;
]9 y8 K7 }% K. B9 M" a try{7 V7 T$ l+ o: F
BeginWaitCursor();6 Z: t3 m1 U7 n$ s
if(m_pset->IsOpen()) m_pset->Close();
* R; W- I; ?7 a4 [) O7 |9 G m_pset->Open(CRecordset::dynaset,strSQL);" p" o6 U2 t; }9 Q7 i
if(!m_pset->IsEOF())
: l- N9 c/ Q- a. g$ ^ {m_pset->MoveLast();
6 a9 R, c+ s" b& `" D% T( { m_pset->MoveFirst();}
# b) Z, L! R/ g) F2 B, f4 b nFieldCount=m_pset->GetODBCFieldCount();
. f6 S% f/ G6 { V) {, p* E W' ~ CODBCFieldInfo fieldinfo;
9 U2 ?0 }: K! K% C0 X$ W for(int n=0;n<nFieldCount;n++){5 y% x& `, d/ Q4 D: P$ ~
m_pset->GetODBCFieldInfo(n,fieldinfo);
! W$ L+ R* m# l! P& y9 p, B) Q int nWidth=m_list_control.GetStringWidth(fieldinfo.m_strName)+35;1 x6 C1 d$ _$ c
m_list_control.InsertColumn(n,fieldinfo.m_strName,LVCFMT_RIGHT,nWidth);
: ]3 K: ], U7 ^' i) ]7 F }; ~; t5 f( ?, _* G1 E. @7 g
CString strValue;( s3 C9 \/ p3 M
m_pset->MoveFirst();
& P6 M M5 E$ K int nCount=0;) B' I% S6 `* r. o# k
while(!m_pset->IsEOF()){: n J/ j% m& K5 X( E
m_list_control.InsertItem(nCount,strValue);) c J9 D7 {3 B, v9 ] n
for(int j=0;j<nFieldCount;j++){9 Z5 @0 p R- h3 g$ @9 G
m_pset->GetFieldValue(j,strValue);6 c. y& [% {! S* B
m_list_control.SetItemText(nCount,j,strValue);
/ W# k0 ?1 u# a7 W' A }
1 M# E: D- M6 O4 u( s2 e6 [ m_pset->MoveNext();; e ^2 f! _( e2 D k' P
nCount++;8 r8 ~- U4 |. V# ~0 J
}
: \: }6 z l1 V' r; Y EndWaitCursor();; K- H7 d9 ~# Y- Z% {
}, I/ ^- Z5 k& V$ n- {5 m# g5 @ I# Q
catch(CDBException *e){
& X, f- g& x; p p w e->Delete();
" ^: d% {7 |! m! ]$ c. k4 n EndWaitCursor();
8 U1 F8 R: y( q6 `7 C return FALSE;
( q }) W' V# W% g4 T }
) ~4 Q( W. K( \ return TRUE;
: `+ R# _4 g2 e' S* G. w} |
|