首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

!编译通过 但是一运行就出错

2013-01-28 
求助!!编译通过 但是一运行就出错// QIANDlg.cpp : 实现文件//#include stdafx.h#include 超市销售管理

求助!!编译通过 但是一运行就出错
// QIANDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "超市销售管理系统.h"
#include "QIANDlg.h"
#include "afxdialogex.h"
#include "afxdb.h"
#include "globehead.h"
#include "externglobe.h"






// CQIANDlg 对话框

IMPLEMENT_DYNAMIC(CQIANDlg, CDialogEx)

CQIANDlg::CQIANDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CQIANDlg::IDD, pParent)
, m_ID(_T(""))                        //商品编号
, m_name(_T(""))                      //商品名称
, m_price(0)                          //商品价格
, m_gonghuo(_T(""))                   //供货编号
, m_kucun(_T(""))                     //库存数量
, m_amount(1)                         //购买数量
, m_total(0)                          //总价
{

}

CQIANDlg::~CQIANDlg()
{
}

void CQIANDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_ID);
DDX_Text(pDX, IDC_EDIT2, m_name);
DDX_Text(pDX, IDC_EDIT3, m_price);
DDX_Text(pDX, IDC_EDIT4, m_gonghuo);
DDX_Text(pDX, IDC_EDIT5, m_kucun);
DDX_Text(pDX, IDC_EDIT6, m_amount);
DDX_Text(pDX, IDC_EDIT7, m_total);
DDX_Control(pDX, IDC_LIST1, m_list);
}


BEGIN_MESSAGE_MAP(CQIANDlg, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON1, &CQIANDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CQIANDlg::OnBnClickedButton2)
//ON_BN_CLICKED(IDC_BUTTON3, &CQIANDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CQIANDlg::OnBnClickedButton4)
//ON_NOTIFY(NM_CLICK, IDC_LIST1, &CQIANDlg::OnClickListProgramLangList)
END_MESSAGE_MAP()


// CQIANDlg 消息处理程序


void CQIANDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
/*TRY{}
CATCH(CDBException,ex)
{
AfxMessageBox(ex->m_strError);
AfxMessageBox(ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox(_T("memory exception"));
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox(szError);
}
END_CATCH*/

UpdateData(TRUE);
CString a=m_ID;
CString sql1 = _T("USE 超市管理系统 SELECT a.商品名称,a.商品单价,b.库存数量,b.供货商编号  FROM 销售表 a,商品信息表 b WHERE a.商品编号 =");      //要执行的SQL语句
CString sql2=a;
CString sql3=_T("AND b.商品编号=");
CString sql = sql1+sql2+sql3+sql2;
CString psd1;                                  //存放查询结果


CString psd2;
CString psd3;
CString psd4;
TRY
{
rs.Open(AFX_DB_USE_DEFAULT_TYPE,sql);      //打开查询记录  
rs.GetFieldValue(_T("商品名称"),psd1);       //得到数据    
rs.GetFieldValue(_T("商品单价"),psd4);;
    rs.GetFieldValue(_T("库存数量"),psd3);
rs.GetFieldValue(_T("供货商编号"),psd2);
rs.Close();
m_name=psd1;
m_gonghuo=psd2;
m_kucun=psd3;
CString   str=psd4;   
        float  fi;   
        fi= _tstof(str);                                      //转换
m_price=fi;


}

m_list.InsertItem(0,m_ID);
m_list.SetItemText(0,1,m_name);

    CString str;
    str.Format(_T("%d"),m_amount);
m_list.SetItemText(0,2,str);

CString str2;
    str2.Format(_T("%f"),m_price);
m_list.SetItemText(0,3,str2);
UpdateData(false);
CATCH(CDBException,ex)
{
AfxMessageBox(ex->m_strError);
AfxMessageBox(ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox(_T("memory exception"));
}
END_CATCH 

}
DEBUG下结果
!编译通过 但是一运行就出错
RELEASE下结果
!编译通过 但是一运行就出错
sql sever下执行语句
!编译通过 但是一运行就出错 sql
[解决办法]
rs.Open(AFX_DB_USE_DEFAULT_TYPE,sql);      //打开查询记录  
rs.GetFieldValue(_T("商品名称"),psd1);       //得到数据    
rs.GetFieldValue(_T("商品单价"),psd4);;
rs.GetFieldValue(_T("库存数量"),psd3);
rs.GetFieldValue(_T("供货商编号"),psd2);
这几个函数,在debug下一个一个的执行看是哪个出错了
[解决办法]
看一下 调用堆栈的窗口
[解决办法]
BEGIN_MESSAGE_MAP(CQIANDlg, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON1, &CQIANDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CQIANDlg::OnBnClickedButton2)
//ON_BN_CLICKED(IDC_BUTTON3, &CQIANDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CQIANDlg::OnBnClickedButton4)
//ON_NOTIFY(NM_CLICK, IDC_LIST1, &CQIANDlg::OnClickListProgramLangList)
END_MESSAGE_MAP()
这里有问题吧。ON_BN_CLICKED 是宏。它与 ON_COMMAND 宏 一样。

ON_BN_CLICKED(IDC_BUTTON_WAIST_ACTION, OnButtonWaistAction)
括号里第一个参数,是资源里的ID,(是鼠标腰部那个钮),
第二个参数是当 腰部那个钮 按动时调用的函数名。
我记得第二个参数有问题呀!
 ON_BN_CLICKED(IDC_BUTTON1, OnBnClicked)这样写才对吧。呵呵。
[解决办法]
CString sql1 = _T("USE 超市管理系统 SELECT a.商品名称,a.商品单价,b.库存数量,b.供货商编号  FROM 销售表 a,商品信息表 b WHERE a.商品编号 =");      //要执行的SQL语句

USE 超市管理系统 
这个没有必要。这样一来,你一次执行了两条指令。
你在连接数据库的时候就应该指定数据库名字了。

热点排行