|
MFC的DLL可以办到!但是你要在UG里运行的话最好是UIStyler结合上MFC,MFC调用ACCESS; O+ O8 O8 L8 g8 q+ Y/ Y
下面是部分代码:(我这是一套的,代码很多也很杂,给你下面部分)
) V* }; M( E3 l2 q: X4 q8 {+ ABOOL Database_main::OnInitDialog()
- B/ o/ o p6 S{' D3 h( O3 ^( v) g9 m& P
CDialog::OnInitDialog();' H" U% I: Y! {1 {* f1 P1 `+ ?
3 H' J, D5 s1 y3 s& _& Z" t0 U
// TODO: Add extra initialization here: S( k( g" I, B
try{
( H2 c* Q+ P1 v$ ~$ c m_pdatabase=new CDatabase();2 B3 \* e t, F; g: M$ Y
m_pset=new CRecordset();
3 ~) ~. c5 F5 o3 w8 R0 L. I/ g% X m_pdatabase->Open(_T("data"),FALSE,FALSE,_T("ODBC;DSN=data"),FALSE);2 p9 p0 T; n. m
m_pset->m_pDatabase=m_pdatabase; 1 ]$ Q& A9 y" U% T' p* i
}- Q5 u o' k+ v& B& o+ N/ j
catch(CDBException* e){& S" R2 G3 S4 r9 b
e->ReportError();
- }3 R" `2 P8 i4 X( M9 }$ \ e->Delete();
& D) b/ X! h+ Y7 b delete m_pset;$ T6 ~6 w( a& V) O
delete m_pdatabase;
/ E8 \- G! W* @3 L# r return TRUE;}
b4 u: m9 j) u: T8 o3 p, U2 d DataShow("data");
+ C6 m& k! ~ q$ o$ L return TRUE; // return TRUE unless you set the focus to a control) _9 U; i$ q% @. ?& a8 Q5 V, n
// EXCEPTION: OCX Property Pages should return FALSE: w7 f" K6 v2 |' x
}
D3 i/ v) C* ?
- G% H; f8 x2 O' Vvoid Database_main::OnOK()
& O8 A# L2 h0 h1 b9 }# i; ~3 l' {0 Z{
/ |8 L# h- r+ ]1 X# x* j // TODO: Add extra validation here, K4 y- ]7 B2 w- Q4 \! q
UINT uSelectedCount=m_list_control.GetSelectedCount();
7 m5 F1 L$ p, r" G, X* Zint nItemSel=0;
. U3 y/ J9 d8 l. v4 { nItemSel=m_list_control.GetNextItem(nItemSel-1,LVNI_SELECTED);5 k# S) Q1 u2 w8 J
for(int j=0;j<nFieldCount;j++)
( S5 `8 s+ G" w, B# G str[j]=m_list_control.GetItemText(nItemSel,j);
5 \7 H5 {5 A6 [6 U3 t }4 \. V' e4 I4 N. q1 c
) h$ _; A8 G6 x# ~( l J2 ~
' N: b0 _/ E7 }6 g; S
$ x: o/ Z, X# l' F' H+ t% R2 Z) i" E 6 l, Q% o6 \2 R- l) H) t: l
CDialog::OnOK();
0 P, [9 U9 e/ U1 }}% H i& p8 N+ F* O/ e- b
! Z! _" x2 T N# O/ T* F1 S- e* u
void Database_main::ClearList()) E1 G. |3 v3 [. z
{* o5 g: w! B$ j4 f- I6 j& G& x0 U
//m_list_control.SetExtendedStyle(LVS_EX_FULLROWSELECT);4 ~* s) W. r9 G7 d( `+ e
//m_list_control.SetExtendedStyle(LVS_EX_GRIDLINES);4 M+ }) E! T/ t5 a ~" D
m_list_control.DeleteAllItems();! s' p2 |7 I* g, J; `' C
while(m_list_control.DeleteColumn(0));2 W- K) N) k( K3 L" F
UpdateWindow();4 I% h( G" Y" G0 D
}
1 ]4 d( i3 V* `0 q% g) D7 t////////////////////////////////////////////////////////////////////////////////////0 h* a0 |+ l4 C2 u
void Database_main: ataShow(CString table_name)7 u Y' ?0 i3 u
{
3 \, U7 `+ E( P( y% C$ ]* G# R5 g ClearList();( v- S( A5 _% n) k* _ b5 L; V
CString strSQL;
7 |9 b: |# v' ^, y) W g strSQL="select * from "+table_name;. `& [0 h7 t% D0 T1 z$ }2 `0 B
ShowInformation(strSQL);
$ r; q8 p. d8 M: a3 Q B}5 j* _* c5 v* E
1 H7 [! ?5 B& @. P+ @( Y& ~
BOOL Database_main::ShowInformation(CString strSQL)
3 M9 B9 C0 _: i9 j @{, p5 r: i4 |: Y' D
if(!m_pdatabase->IsOpen()) return FALSE;
/ }2 H. z# m! n# H4 ` if(!m_pset) return FALSE;" O# X ^6 @' M& Q! Q
try{
! r+ |2 m% Q4 E, Y. ?' S BeginWaitCursor();
! n7 e! a+ g0 ^ ] if(m_pset->IsOpen()) m_pset->Close();) d" @% z3 x/ A$ R J ~
m_pset->Open(CRecordset::dynaset,strSQL);; s2 ]) h/ L, B$ C+ a
if(!m_pset->IsEOF())
" H8 y c& {" D; }# M1 b0 p9 `+ H {m_pset->MoveLast();9 x" J0 C$ j8 \4 w" x6 n4 w
m_pset->MoveFirst();}
: S5 C+ i2 X! b* t nFieldCount=m_pset->GetODBCFieldCount();6 H9 K/ ]- b! ?8 ?. s- c
CODBCFieldInfo fieldinfo;2 p1 h/ z$ J5 t& W3 c0 {# x' @
for(int n=0;n<nFieldCount;n++){+ |% S8 ~( D% F
m_pset->GetODBCFieldInfo(n,fieldinfo);
" J/ j1 F3 D- B4 [2 t int nWidth=m_list_control.GetStringWidth(fieldinfo.m_strName)+35;9 f0 Q1 ~: O+ @% z$ ]
m_list_control.InsertColumn(n,fieldinfo.m_strName,LVCFMT_RIGHT,nWidth);/ o5 {2 |. h" g3 u/ o
}
( q3 o4 R1 g: R CString strValue;5 h, ~$ R1 v; H8 S) h6 M$ O
m_pset->MoveFirst();; ?% f/ S& N" d
int nCount=0;
) }. n9 ^4 n r while(!m_pset->IsEOF()){
) s' D/ \6 D5 H8 k2 } j) \: x- O m_list_control.InsertItem(nCount,strValue);
- K' R+ E4 Y0 o% a for(int j=0;j<nFieldCount;j++){
- U+ R4 ^' j. v% B% C9 B m_pset->GetFieldValue(j,strValue);5 Q7 d' ]1 W( Z+ v, i! v4 M
m_list_control.SetItemText(nCount,j,strValue);8 H2 O% c3 G/ a. y
}
5 y" k# t4 ?5 I$ X( l m_pset->MoveNext();
% d. \3 @4 }) D3 G/ v* @# R3 ? nCount++;
+ {2 j7 Z% u' f9 y# s8 m) } }8 V2 e# w3 A* V2 j, Y' \
EndWaitCursor();( P% y: q$ @ J# a
}
( V: B+ d0 G/ H0 _9 p catch(CDBException *e){
5 p. `2 u4 A3 G5 Z e->Delete();
^6 H* a1 t) Y( t) H g- B EndWaitCursor();
3 U {# _/ s) }" R$ H return FALSE;; u' E8 R7 D" P5 M) ~ z
}% R7 W" v, |; k) z) z2 B( C1 F
return TRUE;
& _& r* l: R% q8 \% ~3 w) V4 O& {5 a} |
|