|
Hi!
I am trying to add information in an access database but when i try sending the information to the database, i keep getting the error message that the record set is read Only. I expected it to be the default "CRecordset::none" flag but i don't know what the problem is. The database has two table but currently i am using only one.In the appWizard i choose to include the two tables.
Below is the code that i have attached to the "add records" button:
(I haven't finished attatching all the CEdit controls becaue of the problem.) Please Help
void CRegistrationView::OnAddrecords()
{
// TODO: Add your command handler code here
// TODO: Add your command handler code here
// Get a pointer to the record set
CRecordset* pSet = OnGetRecordset();
// Make sure that any changes to the current record
// have been saved
if (pSet->CanUpdate() && !pSet->IsDeleted())
{
pSet->Edit();
if (!UpdateData())
return;
pSet->Update();
}
// Add the new record
m_pSet->AddNew();
// Set the registration(Primary Key) in the new record
m_pSet->m_Registration_Number=m_strNew_Registration_Number;
// Save the new record
m_pSet->Update();
// Refresh the record set
m_pSet->Requery();
// Move to the new record
m_pSet->MoveLast();
// Update the form
UpdateData(FALSE);
}
Wamuti: Any man can be an island, but islands to need water around them!
Edmund Burke: No one could make a greater mistake than he who did nothing because he could do only a little.
|
|
|
|
|
This has nothing to do with your problem of adding records, but I question your use of comments. Why state the obvious? For example:
Wamuti wrote: // Add the new record
m_pSet->AddNew();
Wamuti wrote: // Refresh the record set
m_pSet->Requery();
Wamuti wrote: // Move to the new record
m_pSet->MoveLast();
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Wamuti wrote: ...i keep getting the error message that the record set is read Only.
When? How are you opening the recordset? Are you using a DSN, and if so, is it read-only?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Firstly, thanks. The reason i am having comments is that i am using code from a tutorial because i am not very experianced in MFC programming.
I am using the appWizard and used the recordset type snapshot (Not the Dynaset). I am not sure what DSN means but i have not changed any setting but the book i am using states that on using the snapshot, it should be set as "CRecordset::none".
Wamuti: Any man can be an island, but islands to need water around them!
Edmund Burke: No one could make a greater mistake than he who did nothing because he could do only a little.
|
|
|
|
|
Wamuti wrote: I am not sure what DSN means
Data Source Name.
By opening a recordset with two tables, the recordset is inherently read-only.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
What should i do to make the database writable because i still need the two tables and access both tables?
Wamuti: Any man can be an island, but islands to need water around them!
Edmund Burke: No one could make a greater mistake than he who did nothing because he could do only a little.
|
|
|
|
|
Update each table separately.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Does this mean that i don't include the second table while creating the project? If this is so, what will i do while assigning variable for the table i leave out while in the class wizard in the Member variables? Thanks, i am learning alot
Wamuti: Any man can be an island, but islands to need water around them!
Edmund Burke: No one could make a greater mistake than he who did nothing because he could do only a little.
|
|
|
|
|
Wamuti wrote: Does this mean that i don't include the second table while creating the project?
You'll need multiple recordsets. The one you currently have is for viewing, while updating the tables would require additional recordsets.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Thanks. I am working on it
Wamuti: Any man can be an island, but islands to need water around them!
Edmund Burke: No one could make a greater mistake than he who did nothing because he could do only a little.
|
|
|
|
|
Hi,
How can I run MS-Outlook through code.
Thanx in advance.
|
|
|
|
|
See ShellExecute function.
|
|
|
|
|
Also see CreateProcess api.
|
|
|
|
|
Also see here[^]
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
hi,
say for example,
i have created one database application in vc, and i access the MS access database through that.
so first i create a DSN from control panel\odbc datasources.
obviously i have to access that database through the dsn from vc++.
now if i want to install it on my clients machine, i have to copy the files first, then map the DSN and then run the application.
now what i want is, is there any method to automate the creation of DSN, such that, just by a single click on my application, this DSN gets created.
thanks.
|
|
|
|
|
There are a lot of setup-generation suites that allow you to start scripts during the setup-process.
One of these is NSIS[^], and its free even for commercial use.
There are many others. Just google.
Though I speak with the tongues of men and of angels, and have not money, I am become as a sounding brass, or a tinkling cymbal. George Orwell, "Keep the Aspidistra Flying", Opening words
|
|
|
|
|
thanks for your reply.
i shall verify the tool.
but i wanted some code snippet which can create the dsn if i supply the database filename and dsn name.
|
|
|
|
|
To be honest, I have not the faintest idea what 'dsn' is.
But as you seemed to know how to make one, I showed you a way how to automate that on your client computers.
Though I speak with the tongues of men and of angels, and have not money, I am become as a sounding brass, or a tinkling cymbal. George Orwell, "Keep the Aspidistra Flying", Opening words
|
|
|
|
|
DSN means Data Source Name(I also have known it today!) . I guess it is the name that C++ will use in connection to a driver to a database.
Wamuti: Any man can be an island, but islands to need water around them!
Edmund Burke: No one could make a greater mistake than he who did nothing because he could do only a little.
|
|
|
|
|
And DSN's are just about competely useless in todays environment...
Unless you're actually going for lower performance and a more "generic" approach to database work.
|
|
|
|
|
Dave Kreskowiak wrote: And DSN's are just about competely useless in todays environment... Unless you're actually going for lower performance and a more "generic" approach to database work.
Okay, i am interested! What makes you say so
What is the better alternative?
Wamuti: Any man can be an island, but islands to need water around them!
Edmund Burke: No one could make a greater mistake than he who did nothing because he could do only a little.
|
|
|
|
|
|
|
chandu004 wrote: ...is there any method to automate the creation of DSN...
Yes, but why not just use a DSN-less connection?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
To configure data sources programatically, see
Installing and Configuring the ODBC Software[^]
particularly the sections "Configuring Data Sources" and "Registry Entries for Data Sources".
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|