|
You get this error
"c:\C\1112\Main.cpp(29): error C3861: '_beginthread': identifier not found, even with argument-dependent lookup"
Did you see this line in this example
// compile with: /MT /D "_X86_" /c
|
|
|
|
|
i tryed to compile it wth this cmd line but the compiler
(i tryed with cl.exe) didn't accept this !
|
|
|
|
|
|
win32 application
|
|
|
|
|
Did you set /MT /D "_X86_" /c to runtime library
|
|
|
|
|
How can i compile with /MT option ???
|
|
|
|
|
Right click in your project in solution Explorer ->select property->(Configuration properties)Open C/C++ ->code generation ->now you can see Runtime Library then select Multi-threaded Debug DLL (/MDd)
|
|
|
|
|
Open the Project Settings dialog (Alt+F7). Click the C/C++ tab. Select the Code Generation category. In the run-time library combobox, select Multithreaded (/MT) or Debug Multithreaded (/MTd).
"Money talks. When my money starts to talk, I get a bill to shut it up." - Frank
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Hi,
in a particular situation, my pointer pManager becomes somewhat faulty. It passes the if (pManager) { check, but most of the members are not active and the code crashes when I try to access them.
Now, I want to check if a particular member inside the pointer is valid. When I try like this if (pManager->bMember) { , the code crashes. Are there any functions to check the integrity of a member?
Regards,
Stefan
|
|
|
|
|
Stefan Spenz wrote: When I try like this if (pManager->bMember)
pManager itself is invalid that is why the error occurs.
You can use IsBadReadPtr,IsBadWritePtr according to your requirement.
But you could handle the situation without these functions.
SaRath.
"Where I am from, there is no plan B. So, take advantage of today becuase tomorrow is not promised. - 50 Cent"
My Blog | Understanding State Pattern
|
|
|
|
|
do you construct the object correctly, and how to you assign pManager ?
|
|
|
|
|
How do you declare pManager Can you show
|
|
|
|
|
If the pointer pManager was never initialized using
pManager = new Manager(); that will cause this problem.
If the pointer pManager was initialized but now causes an access violation, it probably means the you have issued a "delete pManager; " at some point. pManager now points to memory you no longer own.
Software Zen: delete this;
|
|
|
|
|
Hi,
My program (vcpp6,mfc) uses a mdb database connected with DAO. The program retrives data from the database and displays it on a list (CListCtrl). When the number of fields are large, abt 20 or so, there is a quite a delay before the list is displayed. In fact the scroll bars appear first and then the headers and then the rest. It takes almost a minute for the whole thing to show.
I was wondering, if I had used odbc or ADO instead of DAO would the loading have been much faster? DAO has become old now. I guess ADO is the one everybody uses these days.
Thanks,
Tara
Fortitudine Vincimus!
|
|
|
|
|
DAO is obsolete now. Better move to new technology like ADO.
Come online at:-
fitiyal@yahoo.com
|
|
|
|
|
Is ADO faster than DAO?
Fortitudine Vincimus!
|
|
|
|
|
Tara14 wrote: Is ADO faster than DAO?
Not when dealing with JET databases, if your database code is limited to working with JET then DAO is much faster than ADO, you should use ADO if you are a VB developer or if your are a C++ developer and don't mind slow database access.
What you should be using is OLEDB.
regards,
Darka [ Xanya]
"When you're taught to love everyone, to love your enemies, then what value does that place on love?"
|
|
|
|
|
My work is mostly related to small to medium database. That would be about 100 records with about hundred fields. I use Jet database for all my work. Is that good enough? Or should I be using something else?
Fortitudine Vincimus!
|
|
|
|
|
Tara14 wrote: Is that good enough
It should be ok, I would just stick with Jet and DAO if you have to use a Microsoft Access database.
Darka [ Xanya]
"When you're taught to love everyone, to love your enemies, then what value does that place on love?"
|
|
|
|
|
Thanks.
Fortitudine Vincimus!
|
|
|
|
|
Besides switching from DAO, I think you can try to improve the speed by disabling redraw operations:
myListCtrl.SetRedraw(FALSE);
. . .
myListCtrl.SetRedraw(TRUE);
If you know the number of items to be added, you can call SetItemCount before.
Additionally, you can investigate the "virtual list" concept.
For some information see http://www.pocketpcdn.com/articles/list_view.html[^].
I hope this helps.
|
|
|
|
|
Viorel. wrote: If you know the number of items to be added, you can call SetItemCount before.
I did that, but it did not help much.
Viorel. wrote: Additionally, you can investigate the "virtual list" concept.
I did search for virtual lists, but from what I gathered, it looked like one cannot do many things with virtual lists - for example: sorting cannot be done.
Fortitudine Vincimus!
|
|
|
|
|
Tara14 wrote:
I did search for virtual lists, but from what I gathered, it looked like one cannot do many things with virtual lists - for example: sorting cannot be done.
This is not true. If you create a virtual list, you must handle the displaying of the data, and you can also handle the column click, call the requery function of the table and then invalidate the list control.
For example: Override the listviews column click virtual method...
void YourListControlView::OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult){
if(NULL == pYourTable){
return;
}
*pResult = 1;
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
ASSERT(pNMLV);
CString _sOrderBy;
CString _sOrder;
CString _sFieldName;
CDaoFieldInfo info;
ZeroMemory(&info, sizeof(CDaoFieldInfo));
m_bSortAscending = (m_nSortColumn != pNMLV->iSubItem) ? true : !m_bSortAscending;
m_nSortColumn = pNMLV->iSubItem;
if(m_bSortAscending){
_sOrder = _T(" ASC");
}
else{
_sOrder = _T(" DESC");
}
try{
pYourTable->GetFieldInfo(nSortColumn, info);
_sFieldName = info.m_strName;
_sOrderBy.Format(_T("%s %s"), _sFieldName, _sOrder);
// Requery the table
// *****************
pYourTable->m_strSort = _sOrderBy;
pYourTable->m_strFilter = _T(""); // You may need to change this !!
pYourTable->Requery();
pYourTable->MoveFirst();
}
catch(CDaoException* px_e){
#ifdef _DEBUG
px_e->ReportError();
#endif
px_e->Delete();
}
// Invalidate the list control so
// that it will be refreshed
// ******************************
GetListCtrl().Invalidate();
....
}
This assumes that your table class is derived from CDaoRecordSet. I use my own classes for DAO access, and any of the main functions (Requery, Movexx etc are capsled)
In this example, I have two member variablesto keep track of the current column and the order of sorting (m_nSortColumn, m_bSortAscending)
Also, using GetListCtrl().SetItemCountEx(nNumberOfRecordsPresnet) will speed up the displaying of the data.
Hope this helps a bit
mfg
Phil
Who the f*** is General Failure, and why is he reading my harddisk?
-- modified at 6:06 Thursday 3rd August, 2006
|
|
|
|
|
Thank you. I shall try it out.
Usually what I do is read data from the database and fill the list.
void CXBudget::AddPayeeList2()
{
CDBcreate *p = new CDBcreate;
CDaoDatabase *pdB=new CDaoDatabase();
pdB->Open(path,FALSE,FALSE,pwd);
CString TabNam = curTableName;
sql = ("SELECT * FROM "+TabNam+" WHERE param='budget' ORDER BY cat,payee");
CDaoRecordset *rs;
rs = new CDaoRecordset(pdB);
rs->Open(AFX_DAO_USE_DEFAULT_TYPE,sql,NULL);
CString strCategory, strPayee;
CString strTp;
int nFeldCount;
nCol = 2; ;
int nRow = 0;
CString strRowTotal;
m_XBudgetLIST_Main.DeleteAllItems();
m_XBudgetLIST_RowTotal.DeleteAllItems();
nFeldCount = p->getFieldCount(pdB,strBudgetName);
while (!rs->IsEOF())
{
strCategory = p->GetAsString(rs,1);
m_XBudgetLIST_Main.InsertItem(nRow,strCategory);
strPayee = p->GetAsString(rs,2);
m_XBudgetLIST_Main.SetItemText(nRow,1,strPayee);
for ( int i = 3;i<nFeldCount;i++)
{
strTp = pCol->SetValue(p->GetAsDouble(rs,i));
m_XBudgetLIST_Main.SetItemText(nRow,nCol,strTp);
nCol++;
}
nCol = 2;
strRowTotal = pCol->SetValue(Payee_RowTotal(strCategory,strPayee));
m_XBudgetLIST_RowTotal.InsertItem(nRow,strRowTotal);
rs->MoveNext();
nRow++;
}
pdB->Close();
rs->Close();
delete p;
delete pdB;
delete rs;
When the number of colunms are too many, the time for the loop to be fully executed is looong.
Fortitudine Vincimus!
|
|
|
|
|
I would consider the following:
Both lists should be virtual, this means that you must provide the information to be displayed as needed by the list control. There are lots of tuts on Code Project regarding virtual lists.
When you load the information from the DB, set the number of rows for each list useing the method I described in my last post. Keep a member variable of the DB, and an index of the current record, as an absolute value. When the list wnats to display a specific row, it will request the item value to be displayed, i.e. row 0, subitem 0, 1, 2, 3, etc. This you can do on the fly, reading the row from the DB, getting the corresponding sub item (field) and displaying it. I know this may seem slow, but it works a treat, as only the information that is to be ACTUALLY DISPLAYED is required.
As for your secondary list that is to display information, I would suggest that you create a query def using the information provided from the main table...
mfg
Phil
Who the f*** is General Failure, and why is he reading my harddisk?
|
|
|
|
|