SQLサーバーでワイルドカードを使うには

解決


たく  2006-12-19 21:38:06  No: 64024  IP: 192.*.*.*

お世話になります。
SQLサーバーにODBCを使ってVC++から接続しようとしています。
パラメータを使っているんですが、FileNameに完全な名前(例えばTEST1)をいれると、正常にオープンできます。
頭がTESTのデータをすべて検索するには、どのようにすれば良いでしょうか?
試しにFileName="like " + FileName + "%"にしてみてもダメでした。
よろしく、お願い致します。

  CDataBase m_Db;
  BOOL dbRet;
  BOOL Ret = TRUE;

  m_Db.m_strCodeParam = FileName;
  m_Db.m_strFilter = _T("NPDsheet_no = ?");

  try
  {
    dbRet = m_Db.Open();
  }
  catch( CDBException* e)
  {
    e->Delete();

    AfxMessageBox("データベース接続に失敗しました。", MB_OK);
    return;
  }

編集 削除
dairygoods  2006-12-20 11:37:13  No: 64025  IP: 192.*.*.*

> m_Db.m_strCodeParam = FileName;
> m_Db.m_strFilter = _T("NPDsheet_no = ?");

これで、? のところに 'like ファイル名%' というのが
当てはめられても期待通りには動かないと思いますが。

編集 削除
たく  2006-12-20 13:58:49  No: 64026  IP: 192.*.*.*

dairygoodsさま
ありがとうございます。

パラメータを使わずに、open後に目的のSQL文を作って実行しないと
ダメでしょうか?
CRecordsetのメンバー関数あたりから調べ直して見ます。

編集 削除
dairygoods  2006-12-20 14:42:13  No: 64027  IP: 192.*.*.*

> m_Db.m_strFilter = _T("NPDsheet_no = ?");

= で比較したいときは、こうするのだから、
like で比較したいなら、

m_Db.m_strFilter = _T("NPDsheet_no like ?");

では。

編集 削除
Youhei  2006-12-20 19:02:42  No: 64028  IP: 192.*.*.*

m_Db.m_strCodeParam = FileName;
m_Db.m_strFilter = _T("NPDsheet_no like ? + '%'");

SQLServer相手なら上記でいけると思う。
# CDataBaseの中で余計なことしてないって前提ね。

編集 削除
たく  2006-12-20 21:11:25  No: 64029  IP: 192.*.*.*

dairygoodsさま

=をlikeにして、%を付加して無事にできました。

いつも適切なご指導、有難うございます。

編集 削除