- PR -

不特定条件でのデータ抽出

1
投稿者投稿内容
AIYON
会議室デビュー日: 2008/10/21
投稿数: 5
お住まい・勤務地: 新宿区西新宿
投稿日時: 2008-10-21 16:43
■使用環境■
開発ソフト:VB6.0
データベース:SQLServer2005

■状況と質問■
テーブル:TB会員
|会員番号|会員名|
|11111111|たなか|
|22222222|さとう|
|33333333|あべ |
|44444444|かとう|
|55555555|いとう|
|66666666|まりあ|
|77777777|とみこ|

画面:明細型
|22222222▼|さとう| ▼をクリックするとTB会員から会員番号を選択できる
|77777777▼|とみこ|
| ▼| |

ストアド:(簡略化しています)
@会員番号 as long
SELECT * FROM TB会員
WHERE 会員番号 = @会員番号

TB会員から、任意で選択した会員番号に対応する情報を帳票出力したいと思っています。
ストアドを使用して処理をしようとしているのですが・・・
その際にWhere句に当たる部分のパラメータに会員番号を指定しています。
この会員番号が1つではなく、不特定多数になる場合の処理方法について悩んでいます。

また、当方の事情によりワークテーブルを使用したり、nvarchar(MAX)にして[,]区切りでパラメータを渡す等のことができません。
なおかつ、返り値をレコードセット1回で返したいと思っています。
他のストアドファンクションを呼んだりすることは可能です。

こんなわがままに対応できる処理方法はあるのでしょうか?
ふるふる
会議室デビュー日: 2008/02/05
投稿数: 19
投稿日時: 2008-10-22 12:46
ADO.ConnectionのExecuteでストアドを実行していると思いますが、
実行させるSQLを複数指定もできます。それぞれのSQLは;で区切られます。
実行に成功すると、ストアドから返されるレコードセットは複数になります。
レコードセットにはNextRecordsetというメソッドがあり、複数のレコードセットが格納されていると、次のレコードセットにカーソルを動かすことができます。

なので今のストアドを指定したい会員番号の数だけ呼び出せばよさそうです。

単一のレコードセットにしたいなら、ローカルにレコードセットを作成しておいて、Addnewで取り込めばいいでしょう。
Dim lclRec As New ADODB.Recordset
lclRec.CursorLocation = adUseClient
lclRec.Open "Select 会員名 from TB会員 Where 1=2",
lclRec.Addnew
lclRec.Fields("会員名") = getRec.Fields("会員名")
getRec.NextRecordset
lclRec.Addnew
lclRec.Fields("会員名") = getRec.Fields("会員名")
AIYON
会議室デビュー日: 2008/10/21
投稿数: 5
お住まい・勤務地: 新宿区西新宿
投稿日時: 2008-10-22 13:58
ご返答ありがとうございます。
複数回呼んで、それをRSに保持していけばいいのですね。
全て1回で済ませようとしていたのがいけなかったみたいです;

ふるふるさまのソースを参考に作成してみます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)