|
Check that the database class is open with the proper ODBC connection. Check the CDataBase.Open function
|
|
|
|
|
Thanks for your help but it seems like the problem is elsewhere. My odbc connection string contains all the information about the dsn, the uid and the pwd. After my openEx statement, tests with isOpen() and CanUpdate() on the database object returns true. It's CanAppend() and CanUpdate() on my recordset that fails.
After adding try/catch blocks around my AddNew() and Update() statements I've found, not to my surprise, that my recordset is readonly. The problem is now that I don't know why.
|
|
|
|
|
Give only
rsaAtgard.Open(CRecordset::snapshot)
instead of rsaAtgard.Open(CRecordset::snapshot, NULL, CRecordset::none);
or give a query in place of NULL.
I hope this will work
|
|
|
|
|
I'm sorry to say that neither of those suggestions helped. I've tried them before and now once again, but my recordsets are still not appendable/updatable.
I have a feeling (disturbance in the force) that the problem is more complex. I've managed to create recordsets for another table that worked, but I can't find any relevant differences between the tables or the code. I'll keep looking though. I can't let go of this problem now. Now it's personal.
|
|
|
|
|
I had this problem and it turns out I was trying to add data to an SQL generated record ID (specified in the table to be sequential). So my updates worked, but my inserts always failed - the table wasn't readonly, but the field threw that exception when I put data in it.
Hope this helps - I know how frustrating it can be.
--Mark Terrano
|
|
|
|
|
Thanks for your advice. I've just returned from vacation, that's why I haven't answered you earlier.
I found that part of my problem was that one of my troublesome tables had no primary key. After I added one I got it working. Still only using dynasets though. Do you know if snapshots would be faster that dynasets? My program is quite slow and I'm looking for ways to decrease its execution time without major re-design.
In my program I'm performing about 500 individual database interactions using CRecordsets, and I can't really think of a way to easily improve the execution speed. I don't know if changing to stored procedures would solve my problems, but it would take a lot of work to find out I'm afraid.
|
|
|
|
|
You probably know this but a table must have a primary key for the CRecordset object to be able to add records to it.
I have had a project where my CRecordst object worked fine and then stopped working once the number of records passed an arbitary point. Never solved this one used ExecuteSQL on he CDatabase object instead as all I wanted to do was insert records. No good for selects though!
|
|
|
|
|
Yes after a lot of trouble I finally figured out that one of my tables were missing a primary key. When I added one it worked fine.
The reason I could only update tables when using dynaset, and not snapshots, was because I've missed the fact that one has to specify the useCursorLib flag when working with snapshots.
The problem you're describing sounds strange though. Did you perhaps "run out" of ID's?
Thanks for your time anyway! My program is working now. However, I feel it's kind of slow. But that depends on the huge amount of database accesses I do.
|
|
|
|
|
Hi
Can anyone explain me how to implement a Windows Message Handler ( Reflection ) -
I have a Dialog box which has a CListCtrl & I would like the ListCtrl to handle the WM_MouseMove & not the dialog box. SO, I added a Windows Message Handler Using the class view for WM_MouseMove . Now, how can I pass this on to the CListCtrl??
it's like this:
Class Sample is the dialog class. and the list control is placed inside this dialog box.
void Sample :: OnMouseMove ( .. , .. )
{
????
}
Any sample would be very useful.
Thanks
Sankar
|
|
|
|
|
I believe you have to derive a class from CListCtrl, and add the handler there. You can do all of this through ClassWizard.
Let me know if you need more help.
|
|
|
|
|
Do you want to handle WM_MOUSEMOVE received by dialog in CListCtrl-derived class? Why?
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
I have created a dlgbox application, where the user could put a string like "1Y", and i need to catch values which are kept in the field named "1Y". So, is the method Find, which the best or not?
thanks in advance
gerald
|
|
|
|
|
How do you do to not resizing the last column on the right in a CListCtrl
Thanks
|
|
|
|
|
Hi all,
Can somebody help me on this.
I create one dialog let say First dialog. On my First dialog I will validate the OnOK button and if it true open Second dialog. But before I open it, I should dispose the First dialog. This program work ok on my pc(which got visual c++). However when I install in a new pc, it doesn't open the Second dialog. The DoModal method return -1 in a new pc (I check this using text file).
The codes are like these:
in MyApp class:
MyClass::InitInstance()
{
CFirstDlg firstDlg;
m_pMainWnd = &firstDlg;
int nResponse = firstDlg.DoModal();
}
in CFirstDlg class:
CFirstDlg::OnOK()
{
if (validate)
{
CDialog::EndDialog(TRUE);
CSecondDlg secondDlg;
int nResponse = secondDlg.DoModal();
// print nResponse to text file
if (nResponse < 0)
AfxMessageBox("cannot open second dialog");
else
AfxMessageBox("Second dialog opened");
}
else
{
...
}
}
The problem is how can I make sure that the DoModal method will give me a positive value so it can display the second dialog?? My second dialog is using thread and the first dialog don't. Is the thread give me the problem??
What make me feel weird is it works fine in my pc so I cannot detect what's wrong with the code.
Anybody can help me??
Thanks in advance.
FM
|
|
|
|
|
Sounds like the second dialog either a) contains an ActiveX control that isn't installed, or b) is trying to instantiate a COM object that isn't installed.
Post your CSecondDialog::OnInitDialog() code.
--Mike--
http://home.inreach.com/mdunn/
"You named the Borg... Hugh?"
-- Guinan
|
|
|
|
|
This is CSecondDlg::OnInitDialog() code:
BOOL CSecondDlg::OnInitDialog()
{
CDialog::OnInitDialog();
...
// TODO: Add extra initialization here
// Create a StatusBar
CRect rect;
if (!m_wndStatusBar.Create(WS_CHILD|WS_VISIBLE, rect, this, IDC_STATUSBAR_STATIC))
{
TRACE0("Failed to create status bar\n");
return -1;
}
// give first status bar pane a border
int strPartDim[3]= {100, 130, -1};
m_wndStatusBar.SetParts(3, strPartDim);
DisplayTime(); // to display time in status bar
// 1st Thread
CWzdThread* kpThread = (CWzdThread*)AfxBeginThread(RUNTIME_CLASS(CWzdThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
kpThread->SetOwner(this);
if (!kpThread)
{
ASSERT(FALSE);
return FALSE;
}
pThread = kpThread;
pThread->ResumeThread();
// 2nd Thread
CAnotherThread* kpThread1 = (CAnotherThread*)AfxBeginThread(RUNTIME_CLASS(CAnotherThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
kpThread1->SetOwner(this);
if (!kpThread1)
{
ASSERT(FALSE);
return FALSE;
}
pThread1 = kpThread1;
pThread1->ResumeThread();
}
m_bInformCSDA = FALSE;
SetTimer(ID_COUNT_TIMER, 50, NULL);
return TRUE; // return TRUE unless you set the focus to a control
}
My second dialog also using ActiveX control (for Winsock and create registry). Do these controls give me the problem??
Thanks in advance.
FM
|
|
|
|
|
i made CPoint object and inserted it in CObArray. by the way, the problem is occured.
i'd guess to be garbage value in there.
i wrote the following code.
--------------------------------------------------
CPoint point(10,10);
ArrFigure.Add((CObject*)&point);
--------------------------------------------------
Since CPoint is not derived from COject?
ask for answer
thank you
have a nice day
|
|
|
|
|
I'm assuming you call that code inside some function and notice the garbage after the function returns. The reason is that the CPoint is created on the stack and is destroyed when the function returns. To make it work you need to do the following...
ArrFigure.Add(new (CObject *) CPoint(10, 10));
Of course, since CPoint isn't derived from CObject you need to be careful. Better to use the template classes thusly...
CArray<CPoint *, CPoint *> ArrFigure;
ArrFigure.Add(new CPoint(10, 10));
Don't forget that when you destroy ArrFigure you must also destroy each CPoint object (the array object won't do it for you).
Rob Manderson
http://www.mindprobes.net
|
|
|
|
|
and one second after hitting the submit button I saw it
ArrRigure.Add((CObject *) new CPoint(10, 10));
Doh!!!
Rob Manderson
http://www.mindprobes.net
|
|
|
|
|
CObArray is an array of pointers - you're adding a pointer to the CPoint object.. That object is probably going out of scope, so when you try to read it later, it's not there anymore.
--Mike--
http://home.inreach.com/mdunn/
"You named the Borg... Hugh?"
-- Guinan
|
|
|
|
|
Hi
I have a strange problem. I have an application in VC6.0 which makes use of crystal reports to generate a report. Now thi sapplication works fine in variuos systems under various OS. But , only in one machine ( to my badluck it happens to be the live machine ) this applciation crashes. there's o'cos no MSDEV & source code in that machine.and so, i used the NTSD debugger to get a little mor eknowledge on this and i got the following extract ( I have jus tpasted just a thte point of crsahing )
NTSD ModLoad: 77bc0000 77bc7000 RPCLTC1.dll
NTSD: access violation
NTSD: !!! second chance !!!
eax=7469650a ebx=0000003f ecx=7469650a edx=0000003f esi=8c30cea6 edi=00000004
eip=7800d1c4 esp=0161fb7c ebp=0161fb98 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246
*** WARNING: symbols checksum and timestamp is wrong 0x0004ed1e 0x000528d6 for m
svcrt.dll
MSVCRT!set_sbh_threshold+827:
7800d1c4 8906 mov [esi],eax ds:0023:8c30cea6=????????
0:001> kb
ChildEBP RetAddr Args to Child
0161fb98 7800cc1c 00901dc8 8c30cea6 0161fdd7 MSVCRT!set_sbh_threshold+0x827
0161fbdc 7800578c 0093320c 41104111 0093320c MSVCRT!set_sbh_threshold+0x27f
0161fbfc 4110bd0f 009337c0 00000002 00934e60 MSVCRT!_crtGetLocaleInfoW+0x580
0161fc30 4110bc2f 00934e60 0161fc5c 4110a7d6 P2SEVT+0xbd0f
0161fc3c 4110a7d6 00000001 00911170 00934e60 P2SEVT+0xbc2f
0161fc5c 42d6a1f7 009337e0 009337a0 009320a2 P2SEVT!SQLReadNextRecurringRecord+0
x8b
0161fe64 77e42257 005f0778 0000061c 00000000 CRAXDRT!DeleteUFLString+0x124c47
0161fe90 77f663f3 0161fea0 00000018 005f0778 USER32!IsWindow+0xa7
0161fee4 5f401301 00911364 00000000 00000000 ntdll!KiUserCallbackDispatcher+0x13
00911364 00000000 00000000 00000000 00000000 MFC42!Ordinal5307+0x13
Pl. let me know what does this mean .
Thanks
regards
Sankar
|
|
|
|
|
Looks like Crystal Reports (CRAXDRT)is crashing in a call to IsWindow() - hmmm... could be tricky...
Its also telling you the symbol file for the MS C runtime is not the right one (which may be no big deal).
Maybe take a look at all the dependencies in your exe and see if the versions of those DLLs are the same on the problem machine.
|
|
|
|
|
Hi all,
This has probably been asked before, but I can't find it. I've done the usual generic app. that requires a user to select a bunch of files from one window and drop them into another yadda, yadda. At the moment, my app. mimics explorer by manually drawing tree and list controls and populating the contents based on drive and directory information and the system image list for icons. What would be _really_ nice is the have full explorer functionaility such as context menus and delete / rename functions etc. I assume this can be done by embedding a version of explorer into a view of my application (ala OLE?), but I just don't know where to start, what API's to use or even how to do it, any pointers?
Thanks, Jon.
|
|
|
|
|
Hi,
I have an MDI application with Doc/View arch. I am working on Print/preview feature for the application.
I have the following code in a function that is called when "Print" is chosen:
CPrintDialog *m_PrintDialog = new CPrintDialog(TRUE, PD_ALLPAGES | PD_RETURNDC, NULL);
DOCINFO di;
::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize = sizeof (DOCINFO);
//application title appears in the spooler view
di.lpszDocName = "Print Test";
if (m_PrintDialog->DoModal() == IDCANCEL)
return;
HDC hpDC = m_PrintDialog->GetPrinterDC();
if (hpDC !=NULL)
{
CDC *pDC = new CDC;
pDC->Attach(hpDC);
pDC->m_bPrinting = TRUE;
// use Textmappingmode
pDC->SetMapMode(MM_TEXT);
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
lineHeight = tm.tmHeight + tm.tmInternalLeading;
pageVMargin = pDC->GetDeviceCaps(LOGPIXELSY) / 2;
pageHMargin = pDC->GetDeviceCaps(LOGPIXELSX) / 2;
pageHeight = pDC->GetDeviceCaps(VERTRES);
pageWidth = pDC->GetDeviceCaps(HORZRES);
Y = pageVMargin;
pDC->StartDoc(&di);
for (int i = 0; i<100; i++)
{
pDC->StartPage();
if(!pageStarted || Y > pageHeight - pageVMargin)
{ /* new page */
if(pageStarted)
{
pDC->EndPage();
//pInfo->m_bContinuePrinting=false;
}
//pInfo->m_bContinuePrinting=true;
pDC->StartPage();
pageNumber++;
Y = pageVMargin;
pageStarted = TRUE;
//pInfo->m_nCurPage = pageNumber;
//PageHeading();
} /* new page */
pDC->TextOut(pageHMargin, Y, PrintArray[i]);
Y += lineHeight;
}
pDC->EndDoc();
pDC->AbortDoc();
pDC->Detach();
}
This works fine if the user chooses to print. This function is called from OnPrint function. However, when "print preview" is chosen, nothing shows up. I tried to write similar function but without displaying the print dialog etc. and that prints only the last 6 or so lines on page 1.
Pleeeeeeeeeeease help! I've been doing this for a wk now and it's driving me nuts... I don't know what else to try!!!
Thank you so much for any input...
|
|
|
|
|
My code is:
CListBox* pListBox = (CListBox*)GetDlgItem(IDC_SCREEN_LISTING);
pListBox->ResetContent();
CFileFind finder;
CString extension = "*.fig";
CString filepath = "";
BOOL haveFile = finder.FindFile(extension);
while (haveFile)
{
haveFile = finder.FindNextFile();
pListBox->AddString((LPCTSTR)finder.GetFileTitle());
}
How can I search a file with NO extension....... (no .txt or .ini or...etc....nothing, just the file name...no extension)
|
|
|
|