现在我就用的ExcuteSQL()直接执行的插入,也是正常的,但请问int型的变量怎样放在SQL里啊?
不是value("variable")吗?
两个问题哈!先谢谢高手们了
12 个解决方案
#1
代码呢?
#2
看看你的源码!
#3
可能字段非空,或插入的代码有问题
#4
try{
if(m_pSet->IsOpen())
m_pSet->Close();
m_pSet->Open();
//加入数据至档案表
if(!m_pSet->CanAppend())//能够添加
{
MessageBox("不能添加用户!");
return;
}
m_pSet->AddNew();
m_pSet->m_Customer_Id = m_cusId;
m_pSet->m_Customer_Name = m_cusName;
m_pSet->m_Customer_Attribute = m_cusAtt;
m_pSet->m_Water_Attribute = m_waterAtt;
m_pSet->m_Customer_Address = m_address;
m_pSet->m_Meter_Spec = m_spe;
m_pSet->m_Meter_Serial = m_ser;
m_pSet->m_Meter_Factory = m_factory;
m_pSet->m_Installer =m_installName;
m_pSet->m_Customer_Quantity = m_cusQua;
m_pSet->m_Customer_Tel = m_tel;
m_pSet->m_Contact_Person = m_connectName;
m_pSet->m_Ins_Charge = m_installCharge;
m_pSet->m_Other_Info = m_otherInfo;
int y=atoi(m_openYear.GetBuffer(10));
int m=atoi(m_openMonth.GetBuffer(10));
int r=atoi(m_openDay.GetBuffer(10));
CTime openDate(y,m,r,0,0,0);
y=atoi(m_checkYear.GetBuffer(10));
m=atoi(m_checkMonth.GetBuffer(10));
r=atoi(m_checkDay.GetBuffer(10));
CTime checkDate(y,m,r,0,0,0);
m_pSet->m_Check_Date=checkDate;
m_pSet->m_Open_Date=openDate;
m_pSet->Update();//跟踪调试进它就到GetYear()出错,也能插入数据到数据库,但是只要数据库中不为空就不会报错
/*
//使用全局数据库连接直接运行SQL 能够运行
CString openDate=m_openYear+'-'+m_openMonth+'-'+m_openDay;
CString checkDate=m_checkYear+'-'+m_checkMonth+'-'+m_checkDay;
CDatabase* pTemDB=&(((CChargeSystemApp*)AfxGetApp())->m_systemDB);
pTemDB->ExecuteSQL("insert into Customer_Info values ('"+m_cusId+"','"+m_cusName+"','"\
+m_cusAtt+"','"+m_waterAtt+"','"+m_address+"','"+m_spe+"','"+m_ser+"','"+m_factory+"','"\
+m_installName+"','"+openDate+"','m_cusQua','"+checkDate+"','"+m_tel+"','"\
+m_connectName+"','"+m_installCharge+"','"+m_otherInfo+"')");
*/
}
catch(CDBException* pe)
{
AfxMessageBox(pe->m_strError);
pe->Delete();
return;
}
if(m_pSet->IsOpen())
m_pSet->Close();
m_pSet->Open();
//加入数据至档案表
if(!m_pSet->CanAppend())//能够添加
{
MessageBox("不能添加用户!");
return;
}
m_pSet->AddNew();
m_pSet->m_Customer_Id = m_cusId;
m_pSet->m_Customer_Name = m_cusName;
m_pSet->m_Customer_Attribute = m_cusAtt;
m_pSet->m_Water_Attribute = m_waterAtt;
m_pSet->m_Customer_Address = m_address;
m_pSet->m_Meter_Spec = m_spe;
m_pSet->m_Meter_Serial = m_ser;
m_pSet->m_Meter_Factory = m_factory;
m_pSet->m_Installer =m_installName;
m_pSet->m_Customer_Quantity = m_cusQua;
m_pSet->m_Customer_Tel = m_tel;
m_pSet->m_Contact_Person = m_connectName;
m_pSet->m_Ins_Charge = m_installCharge;
m_pSet->m_Other_Info = m_otherInfo;
int y=atoi(m_openYear.GetBuffer(10));
int m=atoi(m_openMonth.GetBuffer(10));
int r=atoi(m_openDay.GetBuffer(10));
CTime openDate(y,m,r,0,0,0);
y=atoi(m_checkYear.GetBuffer(10));
m=atoi(m_checkMonth.GetBuffer(10));
r=atoi(m_checkDay.GetBuffer(10));
CTime checkDate(y,m,r,0,0,0);
m_pSet->m_Check_Date=checkDate;
m_pSet->m_Open_Date=openDate;
m_pSet->Update();//跟踪调试进它就到GetYear()出错,也能插入数据到数据库,但是只要数据库中不为空就不会报错
/*
//使用全局数据库连接直接运行SQL 能够运行
CString openDate=m_openYear+'-'+m_openMonth+'-'+m_openDay;
CString checkDate=m_checkYear+'-'+m_checkMonth+'-'+m_checkDay;
CDatabase* pTemDB=&(((CChargeSystemApp*)AfxGetApp())->m_systemDB);
pTemDB->ExecuteSQL("insert into Customer_Info values ('"+m_cusId+"','"+m_cusName+"','"\
+m_cusAtt+"','"+m_waterAtt+"','"+m_address+"','"+m_spe+"','"+m_ser+"','"+m_factory+"','"\
+m_installName+"','"+openDate+"','m_cusQua','"+checkDate+"','"+m_tel+"','"\
+m_connectName+"','"+m_installCharge+"','"+m_otherInfo+"')");
*/
}
catch(CDBException* pe)
{
AfxMessageBox(pe->m_strError);
pe->Delete();
return;
}
#5
麻烦高手们了,我是初学!:)
另外就是使用ExecuteSQL()时 m_cusQua是个int型的
请问在SQL中格式是怎样的,我现在用"m_cusQua" "+m_cusQua+" 'm_cusQua'都试过了不行
另外就是使用ExecuteSQL()时 m_cusQua是个int型的
请问在SQL中格式是怎样的,我现在用"m_cusQua" "+m_cusQua+" 'm_cusQua'都试过了不行
#6
你的CRecordset类是不是从数据库的表派生的?
在cpp文件中手动把变量初始化阶段日期和integer字段加成这样:
比如my_date=0;
m_iMony=0;
大意如此,就是说比如你的表有10个字段,应该有10个变量初始化的语句,但是VC6有bug,可能只产生不到10个,其中的日期或者整形的字段变量没有初始化。
这个问题曾困扰我好久。
在cpp文件中手动把变量初始化阶段日期和integer字段加成这样:
比如my_date=0;
m_iMony=0;
大意如此,就是说比如你的表有10个字段,应该有10个变量初始化的语句,但是VC6有bug,可能只产生不到10个,其中的日期或者整形的字段变量没有初始化。
这个问题曾困扰我好久。
#7
但是我试过如果只见一个时间字段的化又没有问题了
真是奇怪,而且如果是没初始化的化,为什么当数据库中有数据后就不会出现这个错了?
而且我在使用的时候是赋值了的啊!
我跟踪调试进Update()发现执行SQL语句都是没错的,就是好像到释放空间的时候出错的!
另外我的第二个问题能不能说一下啊?我找了好久都找不到executeSQL的参数格式
谢谢了
真是奇怪,而且如果是没初始化的化,为什么当数据库中有数据后就不会出现这个错了?
而且我在使用的时候是赋值了的啊!
我跟踪调试进Update()发现执行SQL语句都是没错的,就是好像到释放空间的时候出错的!
另外我的第二个问题能不能说一下啊?我找了好久都找不到executeSQL的参数格式
谢谢了
#8
先用CString的Format拼好字符串用Exesql吧,看着乱。
#9
着急啊!大家能不能先帮我解决第二个问题啊?
就是exeSQL的sql语句中如何引用C++中int型的变量啊?
CString 型的是'"+string+"' 那int型的呢?
就是exeSQL的sql语句中如何引用C++中int型的变量啊?
CString 型的是'"+string+"' 那int型的呢?
#10
int m_iAAA = 1000;
CString strSQL;
strSQL.Format("select * from my table where age<%d",m_iAAA);
db.ExeSQL(strSQL);
CString strSQL;
strSQL.Format("select * from my table where age<%d",m_iAAA);
db.ExeSQL(strSQL);
#11
谢谢
两个问题都解决了
第一个问题真的是初始的原因
我在构造函数里加了CTime的变量=0就好了
难道执行一次Update()CRecord会自动被创建一次??那样效率岂不是很低??
两个问题都解决了
第一个问题真的是初始的原因
我在构造函数里加了CTime的变量=0就好了
难道执行一次Update()CRecord会自动被创建一次??那样效率岂不是很低??
#12
看你的表中的这个字段设计的时候是什么类型.或者你首先看下,使用查询分析器可不可以实现.然后就使用mfc的ado对象的Execute语句实现就可以了.
#1
代码呢?
#2
看看你的源码!
#3
可能字段非空,或插入的代码有问题
#4
try{
if(m_pSet->IsOpen())
m_pSet->Close();
m_pSet->Open();
//加入数据至档案表
if(!m_pSet->CanAppend())//能够添加
{
MessageBox("不能添加用户!");
return;
}
m_pSet->AddNew();
m_pSet->m_Customer_Id = m_cusId;
m_pSet->m_Customer_Name = m_cusName;
m_pSet->m_Customer_Attribute = m_cusAtt;
m_pSet->m_Water_Attribute = m_waterAtt;
m_pSet->m_Customer_Address = m_address;
m_pSet->m_Meter_Spec = m_spe;
m_pSet->m_Meter_Serial = m_ser;
m_pSet->m_Meter_Factory = m_factory;
m_pSet->m_Installer =m_installName;
m_pSet->m_Customer_Quantity = m_cusQua;
m_pSet->m_Customer_Tel = m_tel;
m_pSet->m_Contact_Person = m_connectName;
m_pSet->m_Ins_Charge = m_installCharge;
m_pSet->m_Other_Info = m_otherInfo;
int y=atoi(m_openYear.GetBuffer(10));
int m=atoi(m_openMonth.GetBuffer(10));
int r=atoi(m_openDay.GetBuffer(10));
CTime openDate(y,m,r,0,0,0);
y=atoi(m_checkYear.GetBuffer(10));
m=atoi(m_checkMonth.GetBuffer(10));
r=atoi(m_checkDay.GetBuffer(10));
CTime checkDate(y,m,r,0,0,0);
m_pSet->m_Check_Date=checkDate;
m_pSet->m_Open_Date=openDate;
m_pSet->Update();//跟踪调试进它就到GetYear()出错,也能插入数据到数据库,但是只要数据库中不为空就不会报错
/*
//使用全局数据库连接直接运行SQL 能够运行
CString openDate=m_openYear+'-'+m_openMonth+'-'+m_openDay;
CString checkDate=m_checkYear+'-'+m_checkMonth+'-'+m_checkDay;
CDatabase* pTemDB=&(((CChargeSystemApp*)AfxGetApp())->m_systemDB);
pTemDB->ExecuteSQL("insert into Customer_Info values ('"+m_cusId+"','"+m_cusName+"','"\
+m_cusAtt+"','"+m_waterAtt+"','"+m_address+"','"+m_spe+"','"+m_ser+"','"+m_factory+"','"\
+m_installName+"','"+openDate+"','m_cusQua','"+checkDate+"','"+m_tel+"','"\
+m_connectName+"','"+m_installCharge+"','"+m_otherInfo+"')");
*/
}
catch(CDBException* pe)
{
AfxMessageBox(pe->m_strError);
pe->Delete();
return;
}
if(m_pSet->IsOpen())
m_pSet->Close();
m_pSet->Open();
//加入数据至档案表
if(!m_pSet->CanAppend())//能够添加
{
MessageBox("不能添加用户!");
return;
}
m_pSet->AddNew();
m_pSet->m_Customer_Id = m_cusId;
m_pSet->m_Customer_Name = m_cusName;
m_pSet->m_Customer_Attribute = m_cusAtt;
m_pSet->m_Water_Attribute = m_waterAtt;
m_pSet->m_Customer_Address = m_address;
m_pSet->m_Meter_Spec = m_spe;
m_pSet->m_Meter_Serial = m_ser;
m_pSet->m_Meter_Factory = m_factory;
m_pSet->m_Installer =m_installName;
m_pSet->m_Customer_Quantity = m_cusQua;
m_pSet->m_Customer_Tel = m_tel;
m_pSet->m_Contact_Person = m_connectName;
m_pSet->m_Ins_Charge = m_installCharge;
m_pSet->m_Other_Info = m_otherInfo;
int y=atoi(m_openYear.GetBuffer(10));
int m=atoi(m_openMonth.GetBuffer(10));
int r=atoi(m_openDay.GetBuffer(10));
CTime openDate(y,m,r,0,0,0);
y=atoi(m_checkYear.GetBuffer(10));
m=atoi(m_checkMonth.GetBuffer(10));
r=atoi(m_checkDay.GetBuffer(10));
CTime checkDate(y,m,r,0,0,0);
m_pSet->m_Check_Date=checkDate;
m_pSet->m_Open_Date=openDate;
m_pSet->Update();//跟踪调试进它就到GetYear()出错,也能插入数据到数据库,但是只要数据库中不为空就不会报错
/*
//使用全局数据库连接直接运行SQL 能够运行
CString openDate=m_openYear+'-'+m_openMonth+'-'+m_openDay;
CString checkDate=m_checkYear+'-'+m_checkMonth+'-'+m_checkDay;
CDatabase* pTemDB=&(((CChargeSystemApp*)AfxGetApp())->m_systemDB);
pTemDB->ExecuteSQL("insert into Customer_Info values ('"+m_cusId+"','"+m_cusName+"','"\
+m_cusAtt+"','"+m_waterAtt+"','"+m_address+"','"+m_spe+"','"+m_ser+"','"+m_factory+"','"\
+m_installName+"','"+openDate+"','m_cusQua','"+checkDate+"','"+m_tel+"','"\
+m_connectName+"','"+m_installCharge+"','"+m_otherInfo+"')");
*/
}
catch(CDBException* pe)
{
AfxMessageBox(pe->m_strError);
pe->Delete();
return;
}
#5
麻烦高手们了,我是初学!:)
另外就是使用ExecuteSQL()时 m_cusQua是个int型的
请问在SQL中格式是怎样的,我现在用"m_cusQua" "+m_cusQua+" 'm_cusQua'都试过了不行
另外就是使用ExecuteSQL()时 m_cusQua是个int型的
请问在SQL中格式是怎样的,我现在用"m_cusQua" "+m_cusQua+" 'm_cusQua'都试过了不行
#6
你的CRecordset类是不是从数据库的表派生的?
在cpp文件中手动把变量初始化阶段日期和integer字段加成这样:
比如my_date=0;
m_iMony=0;
大意如此,就是说比如你的表有10个字段,应该有10个变量初始化的语句,但是VC6有bug,可能只产生不到10个,其中的日期或者整形的字段变量没有初始化。
这个问题曾困扰我好久。
在cpp文件中手动把变量初始化阶段日期和integer字段加成这样:
比如my_date=0;
m_iMony=0;
大意如此,就是说比如你的表有10个字段,应该有10个变量初始化的语句,但是VC6有bug,可能只产生不到10个,其中的日期或者整形的字段变量没有初始化。
这个问题曾困扰我好久。
#7
但是我试过如果只见一个时间字段的化又没有问题了
真是奇怪,而且如果是没初始化的化,为什么当数据库中有数据后就不会出现这个错了?
而且我在使用的时候是赋值了的啊!
我跟踪调试进Update()发现执行SQL语句都是没错的,就是好像到释放空间的时候出错的!
另外我的第二个问题能不能说一下啊?我找了好久都找不到executeSQL的参数格式
谢谢了
真是奇怪,而且如果是没初始化的化,为什么当数据库中有数据后就不会出现这个错了?
而且我在使用的时候是赋值了的啊!
我跟踪调试进Update()发现执行SQL语句都是没错的,就是好像到释放空间的时候出错的!
另外我的第二个问题能不能说一下啊?我找了好久都找不到executeSQL的参数格式
谢谢了
#8
先用CString的Format拼好字符串用Exesql吧,看着乱。
#9
着急啊!大家能不能先帮我解决第二个问题啊?
就是exeSQL的sql语句中如何引用C++中int型的变量啊?
CString 型的是'"+string+"' 那int型的呢?
就是exeSQL的sql语句中如何引用C++中int型的变量啊?
CString 型的是'"+string+"' 那int型的呢?
#10
int m_iAAA = 1000;
CString strSQL;
strSQL.Format("select * from my table where age<%d",m_iAAA);
db.ExeSQL(strSQL);
CString strSQL;
strSQL.Format("select * from my table where age<%d",m_iAAA);
db.ExeSQL(strSQL);
#11
谢谢
两个问题都解决了
第一个问题真的是初始的原因
我在构造函数里加了CTime的变量=0就好了
难道执行一次Update()CRecord会自动被创建一次??那样效率岂不是很低??
两个问题都解决了
第一个问题真的是初始的原因
我在构造函数里加了CTime的变量=0就好了
难道执行一次Update()CRecord会自动被创建一次??那样效率岂不是很低??
#12
看你的表中的这个字段设计的时候是什么类型.或者你首先看下,使用查询分析器可不可以实现.然后就使用mfc的ado对象的Execute语句实现就可以了.