|
How do you build the string. I had this kind of problem long ago.
<italic>Work hard and a bit of luck is the key to success.
|
|
|
|
|
I build it using the following psuedo code
CString SQL;
SQL.Format("SELECT <fields> FROM where ...");
open table using ADO class.
In a sense I am building them using the CString method and the Format method for pretty much all of my SQL queries.
Thanks!
|
|
|
|
|
Why do you use Format?
My query was:
CString query;
query="SELECT FROM table there var1='";
query+=var; //var is a variable
query+="'";
I think you should debug it. Hope this helps
<italic>Work hard and a bit of luck is the key to success.
|
|
|
|
|
Format seems like an easier way to accomplish the same task you wrote above. It's possible Format could be causing it but why would it remove hard coded values? The string in question is code like this
SQL.Format("SELECT * FROM AG_ERAS ORDER BY Description");
Albiet, it would be interesting to see what this does if I coded it
SQL = "SELECT * FROM AG_ERAS ORDER BY Description;
but that seems odd. Both do exactly the same thing. Unless NT has problems with CString.Format.
I will test the theory though.
Thanks!
|
|
|
|
|
brchris wrote:
SQL = "SELECT * FROM AG_ERAS ORDER BY Description;
Don`t forget with the closing
SQL = "SELECT * FROM AG_ERAS ORDER BY Description";
<italic>Work hard and a bit of luck is the key to success.
|
|
|
|
|
Changing the SQL.Format(...) to SQL = "..."; had no effect.
|
|
|
|
|
Have you try to debug it. What is the query when you debug it. Can I see the code? Maybe I can help
<italic>Work hard and a bit of luck is the key to success.
|
|
|
|
|
how to convert the password in c++ to ****** when u write the password it change to ******
|
|
|
|
|
Assuming you are using standard console functions, write your own version of "gets" that reads in standard character input, but prints only the character '*'.
|
|
|
|
|
Are you typing into an edit control? If so, just use the ES_PASSWORD style.
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
Whenever I start MSDN Library January 2000 It says: "cant open the file msdn000.col". How can I solve this?I am using WİnXP Pro. Pleasee Help, its urgent!!
B.R.K@4000
|
|
|
|
|
I have the exact same problem with my MSDN library. I cannot fathom what the problem is. The file itself seems to just be an XML file containing links to the .chm files in a tree structure.
To solve my problem I create a seperate .col file and write the contents of the initial file to that. Then I modify the MSDN registry settings and the links in the start-menu etc. to point to the new .col file.
It is a strange thing, and Microsoft don't seem to have offered a fix for it.
See if that works...
|
|
|
|
|
I found this in the Microsoft site "http://support.microsoft.com/default.aspx?scid=kbN-US;195878" But I dont understand how to solve,I didnt find the .dat file in windows\Help directory.Can u send me the msdn000.col file please?
B.R.K@4000
|
|
|
|
|
i have this problem which is the magic square. i need to know how to use the keyboards arrows in the program like he says. and i only can put number "1" and "2" in their right place can't get the equations for other numbers.
the prompt is:
A magic square is an n*n matrix in which each of the integers 1,2,3…n^2 appears exactly once and all column sums, row sums, and diagonal sums are equal. For example, the following is a 5*5 magic square in which all rows, columns and diagonals add upto 65. The magic number can be calculated according to the following equation : Magic = Sum (1..n^2)/n.
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
The following is a procedure for constructing an n*n magic square for any odd integer n. Place 1 in the middle of the top row. Then after integer k has been placed, move up one row and one column to the right to place the next integer k+1, unless one of the following occurs:
• If a move takes you above the top row in the jth column, move to the bottom of the jth column and place k+1 there
• If a move takes you outside to the right of the square in the ith row, place k+1 in the ith row at the left side
• If a move takes you to an already filled square or if you move out of the square at the upper right-hand corner, place k+1 immediately below k.
Write a program to construct n*n magic square for any odd value of n. Your program should provide the facility for the user to input the numbers in any desired position (given it is free). Your program should check the user’s input to verify that it results into a magic square. If this condition is valid you congratulate the user, otherwise you generate the right answer for the user. The user is allowed to play the game as many times as he/she wants, when the user chooses to end the puzzle, your program should tell him his score (number of times he managed to solve the puzzle/number of games).
Input
Max dimensions of the array
The user will then play the game by placing numbers from 1..n^2 on the board
Output
Solution of the puzzle in each time the user chooses to play
User’s percentage
|
|
|
|
|
|
Hello
I am coding an application I do have problem to work with ActiveX COM. I do not know how to convert
System::String * form structure or char and pass to function with argument which is type of System::Object _gc * _gc *.
Does anybody can help???
Tnx
Mirdous
|
|
|
|
|
Hello,
I am new to Mulithreading. In my project I am working with multiple threads. Since I haven’t worked with threads before, I am facing many hurdles. Can any one please guide me or give some hints.
I am explaining in brief about the threads used by me in my project.
1st thread: Filter Thread
Is started at application start up.
Filters each line read from file( Log data is read from file)
I have used CCriticalSection and CSingleLock to lock the data access here as this
LIST is accessed in Display thread.
Adds the data to the LIST from top.
This thread has to run continuously till the application end.
2nd thread:Display Thread
Is started at application start up.
Displays each line filtered by Filter thread
I have used CCriticalSection and CSingleLock to lock the data access here as this
LIST is accessed in Filter thread.
Retrieves the data from the LIST from bottom.
Deletes the data from the list after display.
This thread has to run continuously till the application end.
3rd Thread: Monitor Thread
Is started at application start up.
This thread has to continuously check if new records are added to the file ( Here another external application will add records to the file)
If new records are added, it notifies the Filter Thread, which fetches the added records, filters them and gives to Display thread for displaying.
Since all the above three threads have to run continuously, I had used sleep in all the threads as shown below.
UINT ThreadFunction(LPVOID lp)
{
while(TRUE)
{
// Do the work
}
}
The result of this is that CPU time is 100% used because of the While loop.
Can anyone please suggest an alternative for while loop in the other two threads.
Thanks
Madhavi
Madhavi.
|
|
|
|
|
Try to replace Sleep with WaitForSingleObject .
UINT ThreadFunction(LPVOID lp)
{
m_eventShutdown.CreateEvent();
while(TRUE)
{
DWORD dwRet = WaitForSingleObject(m_eventShutdown.m_hObject,1);
if(dwRet==WAIT_TIMEOUT)
else if(dwRet==WAIT_OBJECT_0)
else
}
}
|
|
|
|
|
Hi,
Thanks for the inputs.
I have a doubt here. If I use WiatForSingleObject inside my While loop , won't that eat my CPU time because While loop is still present?
Madhavi.
|
|
|
|
|
If you set the timeout not equal 0 in WaitForSingleObject , each time your thread calls WaitForSingleObject it passes the control to the system scheduler and it won't eat 100% of your CPU time (it is similar to "pumping messages" in UI threads).
|
|
|
|
|
Hi Andrzej Markowski,
Thanks for your inputs.
I have declared my monitor event as below first.
volatile HANDLE m_MonitorEvent;
m_MonitorEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
ResetEvent(m_MonitorEvent);
//This event is set in the part of code which triggers this event.
SetEvent(m_MonitorEvent);
//Thread function
BOOL b_EventRunning = TRUE;
UINT ThreadProc(LPVOID lpVoid)
{
while(b_EventRunning == TRUE)
{
DWORD dwWaitResult = WaitForSingleObject(m_MonitorEvent, INFINITE);
switch (dwWaitResult)
{
case WAIT_OBJECT_0:
//Do the work
ResetEvent(m_MonitorEvent);
break;
default:
Sleep(1);
break;
}
}//end of while
}//end of ThraedProc
I used INFINITE in WaitForSingleObject because my this thraed has to run till the application is exited.
When this thread is doing the job, the CPU usage is shown as 100%. Please let me know if I'm missing out something here which is making my CPU consume 100%?
Thanks
Madhavi
|
|
|
|
|
My response to your previous post outlined how to implement locking between two threads.
If I understand your architecture you need to have two mutual exclusion locks. By mutual exclusion I don't only mean mutex, although mutex would work fine, but also any other scheme to inpliment mutual exclusion between threads and/or proceses, i.e. mutex, event, semaphore.
You need to coordinate the interaction between the monitor and filter with one object (monitor writes and filter reads) and between the filter and display with another (filter writes and display reads).
The names need to be unique across the entire system because they are kernel objects.
See previous post for implementation details.
Unfortunately I didn't know your naming when I responded to your previous post and we both chose monitor to mean different things. Don't be confused by the names I used. It is a general example.
|
|
|
|
|
Hello,
In my project, I have to check if a particular file is updated and take some action accordingly. Hence I have started a thread which continously checks for file update ashown below:
UINT CheckFileUpdates(LPVOID lp)
{
while(TRUE)
{
CFile::GetStatus(pView->m_LogFilePath,st);
//code for checking the status of file
// take some action when the file is updated
// in this case send the added new line to destination
}
}
This thread should be started at application start up and should run continously till the application is closed.
Since I used While(TRUE) to check continously the status, the application is becoming slowler. Is there any other way to make the thread continously check the status without using while loop.
Can anyone please guide me ?
Thanks
Madhavi
|
|
|
|
|
The easiest fix is to throw in a SleepEx.
Other more "elegant" solutions exist, but for a single file, I havent found them worth the effort.
|
|
|
|
|
You can use a kernel mode synchronization object, i.e. event or mutex. You can also use a semaphore and set the max count to 1 and it will act like a mutex but then why not use a mutex.
Basically what you need to do is acquire the event or mutex in the code updating the file so that no one else can get it. After the object is acquired you start the monitor thread and attenpt to obtain the object in that thread. The monitoring thread will block and not be eligable for scheduling again until the object is acquired which will not happen until the file process thread releases it after making an update to the file. After a short wait, 1 or even 0 microseconds, to insure the file processing thread gives up the remainder of it's timeslice thus insuring that the object is acquired by the waiting file monitoring thread, attempt to obtain the object again in the file processing thread.
The file monitor then wakes up, does what it does and releases the object so that the file processing thread can get it again. Since the file processing thread is queued up to get the object you can try to acquire the object again in the monitoring thread after a short wait so that the monitoring thread gives up the remainder of it's time slice to insure that the file processing thread will obtain the object. In this way the monitoring thread will be blocked and not using CPU cycles until it comes to life when the file processing thread releases the object.
This will work even if the file processing thread is in a different process than the monitoring thread. Note that all the threads have to be executing at the same dispatch priority for this logic to work properly.
The important thing to remember is to relinquish the remainder of the threads time slice before trying to acquire the object again thus insuring that the other thread is able to get the object.
If more than two threads are involved in the logic you will need to use a memory mapped file or additional, uniquely named, kernel mode synchronization object(s) to exchange state information between processes so that they know when to attempt to obtain the object.
You will have to insure that the object name is unique between all processes so it is best to use either the guidgen or uuidgen programs to generate a unique identifier for use in the object's name. I would also include a user friendly prefix or suffix so if you use a spy program to debug the interaction between these threads you will be able to recognize the the object by it's name.
|
|
|
|