我想能够使用4个不同的变量在一个选择语句在c++

I want to be able to use 4 different variables in a select statement in c ++

本文关键字:一个 c++ 语句 选择 变量 能够使 4个      更新时间:2023-10-16

首先,我是c++新手,我正试图学习它来更新我公司的一个遗留应用程序。这是在windows xp和visual c++ 6.0,这不是有趣的…任何方式我有这个选择语句读取我的数据库和搜索一个ResourceID就像我设置我的m_operSet。我想在like语句中使用4个特定的变量。问题是,当我将它设置为一个特定的,它将不会找到任何其他资源,除了我设置它。这是我的代码,这是我的操作。set .cpp和我的bordDlg.cpp.

这是我希望为m_operSet

使用的变量列表

"棒子"

"网卡"

"SIC"

PRS的

基本上我想使用if else语句…如果COB使用COB,如果NIC使用NIC,如果SIC使用SIC,如果PRS使用PRS

<标题> BordDlg.cpp h1> operationSet.cpp h1> div class="answers">

这些函数构建一个如下所示的查询字符串:

SELECT ..whatever.. FROM ..whatever.. WHERE ... 
... and [WORKORDER_SUB_ID] LIKE 'wid'   and [RESOURCE_ID] LIKE 'rid'   and ...  
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~~    ~~~~~~~~~
    ^   build by setSubID               ^ build by setResourceID       ^ by other

你需要构建这个:

... and [WORKORDER_SUB_ID] LIKE 'wid'  
and ( [RESOURCE_ID] LIKE 'rid1' or  [RESOURCE_ID] LIKE 'rid2' ) and ...  

快速修复(不推荐)是:

  m_operSet.setResourceID("COB' or [RESOURCE_ID] LIKE 'NIC' or [RESOURCE_ID] "
                          "LIKE 'SIC' or [RESOURCE_ID] LIKE 'PRS");

  m_strFilter += "and ( [RESOURCE_ID] LIKE '" + resID + "' ) ";

这样的话,你最终会得到一些怪物,在调用者和被调用者的函数中添加了撇号,而没有一致性。


一个更好的方法:

void operationSet::setResourceID(std::vector<std::string> const &resIDs) {
  m_strFilter += "and (";
  for (auto it = resIDs.begin(); it != resIDs.end(); ++it) {
    if (it != resIDs.begin())
      m_strFilter += " or ";
    m_strFilter += " [RESOURCE_ID] LIKE '" + *it + "' ";
  }
  m_strFilter += " ) ";
}
m_operSet.setResourceID({"COB", "NIC", "SIC", "PRS"});
如果你的应用程序框架:
  • CStringstd::string。很可能他们没有给他们写operator +。所以你有两个选择:使用.c_str(),如果他们有CStringc stringsoperator +,或者只使用std::vector<CString>

  • 代码用c++11编写。看看你的编译器是否支持c++11。如果没有,你需要用std::vector<std::string>::const_iterator代替auto

和调用:

std::string res_id_arr[4] = {"COB", "NIC", "SIC", "PRS"};
std::vector<std::string> res_ids(res_id_arr, res_id_arr + 4);
m_operSet.setResourceID(res_ids);
  • 性能问题:许多副本将通过这种方式传递(但对于CString也是如此)。所以你真的需要用c++11编译并使用move语义。在c++11
  • 中移动网络上有资源