|
Thanks for the advice, I'll bear it in mind for the future. Unfortunately, I've inherited this MDB structure based on an old Fortran record structure so changing the names is not so easy!
|
|
|
|
|
Can you see anything wrong with this?
CDaoDatabase* pDB = static_cast<CMainFrame *>(AfxGetMainWnd())->GetDatabase();
CMyRecords Records(pDB);
CString sSQL = "SELECT * FROM Components LEFT JOIN Nozzles ON
Components.[Component Key] = Nozzles.[Nozzle Key] WHERE
(((Components.[Database Number])=15) AND ((Nozzles.[Nozzle Key]) Is Null))";
try
{
Records.Open(dbOpenDynaset, sSQL, 0);
if (Records.IsBOF() || Records.IsEOF())
{
return;
}
Records.MoveFirst();
while (!Records.IsEOF())
{
if (Records.CanUpdate())
{
Records.Delete();
}
Records.MoveNext();
}
Records.Close();
}
catch(CDaoException *e)
{
e->ReportError();
e->Delete();
if (Records.IsOpen())
{
Records.Close();
}
}
I can see it gets the right records, it doesn't give anY errors or exceptions, but it also doesn't delete the records!
Must be missing something...
|
|
|
|
|
Without going into the code the first point I would make is that deleting a record while inside a collection changes the collection. So you move to the first record and delete it, you collection hanged and where am I supposed to move from.
Try starting from the last record in the collection, delete that and move forward 1 record, or go to the last record in the collection. Basically change the way your loop works.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
DaoRecordsets don't work like that - presumably for the very reason you describe! 'Delete' simply marks a record as deleted and doesn't alter the record order. this also allows you to rollback changes if necessary.
It's all working now though, so thanks for your input!
|
|
|
|
|
The MessageBoard fairies strike again!
If I change the SQL to the much simpler:
"SELECT * FROM Components WHERE (Components.[Database Number])=15 AND Components.[Component Key] NOT IN (SELECT [Nozzle Key] FROM Nozzles)"
it all works.
|
|
|
|
|
Hi!
I've to read each name in a field from a table and do some string mangling and update each name into another field. I've to query the database from C++. I'm using SQLite. I used the following code to do this:
SQLManager SQLdb;
SQLdb.init("../../data/config/playerDatabase.db");
array<stringc> ctyLst = SQLdb.Query("Select DISTINCT Team from Test ORDER BY Team DESC");
array<stringc> playerLst;
core::stringc queryStr,updateTest;
for(u32 i = 0; i<ctyLst.size();i++)
{
queryStr = L"Select Name From Test WHERE Team ='";
queryStr += ctyLst[i].trim();
queryStr += L"'";
array<stringc> playerTmpLst;
playerTmpLst = SQLdb.Query(queryStr);
for(u32 j = 0; j < playerTmpLst.size(); j++)
{
playerLst.push_back(playerTmpLst[j].c_str());
}
}
I'm doing string mangiling an updating as follows:
for(int j = 0; j<playerLst.size(); j++)
{
updateTest = L"UPDATE Test SET MangledName ='";
unsigned int t = time(NULL);
srand(t);
playerLst[j] = playerLst[j].trim();
int index = playerLst[j].findLast(' ');
stringc subStr1 = playerLst[j].subString(0,index);
stringc subStr2 = playerLst[j].subString(index+1,15);
subStr1.append(" ",1);
subStr1.append(swapChars(subStr2).c_str(),subStr2.size());
updateTest += subStr1.trim();
updateTest += L"'";
SQLdb.Query(updateTest);
Sleep(10);
cout<<subStr1.c_str()<<endl;
t++;
}
While printing the result to a file, it prints correctly. But only the last name in the array is updated to all the records in the field. How to Select a single name at a time and do the string mangling and update the name to the database?
|
|
|
|
|
One normally uses a WHERE clause to specify which record(s) get updated.
Remarks:
- what is the purpose of Sleep(10)?
- what would happen if a player's name contained a quote?
- why don't you use SqlParameters instead of string concatenation?
|
|
|
|
|
plzz give me the code for inserting the data in the database through msAccess DataBase.
|
|
|
|
|
No problem[^].
You can skip all the CodeProject articles, since I trust you've read them before.
|
|
|
|
|
On a side note... I couldn't remember a particular .net class this week so I went on a Binge and found not only a CP article, but one of mine!
|
|
|
|
|
and was it satisfactory?
|
|
|
|
|
Ohhh yeahhh. Most times I need to use the particular class I simply pull up that article anyway. This time I didn't because I was at work. (I try not to access CP from my new job.)
|
|
|
|
|
I hate when that happens.
|
|
|
|
|
Pay no attention to Luc. Try this link instead[^].
CQ de W5ALT
Walt Fair, Jr., P. E.
Comport Computing
Specializing in Technical Engineering Software
|
|
|
|
|
further reading is available here[^].
|
|
|
|
|
Hmmmm, cheap competitor in town, huh.
|
|
|
|
|
what do you mean?
Is Google expensive and Bing cheap?
If yes send codez to proove it!
I bug
|
|
|
|
|
Troll
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
You guys got it all wrong.
Except maybe for Mycroft Holmes.
He wants codez for inserting the data in the database through the database
No codez needed for that. Just quick fingers
I bug
|
|
|
|
|
Hi,
I'm a freelance developer, I have a database application i developed for a client. I have deployed the database on my client server.
My client uses the builtin\administrator to login into the database server.
My Question is I will like to protect my database from the builtin\administrator from accessing it, because i don't want them to access it from the backend. am a novice to sql server security. Note: its on Sql Server 2000. How do i protect my Database?
|
|
|
|
|
saltcode wrote: client uses the builtin\administrator
Start by changing that (and its password). Give the client his own username, then apply whatever security you choose.
Ideally you'd be using integrated security.
|
|
|
|
|
|
i have a file_no field in my accounting_payment table and i want to run a query to see the frequency of every file, means how many times every file is listed in the table?
|
|
|
|
|
use the count() and group by operators
Select count(*),file_no from accounting_payment group by file_no
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
But I also want to assign the Top number#? For example
Select TOP 5 count(*), file_no from accounting_payment
But to show the TOP (frequency) not the Top (position)
Similarly I want to do it for the amount, for example:
Select TOP 5 max(amount_paid), file_no from accounting_payment
|
|
|
|