这是用VS2019 MFC写的一个MySQL数据库程序,C++语言写的
在这个函数中,实现教师开设课程操作,代码如下,但是无论开设什么都是失败,请问该如何改?
代码:
void TCHON::OnBnClickedButtonKaishe()
{
// TODO: 在此添加控件通知处理程序代码
USES_CONVERSION;
kehao.GetWindowTextW(strkehao);
keming.GetWindowTextW(strkeming);
xuefen.GetWindowTextW(strxuefen);
//if(!strkehao)MessageBox(TEXT("开设课程失败!"));
double flxuefen = atof(T2A(strxuefen.GetBuffer(0)));
CString query;
query.Format(_T("开设课程('%s','%s',%f,'%s');"), strkehao,strkeming,flxuefen,strnum);
char* charquery = T2A(query.GetBuffer(0));
query.ReleaseBuffer();
if (mysql_query(&m_sqlCon, charquery))//如果函数执行成功则返回0,不成功就进入if语句
{
CString error;
error = mysql_sqlstate(&m_sqlCon);
if (error == "09000")
{
CString errormsg;
errormsg = mysql_error(&m_sqlCon);
MessageBox(errormsg);
}
else
MessageBox(TEXT("开设课程失败!"));
return;
}
query.Format(_T("select * from 课程 where 课号 in (select 课号 from 教授 natural join 教师 where 教师编号=%s);"), strnum);
charquery = T2A(query.GetBuffer(0));
query.ReleaseBuffer();
mysql_query(&m_sqlCon, charquery);
MYSQL_RES* m_res = mysql_store_result(&m_sqlCon);
if (mysql_num_rows(m_res) != 0)
{
UpdateList(m_res);
}
else MessageBox(L"未开设课程!");
}
失败截图:
表的结构:
看情况应该是你的sql有问题,建议先在数据库中执行无误后,再放入代码调试。
本次回答借鉴GPT
根据代码和您的描述,开设课程失败的原因可能有:
query.Format(_T("开设课程('%s','%s',%f,'%s');"), strkehao,strkeming,strxuefen,strnum);
if (mysql_query(&m_sqlCon, charquery)) {
// SQL执行失败,作出提示
}
MYSQL_RES* m_res = mysql_store_result(&m_sqlCon);
if (!m_res || mysql_num_rows(m_res) == 0) {
// 查无数据,作出提示
}
MYSQL* m_sqlCon = mysql_init(NULL);
if (!mysql_real_connect(m_sqlCon, "host", "user", "password", "db_name", 3306, NULL, 0)) {
// 连接失败,作出提示
}
首先,需要确定开设课程失败的具体原因。可以在if语句中加入一些调试信息,比如输出SQL语句和错误信息,以便更好地定位问题。例如:
if (mysql_query(&m_sqlCon, charquery))
{
CString error;
error = mysql_sqlstate(&m_sqlCon);
if (error == "09000")
{
CString errormsg;
errormsg = mysql_error(&m_sqlCon);
CString debugmsg;
debugmsg.Format(_T("开设课程失败:SQL语句:%s,错误信息:%s"), query, errormsg);
MessageBox(debugmsg);
}
else
{
CString debugmsg;
debugmsg.Format(_T("开设课程失败:SQL语句:%s"), query);
MessageBox(debugmsg);
}
return;
}
然后,如果发现SQL语句有问题,可以尝试修改SQL语句。根据MySQL的文档,开设课程应该使用INSERT语句,而不是使用名为“开设课程”的函数。应该将第10行的代码修改为:
Copy
query.Format(_T("insert into 课程(课号, 课名, 学分) values('%s','%s',%f);"), strkehao,strkeming,flxuefen);
这样就可以将课程信息插入到课程表中了。另外,需要确认在此之前已经成功连接到了MySQL数据库,并且已经选择了正确的数据库。最后,还需要注意输入的课号、课名和学分是否符合数据库中定义的数据类型和约束,否则也会导致插入失败。
字符集转换