[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/04/19(Tue) 14:45
投稿者名:TIMUF
Eメール:
URL :
タイトル:
一覧からのレコードの抽出方法
こんにちは。
VB6+Access2002にてデータベースアプリを作っています。

mdb内のテーブルからレコードを抽出(選択)して別テーブルに書き出
したいと思っています。
その抽出(選択)方法ですが、ダイアログでIDの範囲(始まりと終わり)
を指定して変数に格納しSQLを作って抽出する方法の他に、一覧形式で表
示したデータの中からランダムに選んで、そのデータを抽出したいのです。
例えば、DataGridに表示させたレコードをランダムに複数行選択して、
コマンドボタンを押した時点で、選択したデータを何らかの形で識別し、
それを抽出の条件にしたいのです。
この方法についてご教授下さい。
よろしくお願いします。

投稿時間:2005/04/19(Tue) 15:10
投稿者名:いな
Eメール:
URL :
タイトル:
Re: 一覧からのレコードの抽出方法
要約すると
>DataGridに表示させたレコードをランダムに複数行選択して、
>コマンドボタンを押した時点で、選択したデータを何らかの形で識別し、
>それを抽出の条件にしたいのです。

ということで、最終的には
DataGridで複数選択したとき、選択した値を全部取得したいってことなんだよね。

Selectedっていうのがあったような気がするけど

投稿時間:2005/04/19(Tue) 15:44
投稿者名:TIMUF
Eメール:
URL :
タイトル:
Re^2: 一覧からのレコードの抽出方法
早速のレスありがとうございます。

> DataGridで複数選択したとき、選択した値を全部取得したいってことなんだよね。
そうです。例えば100件のリストの中から、ランダムに10件選んだら、その10
件のみをまとめて別テーブルに書き出したり、レポートに送ったりしたいのです。


> Selectedっていうのがあったような気がするけど
ありがとうございます。早速調べてみます。

投稿時間:2005/04/19(Tue) 15:54
投稿者名:いな
Eメール:
URL :
タイトル:
Re^3: 一覧からのレコードの抽出方法
.NETと勘違いしてるかもなぁ〜ぢぶん

hhttp://dobon.net/vb/dotnet/datagrid/selectedrows.html

投稿時間:2005/04/19(Tue) 18:08
投稿者名:TIMUF
Eメール:
URL :
タイトル:
Re^4: 一覧からのレコードの抽出方法
VB6では無理なんでしょうか。。。
.Netに移行するのもすぐには無理だし。。。

ちなみに選択中の1件なら可能でしょうか?
例えば今選択中の1件を抽出して別テーブルに書き出して、次を選択して再度書き出して追加。。。。
のように1件づつ追加していく方法も最悪検討しようと思いますので。。。

よろしくお願いします。

投稿時間:2005/04/20(Wed) 07:34
投稿者名:YK
Eメール:
URL :
タイトル:
Re^5: 一覧からのレコードの抽出方法
こんにちは。

セレクトしたレコードの値の取得です。
意味が違っていたらごめん。

Dim varBmk As Variant

With Adodc1
    For Each varBmk In DataGrid1.SelBookmarks
        .Recordset.Bookmark = varBmk
        Debug.Print .Recordset("F1") & vbTab & .Recordset("F2")
    Next
End With

投稿時間:2005/04/20(Wed) 09:11
投稿者名:TIMUF
Eメール:
URL :
タイトル:
Re^6: 一覧からのレコードの抽出方法
YKさん朝早くからありがとうございます。
アレンジして試してみます。

でも、実際、データベース内の複数のレコードを任意にピックアップして
取得する(他テーブルに書き出す)方法って無いのでしょうか。。。?

投稿時間:2005/04/20(Wed) 17:12
投稿者名:TIMUF
Eメール:
URL :
タイトル:
Re^7: 一覧からのレコードの抽出方法
仕方が無いので、あらかじめテーブルにフラグ用の項目を作っておき、グリッドで選択
されたレコードを取得し(YKさんありがとうございました)、そのレコードのフラグ用
項目の値を設定する形にしました。
で、一つ一つチョイスするレコードを選択した後で、一旦レコードセットを閉じて、
再度SQLでフラグが立っているレコードのみを取得して利用することにしました。
ユーザビリティに足りなさは残るものの、やりたいことはとりあえず実現できるので
良しとします。
いなさん、YKさん、お考え頂いた皆さんありがとうございました。
もし、もっと効率よいやり方があったらご指導下さい。

投稿時間:2005/04/21(Thu) 08:07
投稿者名:YK
Eメール:
URL :
タイトル:
Re^8: 一覧からのレコードの抽出方法
こんにちは。
レコードセットだけを利用するならばこんな方法もあります。

フォーム上に
Adodc1
DataGrid1

Adodc2
DataGrid2

Command1
があるとします。

Adodc1
DataGrid1
は今までのデータセットとします。

モジュールレベルで
Dim rs  As ADODB.Recordsetを宣言して下さい。
尚 rs.Fields.Appendのフィールド名、データタイプは合わせてください。

DataGrid1で複数選択して下記を実行してみて下さい。

Private Sub Command1_Click()
    Dim varBmk  As Variant
    Dim i       As Long

    Set rs = New ADODB.Recordset
    With rs.Fields
        .Append "F1", adVarWChar, 256
        .Append "F2", adVarWChar, 256
        .Append "F3", adVarWChar, 256
        .Append "F4", adInteger
        .Append "F5", adVarWChar, 256
    End With
    rs.Open
    
    With Adodc1
        For Each varBmk In DataGrid1.SelBookmarks
            .Recordset.Bookmark = varBmk
            rs.AddNew
            For i = 0 To .Recordset.Fields.Count - 1
                rs.Fields(i) = .Recordset.Fields(i)
            Next
            rs.Update
        Next
    End With
    
    Set Adodc2.Recordset = rs
    Set DataGrid2.DataSource = Adodc2

    ' 列幅をあわせえるのらば
    With DataGrid1
        For i = 0 To .Columns.Count - 1
            DataGrid2.Columns.Item(i).Width = .Columns(i).Width
        Next
    End With
End Sub

投稿時間:2005/04/21(Thu) 09:32
投稿者名:TIMUF
Eメール:
URL :
タイトル:
Re^9: 一覧からのレコード...
YKさん、ありがとうございます。

これは是非試してみたいと思います。

投稿時間:2005/04/21(Thu) 11:26
投稿者名:TIMUF
Eメール:
URL :
タイトル:
Re^10: 一覧からの...
早速試してみましたが、
.Recordset.Bookmark = varBmk
のところで
「オブジェクト変数またはWithブロック変数が設定されていません」
というエラーになってしまいます。
YKさんのコードをそのまま、レコードセットの名前等を当方のコードに
合わせただけなのですが。。。
もちろん各変数の宣言もしています。
オブジェクト変数というと、この場合はAdodc1ということでしょうか?
Withブロック変数というと、この場合はvarBmkということでしょうか?
前者は Private Sub Adodc1 As Adodc
後者は Dim varBmk As Variant
としていますが、間違っていますでしょうか?

投稿時間:2005/04/21(Thu) 13:24
投稿者名:YK
Eメール:
URL :
タイトル:
Re^11:一覧から...
こんにちは。

書き方が悪かったのでしょうか。
基本的なことは分かっておられると思ってレスしたのですが。

コンポーネントで
Microsoft ADO Data Control X.X
にチェックを入れて下さい。
これが ADODC です。

フォーム上に
コントロール名    名前
ADODC        Adodc1
DataGrid     DataGrid1

ADODC             Adodc2
DataGrid          DataGrid2

CommandButton     Command1
を作成します。

最初に(Form_Load等で)何がしのRecordSetを作成して
Set Adodc1.Recordset = RecordSet
Set DataGrid1.DataSource = Adodc1
とします。
DataGrid1にデータが表示されます。

その後は前レスの通りです。
尚、DataGrid2 の Adodc2 は使用しなくても直接
Set DataGrid2.DataSource = rs
でも、良いでしょう。

投稿時間:2005/04/21(Thu) 13:47
投稿者名:TIMUF
Eメール:
URL :
タイトル:
Re^12
YKさま

すばやいレスをありがとうございます。
DataGridには当初からデータをセットすることはできているのです。
ですから、
> 最初に(Form_Load等で)何がしのRecordSetを作成して
> Set Adodc1.Recordset = RecordSet
> Set DataGrid1.DataSource = Adodc1
> とします。
> DataGrid1にデータが表示されます。
というところまではクリアできているわけです(だと思うのです)。

で、その後Command1ボタンをクリックした後に前にお知らせした、
「オブジェクト変数〜 Withブロック変数〜」のエラーメッセージが
出て、ソースコードの「.Recordset.Bookmark = varBmk」の箇所が
反転しているのです。

> 尚、DataGrid2 の Adodc2 は使用しなくても直接
> Set DataGrid2.DataSource = rs
> でも、良いでしょう。
これも試してみます。

お手数をかけてすいません。

投稿時間:2005/04/21(Thu) 14:11
投稿者名:・。
Eメール:
URL :
タイトル:
Re^13
> で、その後Command1ボタンをクリックした後に前にお知らせした、
> 「オブジェクト変数〜 Withブロック変数〜」のエラーメッセージが
> 出て、ソースコードの「.Recordset.Bookmark = varBmk」の箇所が
> 反転しているのです。

ただ単に、スコープの問題では?
.で略さず、ちゃんと指定してみれば?

投稿時間:2005/04/21(Thu) 14:37
投稿者名:YK
Eメール:
URL :
タイトル:
Re^13
こんにちは。

    With Adodc1
        For Each varBmk In DataGrid1.SelBookmarks

この2行のコントロール名は合っていますか?
こちらでは再現できません。

投稿時間:2005/04/21(Thu) 16:21
投稿者名:TIMUF
Eメール:
URL :
タイトル:
解決
できました!
再度フォーム自体も作り直して、コンポーネントを配置して、きちんと0からコードを書き直して、、、
と、慎重に作業して実行したところ、DataGrid1で選択したデータがDataGrid2に表示されました。
どこかにミステイクがあったのでしょう(それを突き止められないのが素人ですね。。。)。

YKさん、・・・。さん、お手数をおかけしました、ありがとうございました。

これはとってもイイですね。使えます。
お蔭様で良いインターフェースが作れそうです。

本当にありがとうございました。