|
Does m_MedListControl have a non-null value?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
Yes, what I did was in the 2nd dialog there will be a list view control already populated with the database data when a button is clicked in the 1st dialog. when I click one of the row in the 2nd dialog list view control, 3rd dialog will pop up where I'll enter some data which will be updated to the database and then I delete all the items in the 2nd dialog list view controlled and tries to repopulate again with the updated data in the database.
|
|
|
|
|
No, that is what you think will happen. The only way to be certain is by using the debugger to check exactly what bad address is causing the exception. And no one hare can do that for you.
|
|
|
|
|
Yes I did that and still I couldn't fix it...
Thanks anyway. I'll try harder.
|
|
|
|
|
Member 14575556 wrote: void MedicationDlg::OnBnClickedSaveButtonMedicationDlg(){
..........
..........
MedicineObj.ResetListControl(); /
MedicineObj.DatabaseReload();
OnOK();
}
What is this MedicineObj? Where and how is it defined?
|
|
|
|
|
MedicineDlg MedicineObj;
It is an object for MedicineDlg.
void MedicationDlg::OnBnClickedSaveButtonMedicationDlg()
{
CString m_MedStatusInput, m_MedCommentInput, m_MedDoseInput, m_MedRouteInput, SqlQuery;
m_MedDose_MedicationDlg.GetLBText(m_MedDose_MedicationDlg.GetCurSel(), m_MedDoseInput);
m_MedRoute_MedicationDlg.GetLBText(m_MedRoute_MedicationDlg.GetCurSel(), m_MedRouteInput);
UpdateData(TRUE);
m_MedStatusInput = m_MedStatus_MedicationDlg;
m_MedCommentInput = m_MedComments_MedicationDlg;
CDatabase dbobj;
dbobj.OpenEx(_T("DSN=Demo;UID=root;PWD=root"));
CRecordset recset(&dbobj);
SqlQuery.Format(_T("UPDATE dbdemo.medicine SET Route = '%s', Dose = '%s',Status = '%s',Comment = '%s' WHERE NDC ='%s'"), m_MedRouteInput, m_MedDoseInput, m_MedStatusInput, m_MedCommentInput, m_MedDSNInput);
dbobj.ExecuteSQL(SqlQuery); MedicineDlg MedicineObj;
MedicineObj.ResetListControl(); MedicineObj.DatabaseReload();
OnOK();
}
|
|
|
|
|
Member 14575556 wrote: MedicineDlg MedicineObj;
MedicineObj.ResetListControl();
It is some "empty", i.e. not created/initialized object that has nothing to do with a really displayed dialog!
|
|
|
|
|
I have included the header file of MedicineDlg (MedicineDlg.h)
|
|
|
|
|
It has nothing to do with your problem. See the answer of David below.
|
|
|
|
|
Member 14575556 wrote: MedicineDlg MedicineObj;
MedicineObj.ResetListControl();
MedicineObj.DatabaseReload(); This will not work as it is not the same instance of MedicineDlg that was created in OnBnClickedSelectButton() .
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
Please give some direction how to solves this problem.
Thank you.
|
|
|
|
|
You should redesign your project architecture to not directly access one dialog controls from another one.
|
|
|
|
|
I would be inclined to change how the data was presented. What you have:
List of data
+---Details of an item in the list
+---Editable view of that item seems a bit convoluted. I just see too many places for errors, and possibly maintainability.
At a minimum, I would combine the last two items. That would go a long way toward solving your immediate problem.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
Hi
I have a Data Type of BYTE defined as
typedef unsigned char BYTE; when I want to define 2 bytes I do BYTE itshort[2];
if I want a switch value to compare for 2 bytes I do switch ((short) itshort[0]) seems like it will only do the compare for the first byte any way to make it two bytes
Thanks
|
|
|
|
|
The switch argument needs to be a "simple" type, so you should glue your two bytes together into a 16-bit value. You'll need to do something similar with your case values too.
Something like
unsigned short testval = itshort[0] | (itshort[1] << 8);
switch (testval)
{
case value1[0] | (value1[1] << 8):
....
It might be easier to just use unsigned short all round.
Cheers,
Peter
Software rusts. Simon Stephenson, ca 1994. So does this signature. me, 2012
|
|
|
|
|
|
You could use a union To get the 16 bit value.
union _bands
{
BYTE bValues[2];
SHORT sValue;
};
You can then use sValue to refer to the 16 bit number.
|
|
|
|
|
|
(short) is just a type cast. All it does is tell the compiler to interpret the value as a different type. The value in this case is just the single character itshort[0]. What you intended to do was something dofferent: you wanted the computer to reinterpret the memory starting at itshort[0]. But there is no way for the compiler to understand that is what you want.
As others pointed out, there are ways to achieve this. However, why don't you simple use short or unsigned short?
typedef short itshort; If you don't trust the compiler to use 16 bit values for short, you can also use size-specific types. E. g. Microsoft offers __int8, __int16, etc. for these purposes. See __int8, __int16, __int32, __int64 | Microsoft Docs[^]
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
I thought casting it to a short would force the compiler to do a 2 byte compare
thanks
|
|
|
|
|
The C standard fixed size integer units is called stdint.h to use it is as simple as
#include <stdint.h>
<stdint.h>[^]
Doesn't matter what platform you write your code on your signed and unsigned ints are the right size and it is the industry standard way to deal with it rather than your own macros of typedefs.
In vino veritas
|
|
|
|
|
The code I write here on Windows I am hoping to execute on Z/OS as well using XL C\C++ compiler I have ensure that int, short, and long sizes are consistent I will regardless have a number #ifdef zos and #ifdef MSVC for the I/O reads etc besides that I have to do memory moves in big endian as its a z/os mainframe file I am processing
Thanks
|
|
|
|
|
Again you are reinventing the wheel the traditional way to deal with Endian is via the standard ints and you simply do eandian aware reads from files. The output from the reads being big_int16_t or big_uint16_t which are big endian versions.
In vino veritas
|
|
|
|
|
Hello every one please i have a problem when i try to assign the contain of struct array to another as in the code
bool delet(){
Int f=0;
Cout<<"enter name:";
char del[20];
Con.getline(del,20);
for(int i=0; i<=index; ++i){
If(phone[i].name==del){
for(int j=i; j<=index; ++j){
Phone[j].num=Phone[j+1].num;
Phone[j].TphoneN=phone[j+1].TphoneN;
Phone[j].name=Phone[j+1].name;
}
f=1;
}
}
}
<\pre>
|
|
|
|
|
You cannot use the == operator to compare arrays. You need to use strcmp or similar. You
modified 19-Sep-19 2:48am.
|
|
|
|