我要取某个字段的最大值,能直接用ADO,SQL写为“select max(menu_id) from sub_menu”?

时间:2022-06-01 20:03:18
我要取sub_menu表中,字段menu_id的最大值,
用ADO写了以下代码,
SQL语句:select max(menu_id) from sub_menu,在ACCESS中可以正常使用,
但是在ADO中,提示如下错误“项目在所需的名称或序数中未被发现”
是为什么呢?
还是,ADO不支持这样的函数操作?

m_Recordset.CreateInstance (__uuidof(Recordset));
lcs_strsql.Format("select max(menu_id) from sub_menu");

m_OutPutCount = 1;
strcpy(m_sOutPutParams[0].Param_Name,"max(menu_id)");
m_sOutPutParams[0].Param_Length = 30;

try{
        m_Recordset->Open(
                     (_bstr_t)lcs_strsql,
                     m_Connection.GetInterfacePtr(),
                     adOpenDynamic,
                     adLockOptimistic,
                     adCmdText);

//取查询结果
iRowId = 0;
while (!m_Recordset->adoEOF ) {
  iRowId++;
  for(iFieldId=0;iFieldId<m_OutPutCount;iFieldId++){
    pField = m_Recordset->Fields->Item [m_sOutPutParams[iFieldId].Param_Name];

    //取字段
    if(pField->Value.vt==VT_NULL)
      lcs_field ="";
    else {
      lcs_field = (char *)_bstr_t(pField->Value );
      lcs_field.TrimLeft();
               lcs_field.TrimRight();
    }
  }
  m_Recordset->MoveNext ();
        }
}

catch(_com_error &Error_code){
_bstr_t bstrSource(Error_code.Source());
_bstr_t bstrDescrition(Error_code.Description ());
AfxMessageBox("数据处理失败!");
return;
}

7 个解决方案

#1


strcpy(m_sOutPutParams[0].Param_Name,"max(menu_id)");

此句改为:
strcpy(m_sOutPutParams[0].Param_Name,"menu_id");

#2


不应该呀,这只是一条sql语句呀

这样试一下
lcs_strsql.Format("select max(menu_id) maxid from sub_menu");

m_OutPutCount = 1;
strcpy(m_sOutPutParams[0].Param_Name,"maxid");

#3


都试了,
改为:
strcpy(m_sOutPutParams[0].Param_Name,"menu_id");
还是同样错误

若改为
lcs_strsql.Format("select max(menu_id) maxid from sub_menu");

m_OutPutCount = 1;
strcpy(m_sOutPutParams[0].Param_Name,"maxid");

则错误如下:
{"语法错误 (操作符丢失) 在查询表达式 'max(menu_id) maxid' 中。" (1)}

#4


select max(columnName) From table

cloumnName为字段名

将Format()句改为:
lcs_strsql.Format("select max('%s') from sub_menu",m_sOutPutParams[0].Param_Name);

你的m_sOutPutParams[0].Param_Name 何解?

#5


改为:
m_OutPutCount = 1;
strcpy(m_sOutPutParams[0].Param_Name,"menu_id");
m_sOutPutParams[0].Param_Length = 30;

lcs_strsql.Format("select max(%s) from sub_menu",m_sOutPutParams[0].Param_Name);

还是一样的错,如下:
项目在所需的名称或序数中未被发现。

#6


顶,一下

#7


m_sOutPutParams[0].Param_Name  这个是字段名吗

试一下这样:
lcs_strsql.Format("select max(menu_id) from sub_menu");

#1


strcpy(m_sOutPutParams[0].Param_Name,"max(menu_id)");

此句改为:
strcpy(m_sOutPutParams[0].Param_Name,"menu_id");

#2


不应该呀,这只是一条sql语句呀

这样试一下
lcs_strsql.Format("select max(menu_id) maxid from sub_menu");

m_OutPutCount = 1;
strcpy(m_sOutPutParams[0].Param_Name,"maxid");

#3


都试了,
改为:
strcpy(m_sOutPutParams[0].Param_Name,"menu_id");
还是同样错误

若改为
lcs_strsql.Format("select max(menu_id) maxid from sub_menu");

m_OutPutCount = 1;
strcpy(m_sOutPutParams[0].Param_Name,"maxid");

则错误如下:
{"语法错误 (操作符丢失) 在查询表达式 'max(menu_id) maxid' 中。" (1)}

#4


select max(columnName) From table

cloumnName为字段名

将Format()句改为:
lcs_strsql.Format("select max('%s') from sub_menu",m_sOutPutParams[0].Param_Name);

你的m_sOutPutParams[0].Param_Name 何解?

#5


改为:
m_OutPutCount = 1;
strcpy(m_sOutPutParams[0].Param_Name,"menu_id");
m_sOutPutParams[0].Param_Length = 30;

lcs_strsql.Format("select max(%s) from sub_menu",m_sOutPutParams[0].Param_Name);

还是一样的错,如下:
项目在所需的名称或序数中未被发现。

#6


顶,一下

#7


m_sOutPutParams[0].Param_Name  这个是字段名吗

试一下这样:
lcs_strsql.Format("select max(menu_id) from sub_menu");