Форум: Форум C++Разное
Новые темы: 00
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Access + Visual C++ = ????
 
 автор: El   (04.08.2008 в 12:32)   письмо автору
 
 

Добрый день!

у меня следующая проблема: я пытаюсь написать программу в с++ (Visual Studio 2005), которая должна работать с базой данных(Access). Попытки связать через DataSet и TableAdapter пока не принесли никаких результатов. Связь с базой данных функционирует, только как мне добраться до самих данных? Может кто-то уже делал что-то подобное.
В инете море информации по Visual Basic и C#, и практически ничего по с++...

=(

El

  Ответить  
 
 автор: уу   (26.08.2008 в 09:03)
 
   для: El   (04.08.2008 в 12:32)
 

Технология ODBC

CDatabase + CRecordset

Все делается визуально.
1. Добавить новый класс
2. Выбрать класс доступа к базе данных
3. Выбрать источник (mdb, dbf, txt - не важно)
4. Создается класс производный от CRecordset причем на каждое поле в БД создается переменная член класса
5. Синхронизация созданных переменных с полями БД автоматическая

Получится что-то типа

NAME="DBQ="+NAME+";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;";

CDatabase DB; // База данных

DB.OpenEx(p,CDatabase::noOdbcDialog);

class CTB_RASDEL : public CRecordset
{
private:
long m_ID;
long m_ID_RASDEL;
CString m_NAME;
virtual CString GetDefaultSQL() { return _T("[RASDEL]"); }
void DoFieldExchange(CFieldExchange* pFX) { pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Long(pFX, _T("[ID]"), m_ID);
RFX_Long(pFX, _T("[ID_RASDEL]"), m_ID_RASDEL);
RFX_Text(pFX, _T("[NAME]"), m_NAME); }
long NUM(TARRAY <T_RF> *t,long ID) { for(long k=1;k<=t->Size();k++)if((*t)[k].ID==ID)return(k);
return(0); }
long ADD(TARRAY <T_RF> *t, TARRAY <char> *z) { //for(long k=1;k<=t->Size();k++)if((*t)[k].ID==m_ID)return(k);
long k=NUM(t,m_ID);
if(k==0) { T_RF u;
u.Name = (z==NULL)?0:(z->Size ()+1);
u.ID =m_ID;
u.RF =m_ID_RASDEL;
if(z!=NULL)z->AddLPZ(m_NAME.GetBuffer());
if(!t->ADD(u))return(false); else return(t->Size()); }
else return(k); }
bool List1(long g,TARRAY <T_RF> *a,TARRAY <char> *b) { //long i=a->Size()+1;
m_strFilter.Format("ID_RASDEL=%li",(g==0)?1:g);
Requery ();
if(!IsEOF())MoveFirst();
if(!IsEOF())if(m_ID==1)MoveNext();
while(!IsEOF()) { ADD(a,b);
MoveNext(); }
return(true); }
bool List2(TARRAY <T_RF> *a,TARRAY <char> *b) { if(!Requery ())return(false);
if(!IsEOF())MoveFirst();
if(!IsEOF())if(m_ID==1)MoveNext();
while(!IsEOF()) { ADD(a,b);
MoveNext(); }
return(true); }
bool EQ(TRasdel *r) { return(r->ID_RASDEL==m_ID_RASDEL && strcmp(r->Name,m_NAME)==0); }
public:
CTB_RASDEL(CDatabase* pDatabase = NULL) : CRecordset(pDatabase) { m_ID = 0;
m_ID_RASDEL = 0;
m_NAME = "";
m_nFields = 3;
m_nDefaultType = dynaset; }
bool FindID(long ID) { if(ID==0)m_strFilter="";else m_strFilter.Format("ID=%li",ID);
if(Requery())return(!IsEOF());else return(false); }
bool Get(long ID, TRasdel *r) { if(FindID(ID))return(Get(r)); return(false); }
bool Get(TRasdel *r) { r->ID =m_ID;
r->ID_RASDEL=m_ID_RASDEL;
r->Name =m_NAME;
return(true); }
long Put(TRasdel *r) { if(r->ID!=0)if(!FindID(r->ID))return(0);
if(r->ID==0)AddNew();else Edit();
if(r->ID>0)if(EQ(r))return(m_ID);
m_ID_RASDEL=(r->ID_RASDEL==0)?1:r->ID_RASDEL;
m_NAME =r->Name;
if(!Update())return(0);
if(r->ID==0)MoveLast();
return(m_ID); }
bool Kill(long ID) { if(!FindID(ID))return(false); else Delete();
return(true); }
bool Ren (long i,CString s) { if(!FindID(i))return(false);else Edit();
if(m_NAME==s)return(true);else m_NAME=s;
return(Update()); }
bool List(TARRAY <T_RF> *a,TARRAY <char> *b, long g) { a->Kill();
if(b!=NULL)b->Kill();
return(List1(g,a,b)); }
bool ListExpand(TARRAY <T_RF> *a,TARRAY <char> *b) { long h=1;
while(h<=a->Size())if(!List1((*a)[h].ID,a,b))return(false); else h++;
return(true); }
bool ListUsed(TARRAY <T_RF> *a,TARRAY <TTestContent> *Template)
{
long i,j;
CString s;
TARRAY <long> *temp;
m_strFilter="";
for(i=1,j=0;i<=Template->Size();i++) { if((*Template)[i].ID_VOPROS!=1)continue;
s.Format("ID=%li",(*Template)[i].ID_RASDEL);
m_strFilter+=((j==0)?"":" OR ")+s;
if(j==5) { j=0;
if(!List2(a,NULL))return(false);
m_strFilter=""; }
else j++; }
if(j!=0)if(!List2(a,NULL))return(false);
if(!ListExpand(a,NULL))return(false);
for(i=1;i<=a->Size();i++)(*a)[i].Name=NUM(a,(*a)[i].RF);//if(((*a)[i].Name=NUM(a,(*a)[i].RF))==0)return(false);
return(true);
}
};

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования