ورود

View Full Version : سوال: کار با بانک اطلاعاتی(Database)



plato
دوشنبه 07 بهمن 1387, 11:12 صبح
من یه برنامه VC++ 6 دارم و با بانک Access کار می کنم. واسه عملیات Insert, Update و delete از متد ExecuteSql در (کلاس CDatabase استفاده می کنم و مشکلی هم ندارم.
برای Select کردن و نمایش select query ظاهراً مجبورم از CRecordset استفاده کنم ولی نتونستم نتیجه Select Query رو بگیرم و مثلاً توی یه لیست(CListCtlr) نمایش بدم.
لطفاً راهنماییم کنید.
متشکرم.

Nima_NF
چهارشنبه 09 بهمن 1387, 02:22 صبح
اگر می خواهید داده ها را دریافت کنید و در مثلا listbox بریزید آن وقت نباید از ExecuteSQL استفاده کنید، باید از همان CRecordset استفاده کنید تا داده را توسط GetFieldValue دریافت کنید (که از همان SQLGetData در ODBC استفاده می کند).
insert ، delete ، select و ... را نیز توسط Open انجام می دهید.
توجه کنید که اگر می خواهید رکوردها read-only نباشند، open را با فلگ های پیش فرض فراخوانی کنید یا فلگ های قابل update شدن را تنظیم کنید و متد Edit را فراخوانی کنید.

در حلقه نیز از MoveNext و سایر موارد مشابه می توانید استفاده کنید تا به ردیف های بعدی، قبلی، اولی و ... بروید.

مثال زیر برگرفته از MSDN از این لینک است (http://msdn.microsoft.com/en-us/library/5f8k59f9%28VS.80%29.aspx):




CDatabase db;
db.OpenEx( NULL, CDatabase::forceOdbcDialog );

CRecordset rs( &db );
rs.Open( CRecordset::forwardOnly,
_T( "SELECT * FROM SomeTable" ) );

CDBVariant varValue;

short nFields = rs.GetODBCFieldCount( );

while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue );

//---------------------
// do something with varValue
//---------------------
}
rs.MoveNext( );
}

rs.Close( );
db.Close( );