//删除记录在MDB
BOOL DeleteRecMDB(char *Apsztextplarm)//+ Apsztextplarm 0x004080b0 "10.1" char *
{
SQLHANDLE hStm2;
SQLRETURN bRe;
SQLINTEGER length=0;
SQLCHAR ErrorMdbBuff[128]={0};
SQLINTEGER NativeErrorPtr;
SQLCHAR MessageText [128]={0};
SQLSMALLINT TextLengthPtr;
SQLSMALLINT IsHaveDate;
SQLCHAR SQLselectIp[]={"DELETE mactable WHERE mac=?"};
char ParamBuff[13]={0};
bRe=SQLAllocHandle(SQL_HANDLE_STMT,ConHandle,&hStm2);
if (bRe==SQL_SUCCESS||SQL_SUCCESS_WITH_INFO)
{
bRet=SQLPrepareA(hStm2,SQLselectIp,sizeof(SQLselectIp));
bRet=SQLBindParameter(hStm2,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,ParamBuff,20,&length);
if (bRet!=SQL_SUCCESS)
{
SQLGetDiagRecA(SQL_HANDLE_STMT,hStm2,1,ErrorMdbBuff,&NativeErrorPtr,MessageText,128, &TextLengthPtr);
return FALSE;
}
memcpy(ParamBuff,Apsztextplarm,13);
//+ ParamBuff 0x0012f808 "10.1" char [13]
length=13;
bRet=SQLExecute(hStm2);//执行错误
if (bRet==SQL_SUCCESS)
{
SQLFreeHandle(SQL_HANDLE_STMT,hStm2);
MessageBoxW(0,L"删除成功",0,MB_OK);
return TRUE;
}
else
{
SQLGetDiagRecA(SQL_HANDLE_STMT,hStm2,1,ErrorMdbBuff,&NativeErrorPtr,MessageText,128, &TextLengthPtr);
SQLFreeHandle(SQL_HANDLE_STMT,hStm2);
}
}
else
{
SQLGetDiagRecA(SQL_HANDLE_STMT,hStm2,1,ErrorMdbBuff,&NativeErrorPtr,MessageText,128, &TextLengthPtr);
}
return FALSE;
}
上面的一段代码,怎么看都是正确的,但是总是 运行说是 缺少操作符
把那个语句在sql中运行一遍没有出错,郁闷。。。
又翻翻了sql语法,发现这个delete还有个可选的操作符是FROM
于是这样
SQLCHAR SQLselectIp[]={"DELETE FROM mactable WHERE mac=?"};
这样改了下
运行OK。。。。晕死了
难道ODBC编程中的语句非要写全命令吗??????????
看来是这样,我又重新试了下插入的命令,如果不加INTO的话同样出现错误。。
在此记下。。大家一定要小心哈