|
Trying to connect (Open) to database with connection string retrieved using GetConnect.
I get an error message telling me that the Open failed, but the file path is different than the one I sent in Open function.
My application and database are in different subdirectories and it should not be a problem.
Could this be an ODBC problem? Perhaps I need new ODBC driver version?
I am running VC6.0 with Access 2000 and no, upgrading to anything else is not an option. Please refrain from comments like that.
Here is the code snippet:
// build database
m_CFD2008Doc->m_pFDDatabase = new CDatabase();
VERIFY(m_CFD2008Doc->m_pFDDatabase );
// set connect string
CString strConnect =
"ODBC;DSN=MS Access Database;DBQ=K:\0 FD2008\Database\db2.mdb;DefaultDir=K:\0 FD2008\Database;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;";
if(! m_CFD2008Doc->m_pFDDatabase->Open(NULL,FALSE,FALSE, strConnect,TRUE ))
{
TRACE(" Failed to open %s database ", strConnect);
}
Error message received:
Could not find file "K:\0 FD2008\V1\FD2008\.mdb"
Thanks for your help
Vaclav
PS Why is this editor having problem accepting dereference symbol "->" in text?
A dummy fell for the oldest trick in C not including double \\ in the string. Also the last parameter in Open must be FALSE.
<div class="ForumMod">modified on Sunday, May 25, 2008 12:48 PM</div>
|
|
|
|
|
Did you try "\\" in string literal instead of "\" ?
|
|
|
|
|
Thanks, feel like an idiot for falling for the oldest trick in the C programming!
Now I get that my ODBC driver does not support dynasets!
And this is Access 2000 ! I hope I can fix that.
Thanks again.
Vaclav
|
|
|
|
|
|
Real nice article.
I think I got the access (Open) figured out now I am struggling with writing to database. Getting Invalid descriptor index and it is driving me nuts to figure it out.
The books say do AddNew, do your ads and then Update for dynaset.
But it keeps failing with this cryptic error. Something about columns numbers not proper.
But it fails on first add!
Vaclav
|
|
|
|
|
That's pretty much much it...
pMyRecordset->AddNew();
pMyRecordset->m_sColumn1="SomeData1";
pMyRecordset->m_sColumn2="SomeData2";
pMyRecordSet->Update();
How are your recordsets bound? Did you use the wizard to bind them or are you attempting to dynamically bind them?
|
|
|
|
|
I used wizard to initially build the CRecorset class and when I change field I use Update Columns and Bind All.
What bugs me - I have no feedback during Bind All and the button stays active - does not return back to "normal". So I really do not understand or see what is happening.
I vaguely remember similar problem and it had to do something with column order. There are few reference on the internet to that effect. But it does not make sense - since it fails same way if I select individual columns or just do SELECT *...
My last attempt is to use single column table and see if I can make it work.
There is something simple and stupid missing.
Vaclav
|
|
|
|
|
I was able to reproduce the "invalid descriptor index" by messing up my column index alignments in the "DoFieldExchange" and Constructor sections of my recordset class.
I'm not sure if that helps you find the problem but for what it's worth.
|
|
|
|
|
I think you found it. Me being old - today is my 65 b-day - I just did not remember the details.
Vaclav
|
|
|
|
|
Happy Birthday!
|
|
|
|
|
I thing the problem was MFC arranged the dx stuff alphabetically!
|
|
|
|
|
Interesting.
Which version of MFC or Visual C++ are you using by the way? (Just out of curiousity)
|
|
|
|
|
Look up CRecordset::m_nFields in MSDN.
It describes the column alignment requirements
|
|
|
|
|
Using VC++ 6.0 and I think the MFC is still 4.0.
Yes, I did run into this few years back.
Today I'll build a test app with just single table and one field ( if there is such a thing!) and do some testing.
In theory it should work with just one variable.
On a side note - since I am no SQL expert - why does CRecordset rejects
"SELECT ALL FROM table" but it likes "SELECT * FROM table"?
Apparently terms "column", "field" and this darn descriptor index are blood relatives.
Vaclav
|
|
|
|
|
Vaclav_Sal wrote: why does CRecordset rejects
"SELECT ALL FROM table"
Quite honestly, I've never seen or used "SELECT ALL" before so I'm not going to be much help on that.
Wish I knew more about SQL but I've only ever known the bare minimum to get by.
|
|
|
|
|
I have to quit for a while, but the bad news is that CRecordset does not like to have more than one table and its variables "bound".
Also the SELECT must select all of the columns in a single table - that makes some sense.
The key is the m_nFields counter in the constructor.
I think that is our unfriendly descriptor index !
I have also discovered if you add another table / variables the returning recordset is read only no matter what the Open options are.
I guess that is mixing the records and somewhat makes sense too.
Cheers Vaclav
|
|
|
|
|
HERE IS MY FINAL ANSWER!!!
MFC CRecordset wizard builds (MS calls it binds )
DoFieldExchange(CFieldExchange* pFX) and puts the calls to
RFX_... functions
example
RFX_Long(pFX, _T("[ContactID]"), m_ContactID);
IN ALPHABETICAL ORDER !!!!!
Logically, it has no other ordering choice anyway.
The SQL SELECT * reads the fields/columns in ascending NUMERICAL order.
This must be the mysterious descriptor index!
So, when CRecordset does Update the data does into database fields in ALPHABETICAL order and you get all kinds of error messages – including the Invalid Descriptor Index - and no update at all.
If the CRecordset has variables (build by wizard) from more than one data table – just forget it and go fishing!
Actually - IMHO using wizard to derive class from CRecordset is the buggiest code in MFC. It never works on first try.
Cheers Vaclav
|
|
|
|
|
Hi,
I came across an article about setting windows Environment variables from within a program.
http://www.codeproject.com/KB/system/EnvMan.aspx[^]
However it uses .net library's Environment class to do it.
Is there some way to do it using win32/mfc native code?
I tried the _putenv() and getenv() functions but it seems they affect the process which makes these calls only. The changed values do not get reflected on the system level.
Is there any other way to achieve this?
only dead fish swim with the stream
modified on Sunday, May 25, 2008 8:38 AM
|
|
|
|
|
|
thanks Jijo raj.
this seems to be exactly what i was looking for.
only dead fish swim with the stream
|
|
|
|
|
Hi,
i'm working now for some days with the ultimate toolbox.
The small examples were no problem, but now i'm in the advanced folder at the Fileexplorer example.
This is the contol i need and the reason for me to start with the UT because later on i wlii try to implement such a treevew and its listview in a projekt of mine.
But because of the total lack of tuts dealing with the UT i've now a problem.
I copied the FileExplorer sample out of the sample folder in another folder and then i added the headerfiles OXShellFolderTree.h, OXShellNamespaceNavigator.h und OXShellObjectList.h to the project, it works !
But know i want to build up this FileExplorer example on my own, because of training reasons.
I opend a new mfc project (Windows Explorer Style) and added the headerfiles.
What have i to do now?
There is a folder in the orig. sample "UTBSource", have i to add it to my project too?
Have i to change something in the project settings in the studio?
Oh i think it is quiet important, i'm usin Vc++ 6.0 !!!
Thanks a lot for your help!
Best regards
Crocodile Buck
P.S.: Do you know some step by step tuts dealing with the UT.
|
|
|
|
|
...really nobody?
best regards
Croc
|
|
|
|
|
Hi all,
In a fashion similar to that of the existing windows start/task bar, I would like to create an additional bar/panel at the upper extremity of the desktop area. As this would involve a reduction of the existing desktop area in order to ensure that application windows do not encroach upon this area, I'm at a loss as to how this may be achieved.
Any ideas/advice would be gratefully received.
Best regards, Lee.
|
|
|
|
|
i want to convert source from c++ to c.
if you know site that i can request small source to convert or delevope who can use c++ and c
Total number of line is 500.
please tell me~
hi
|
|
|
|
|
Search on internet, you will get lot of options , ofcourse, if they understand what you are trying to do.
Prasad
MS MVP - VC++
|
|
|
|