|
MFC的DLL可以办到!但是你要在UG里运行的话最好是UIStyler结合上MFC,MFC调用ACCESS
' H! s- k# s. F! Q, Y) Q% e6 I" w下面是部分代码:(我这是一套的,代码很多也很杂,给你下面部分)" o7 }9 [& H# s" G7 r
BOOL Database_main::OnInitDialog() " L2 N6 t/ F$ Q8 N4 `" o# i( ^
{( U6 t# }8 }# l/ ?# I
CDialog::OnInitDialog();; ~% `; Z) Q# }9 c
" U2 b5 r! i7 i# `% e$ ~3 m // TODO: Add extra initialization here
: X, }; e: ?5 k/ Q try{
' Q% q4 X# b4 B! d8 G' _" t1 H m_pdatabase=new CDatabase();
4 x# X% Q" n# l4 @1 l m_pset=new CRecordset();
+ [( n0 l! f D( F, C4 U% X m_pdatabase->Open(_T("data"),FALSE,FALSE,_T("ODBC;DSN=data"),FALSE);! C" ]$ U7 V* \- U$ `; C4 v
m_pset->m_pDatabase=m_pdatabase;
$ U. @5 @8 ]3 G, T, ~ }
0 _! [; ?) N$ j catch(CDBException* e){: w! H9 t2 Q8 z7 Y0 o" \
e->ReportError();1 j7 L" z, I' W% w% G, v2 I
e->Delete();4 m# x8 W- [$ P9 F6 A2 x
delete m_pset;
1 `' @; p) j( r& Z: {! q2 Y) y7 r delete m_pdatabase;. Q2 q0 L+ `! B
return TRUE;}9 d* ^5 b x4 L8 [% h; B
DataShow("data");% U( n4 f' z+ Q; O2 c
return TRUE; // return TRUE unless you set the focus to a control
! c4 ]/ F) O6 V // EXCEPTION: OCX Property Pages should return FALSE
. T6 p$ Q. k: W6 }7 y4 \8 z/ A9 I}( G5 w6 Z1 j |
8 \7 U/ e) T% _4 t1 q% X4 { V3 avoid Database_main::OnOK() - H4 p+ ?/ h# l9 I2 Q5 n' `
{3 {! y2 s8 v7 `$ U! u
// TODO: Add extra validation here
" F* l8 |& C/ T UINT uSelectedCount=m_list_control.GetSelectedCount();+ m/ \( u% Z5 T D
int nItemSel=0;7 u& o: W& \2 T# R( y( L
nItemSel=m_list_control.GetNextItem(nItemSel-1,LVNI_SELECTED);
$ A" x2 A* }0 M1 ` for(int j=0;j<nFieldCount;j++)7 L! k& d* y# }4 ^2 A( d! \6 P! f
str[j]=m_list_control.GetItemText(nItemSel,j);; b( G! ?2 M" _$ c( r
}' X+ c0 ]% z# m
# v% j) J9 r. d6 {6 j: o$ t
8 J) N- m4 X" a8 _5 }
5 \3 g5 l' e. O, Z) C9 F 7 k5 a, Q% x% B9 {8 j, i! S
CDialog::OnOK();
5 r: i1 L- ]! m; w* [) R* p$ ]2 b) l}
- X) Y* V. s3 [
! d; ~0 W7 e- t7 j+ o! `6 qvoid Database_main::ClearList()
* W# c) x. V7 ~0 e. d% g{$ f+ _4 w7 s6 J+ F; }3 q; z
//m_list_control.SetExtendedStyle(LVS_EX_FULLROWSELECT);
7 I/ w! v! m4 y# V. w# b //m_list_control.SetExtendedStyle(LVS_EX_GRIDLINES);4 `* t i7 G W' M+ u) [
m_list_control.DeleteAllItems();8 w" H' p4 k& u8 v
while(m_list_control.DeleteColumn(0));
+ X+ e9 I2 S V" F UpdateWindow();! \8 |' Y% ?. K' m& V
}
" z+ H9 c5 ~& Q0 y! C////////////////////////////////////////////////////////////////////////////////////) j. p/ s- u% a8 [
void Database_main: ataShow(CString table_name)3 k2 V% C9 S6 D; W- g5 k
{5 d: G6 @( i4 Z2 V
ClearList();: m2 n& ]0 {- v3 \' l- r$ K
CString strSQL;
D: L9 s: U7 r V1 x+ @ strSQL="select * from "+table_name;! A! S' t4 z) |
ShowInformation(strSQL);4 w1 i, ?3 W9 g" E0 y. j1 C
}. A7 x2 ?# y, \& t7 Y k
# i$ A ]( ~$ F# n
BOOL Database_main::ShowInformation(CString strSQL)5 m( i- X* `) }" V% c
{
. V! D6 f' ]6 m, S8 t if(!m_pdatabase->IsOpen()) return FALSE;
* i, s+ b' \# n& c. | if(!m_pset) return FALSE;
7 w1 N* i1 t+ @4 B try{
' z* B; c q# ^ BeginWaitCursor();
$ M' w2 o2 {2 J6 g if(m_pset->IsOpen()) m_pset->Close();
( j1 o- k3 E( `+ W0 P3 l; L3 i m_pset->Open(CRecordset::dynaset,strSQL);9 \1 N5 b% i6 V9 [4 a6 B
if(!m_pset->IsEOF())
/ W& F9 P* s E F {m_pset->MoveLast();$ a0 D4 f' t4 K/ |5 J- g
m_pset->MoveFirst();}8 r5 T5 n; A1 o& s
nFieldCount=m_pset->GetODBCFieldCount();
: C" u* b3 H8 S- F CODBCFieldInfo fieldinfo;( r% w; L$ [ X& N" v3 [
for(int n=0;n<nFieldCount;n++){
) K$ {% Z$ H( a7 k( s m_pset->GetODBCFieldInfo(n,fieldinfo);
7 {) R& `. S+ P$ I% ^+ t0 G int nWidth=m_list_control.GetStringWidth(fieldinfo.m_strName)+35;5 u; ^0 k- p( s- ~
m_list_control.InsertColumn(n,fieldinfo.m_strName,LVCFMT_RIGHT,nWidth);
: R9 |9 Y, i, r2 C) c3 y, S6 y }, D6 X" O: Z' o/ f
CString strValue;
8 v3 z' G6 z8 \# P0 H m_pset->MoveFirst();3 {( _% v# M; U
int nCount=0;2 f r: T3 n$ W2 i& k! C1 B7 `* U& f
while(!m_pset->IsEOF()){( ~# N# c* z& b1 P2 l1 I/ [# [& V
m_list_control.InsertItem(nCount,strValue);
$ T0 X8 M% i* A" z7 L* Q for(int j=0;j<nFieldCount;j++){
1 A6 K9 \$ U6 k9 j$ E5 Q& n m_pset->GetFieldValue(j,strValue);
+ s {' f( [' n9 I, y. d& i) T m_list_control.SetItemText(nCount,j,strValue);
3 z. b8 e5 l N+ E$ ] }
/ G8 c' q# c9 r& G1 G m_pset->MoveNext();. x U8 E# s- O \9 U! L. V
nCount++;, N, J t3 _* ?& E- q
}
% S! T5 u. H; P- w% n EndWaitCursor();7 _. C- J1 \# ]+ \1 e8 }
}8 j! W' D& c, Y5 A0 E
catch(CDBException *e){
" ^5 z: `: c* L+ ] e->Delete();
8 U* Q+ g- j( |% @; ?% j EndWaitCursor();) O/ _) a+ l. P( t& X/ f) u
return FALSE;2 @; O2 y- L. v
}
0 ^& i1 G' }. \2 o) o return TRUE;
$ Q1 k: _ F$ K n} |
|