|
MFC的DLL可以办到!但是你要在UG里运行的话最好是UIStyler结合上MFC,MFC调用ACCESS' a. h8 s8 U! U: g9 S
下面是部分代码:(我这是一套的,代码很多也很杂,给你下面部分)& N9 _8 v2 O5 E8 e
BOOL Database_main::OnInitDialog()
' K7 y9 E1 u3 D! x) S3 m{
; o; s* ~* h% ^: V, l( [# ` CDialog::OnInitDialog();$ D1 k( @" a( u0 {9 ^) P
) K: ^8 t" P* z% k# g // TODO: Add extra initialization here: ?0 t; D# x" U: {2 M4 d8 P
try{ 2 h0 k! U, p2 F! h x+ I' B
m_pdatabase=new CDatabase();
D# E4 C7 S- H m_pset=new CRecordset();8 g% b T: A. M7 h u* f2 u9 E6 F! a
m_pdatabase->Open(_T("data"),FALSE,FALSE,_T("ODBC;DSN=data"),FALSE);
/ p) u+ R4 l( k/ q9 R0 O m_pset->m_pDatabase=m_pdatabase;
2 j$ B; F6 J. g" ~! I }2 d9 i. i1 P8 F: \+ L3 v
catch(CDBException* e){
0 k0 Z" z& g# y" x e->ReportError();
: b- z+ i N: Q2 h. Q2 ]2 y- [ e->Delete();
6 H4 B4 _; Q- t( k4 j+ f delete m_pset;' K* F% L; y, {5 D- b. X
delete m_pdatabase;
5 K2 p+ z }$ n return TRUE;}
p& q9 P; ]( H DataShow("data");
- \ R- V0 D2 Z, q return TRUE; // return TRUE unless you set the focus to a control
( |8 k+ o& p9 ?! l6 Y4 a1 C1 [: n // EXCEPTION: OCX Property Pages should return FALSE! T, J" D2 l% S( ~0 k! w. F" O
}+ n9 }+ A& g$ L( j- M: v
# g0 O! J) M+ Xvoid Database_main::OnOK() * e1 X0 f0 K8 d! j, J9 X) Q% }
{
4 ~* J X0 e4 _0 W // TODO: Add extra validation here
8 {. O# f# X: L. w g1 v# h0 g7 B UINT uSelectedCount=m_list_control.GetSelectedCount();
' \5 d4 c2 O z. H* r- @4 D- eint nItemSel=0;
2 f4 X& \% c+ p" C8 ?/ I1 O$ \* Z nItemSel=m_list_control.GetNextItem(nItemSel-1,LVNI_SELECTED);
$ Z) x+ g& a, n8 v; B( l; P3 G2 F7 Y% m for(int j=0;j<nFieldCount;j++)2 U9 S( M/ {* X1 v; Q4 _0 z
str[j]=m_list_control.GetItemText(nItemSel,j);
7 t4 r7 f9 ^& E2 r5 A }
% {9 P3 p. c4 L+ F0 g% K+ D, w5 T9 T
! R% D! @4 J4 F; O
" I9 g& U- |; W) d$ t 1 F! C" w/ F/ q: D0 }9 K9 S: i
CDialog::OnOK();
& o5 F7 K/ |0 A6 V' E' I5 Y, p+ a}9 m5 a8 q H F" @% G( I
* ^2 j: Q0 ^& \( a7 M3 X5 g7 Vvoid Database_main::ClearList()
3 y/ Q: J- }( [* q{
5 E& k6 F! }# ?1 s( {# P7 e //m_list_control.SetExtendedStyle(LVS_EX_FULLROWSELECT);
0 b, f, @9 ~+ N' j. |% \& t //m_list_control.SetExtendedStyle(LVS_EX_GRIDLINES);
) x$ |% R6 b4 F$ w/ q" y m_list_control.DeleteAllItems();
" u1 q7 Y; ]; Z }8 P3 M while(m_list_control.DeleteColumn(0));
4 V& ^0 m; M& {1 h UpdateWindow();
/ x1 Z0 Y0 c( l2 t& f}8 {/ ]& J: }- J: x
////////////////////////////////////////////////////////////////////////////////////
; q1 m8 E+ A# tvoid Database_main: ataShow(CString table_name)) g3 R, a ]: B- N
{, k' }6 S3 k4 ^
ClearList();
) ?- a& N8 I, O5 ^) \6 L CString strSQL;& a+ ^1 D8 x: c
strSQL="select * from "+table_name; J3 h/ `9 S, b8 q
ShowInformation(strSQL);
8 @) _% n" b& H# d7 c- Z}
2 @& M% t. A7 ` w8 F4 E
+ A, m7 }4 v! K4 R* n. C% U- N" HBOOL Database_main::ShowInformation(CString strSQL)
7 j7 _ N/ `1 A) T S{
& k9 i( ]- \3 [# \ if(!m_pdatabase->IsOpen()) return FALSE;
6 c D! {5 z# \5 e if(!m_pset) return FALSE;& Q8 D/ V, i( t- d2 B" s
try{; o( T- N6 A/ m* [# d
BeginWaitCursor();
7 n" _! k0 d6 j, z! ?6 u8 y8 H if(m_pset->IsOpen()) m_pset->Close();+ g# ]1 z5 J+ T, q
m_pset->Open(CRecordset::dynaset,strSQL);9 V8 l, f; L$ D- h5 G. K( v! \' D3 T
if(!m_pset->IsEOF())! A' z, r" @. ?# [- N$ ]: W+ d
{m_pset->MoveLast();. l7 O0 a9 e" m0 o7 N. y0 K
m_pset->MoveFirst();}- t8 S: m8 i. o
nFieldCount=m_pset->GetODBCFieldCount();, \) Y& l$ w& n- h
CODBCFieldInfo fieldinfo;
& Q( k1 b; q) x# o- Q3 y for(int n=0;n<nFieldCount;n++){ E7 V1 c. @* R3 y$ L& N
m_pset->GetODBCFieldInfo(n,fieldinfo);. k9 C* D* @ _/ m: ]6 b# u1 c; K
int nWidth=m_list_control.GetStringWidth(fieldinfo.m_strName)+35;- h( C2 a7 G' A" f" C) ]
m_list_control.InsertColumn(n,fieldinfo.m_strName,LVCFMT_RIGHT,nWidth);
# h, d6 k1 ], P* K; s5 {7 k }
7 u: s" Z1 ]& W% t$ w( L0 Y CString strValue;
9 a* a' u: l, s) v1 C& g2 z8 v m_pset->MoveFirst();
/ H( I! |1 k! q8 J* m4 ` int nCount=0;* j3 \( n4 w- ] A. G8 T7 }- i
while(!m_pset->IsEOF()){
3 ]( | s7 I% o3 U( ]2 x m_list_control.InsertItem(nCount,strValue);. A+ M& Z, p5 K: M$ k/ I8 |
for(int j=0;j<nFieldCount;j++){9 w% L5 R! n! d' @
m_pset->GetFieldValue(j,strValue);
/ q v2 G, w- m( a+ m# [ m_list_control.SetItemText(nCount,j,strValue); ~+ v3 {# [4 s( y4 F/ T
}
$ G% e7 s1 C/ i% p1 O' F! p* E2 v m_pset->MoveNext();
9 [4 ~1 L( _ Q( F nCount++;
2 P% e1 \: Z& C$ L2 k }" P( B9 W6 {9 L& u
EndWaitCursor();( P, `/ c. W8 j4 A9 i' D' e% o; I
}
- c% ]1 R8 V% K5 M* g% ]- F; j1 D catch(CDBException *e){
, E( A0 w+ N/ M: R2 s/ P2 u( V e->Delete();
. g& w3 o. U, P* G5 s. \& i. q5 V$ s EndWaitCursor();
5 l: m* W O2 s+ O5 Z return FALSE;. Z" f& }- d1 K, v ~6 x' r L, u$ d
}
* Z+ {( i1 k2 p7 R* l+ w return TRUE;$ f5 g( S2 M% ~! w2 i+ ]
} |
|