не получается обратиться к базе данных
От: diarti  
Дата: 08.05.04 11:46
Оценка:
Здравствуйте!
Please help,help!
никак не могу обратиться к базе данных. Вернее не могу обратиться из потока.
эта самая база открывается ко клику на кнопку Open
void CConnectDlg::OnOpen()
{

if(!db.IsOpen())
db.Open("db3");
CDaoRecordset* rset=new CDaoRecordset(&db);
db.GetTableDefInfo(7,tinfo,AFX_DAO_PRIMARY_INFO);
wsprintf(buf,"select * from %s",tinfo.m_strName);
rset->Open(AFX_DAO_USE_DEFAULT_TYPE,buf,0);
rset->MoveLast();
short n=(short)rset->GetRecordCount();
srand( (unsigned)time( NULL ) );
state=(short)rand()%n+1;

}
// здесь все нормально обращаюсь и читаю данные
дальше по кнопке Start запускаю поток

void CConnectDlg::OnStart()
{
SYSTEMTIME systime;
char buf[10];
if(timeworking)
{
pThr[0]=AfxBeginThread(Thread1,this);
GetSystemTime(&systime);
timeworking+=systime.wHour*60+systime.wMinute;
SetTimer(1,1000,0);

}
else
AfxMessageBox("введите время работы системы");
}

//в таймере проверяется не вышло ли время работы


void CConnectDlg::OnTimer(UINT)
{
SYSTEMTIME systime;
GetSystemTime(&systime);

if(timeworking==systime.wHour*60+systime.wMinute)
{
timeworking=0;
AfxMessageBox("работа завершена");

}
//в потоке пытаюсь обратиться либо к базе, либо Recordset rset
//например стоит вызвать функцию Move() выдает ошибку Debug Assertion Failed


вот текст потока

UINT Thread1(LPVOID p)
{
CConnectDlg *pDialog=(CConnectDlg*) p;
pDialog->rset->Move(1);
FILE *file,*fileout;
CString event[2];
char x[3];
srand(time(NULL));
file=fopen("c:\\ch1BJ.txt", "w");
fileout=fopen("c:\\ch2BJ.txt","w");
while(pDialog->timeworking)
{
x[1]='0'+pDialog->gen(j);
z=pDialog->example1(x,event,&i,&evistrue);
fprintf(fileout," %d ",z);
fprintf(file," %d ",x[1]);
x[0]=x[1];
j++;

}
fprintf(file,"%d",j);
fclose(file);
fclose(fileout);
return 0;

}

без pDialog->rset->Move(1) все работает. Почему выдает ошибку? Пробовала в функции OnTimer() тоже не получается.
Что делать не знаю, помогите!!!!!!!
Заранее спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.