VB6で抽出したデータのソート方法とは?

このQ&Aのポイント
  • VB6で抽出したデータのソート方法について教えてください。
  • VB6でのデータソートの流れと、フィールドの追加・データの入力方法について詳しく教えてください。
  • VB6でのデータソートに関する処理と、mdbファイルの更新についての問題を解決する方法を教えてください。
回答を見る
  • ベストアンサー

VB6で、抽出したデータのソートについて

はじめまして。 どうしても分からないので、どなたかご教授頂けたらと思います。 VB6で、抽出したデータのソートを行いたいと思います。 大まかな流れは以下の通りです。 Dim objDb As Database Dim objTbl As Recordset   'mdbファイルからデータを抽出   Set objTbl = objDb.OpenRecordset(データ抽出条件式) (1)レコードセットした、objTblにフィールドを1つ追加したい。 (2)その追加したフィールドにデータを入れる。 (3)入れたデータで降順にソートしたい。 どうしても出来ないので、元のmdbから任意のフィールドを取得してきて、 そこに必要なデータを入れてソートしようとしたら、 .updateでmdb自体のデータを更新しないと出来ませんでした・・・ (mdbファイルは更新・変更等の操作を行ってはダメなファイルです。) この後の処理があるので、レコードセットしたobjTbl (もしくはそのコピーでもいいのですが・・・)を使った形で、出来ると良いのですが・・・ どうぞ、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

1. flexgridにいれて、 コラムを追加して、 データを入れて、 ソートするとか。 2. 別のmdbなどDBにフィールドを追加したテーブルを作って レコードセットをコピーして データを入れて、 ソートしたものを取り出すとか。 どっちでもよさそうだな。

hiru_andon
質問者

お礼

ShowMeHow様 早急にお教え頂き、ありがとうございました! 本来なら、クライアント先で使用するPCなので、 ファイルを新規に作りたく無かったのですが、 一旦、書き出して戻すしか方法が無いですね・・・ (2)の方法で試した所、上手く行きました! (flexgridはちょっと方法が分かりませんでした・・・すみません。) ありがとうございました!非常に助かりました。 また何かの際は、どうぞ、よろしくお願い致します。

関連するQ&A

  • ExcelからAccessデータの抽出

    部署内の機器管理にExcelを使用しています、今回レコード数がExcelでは対応できなくなりデータのみAccessに置いといてデータ処理はExcelマクロで行おうと思っています。 そのAccessファイルからある日付(または期間○日~△日まで等)岳のレコードを抽出したいと思っています。 ネットや書籍でいろいろ調べたのですがうまく抽出できません(SQL文がおかしいと思います)。ご教授お願いします(Access・SQLは全くの素人です) テーブル名は『4』です Sub Macro3() Dim objDB As New ADODB.Connection Dim RS As New ADODB.Recordset objDB.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & "C:\aaa.mdb" With RS .ActiveConnection = objDB .Source = "SELECT * from 4 WHERE 日付<2009/04/15" .Open End With Range("A3").CopyFromRecordset RS objDB.Close Set objDB = Nothing End Sub

  • (泣)VBscriptでinnerhtmlを使って表示したい・・・

    VBscriptをつかってHTA上で実行した結果をHTMLへ動的に表示させたいのですがうまく出来ずに悩んでおります。一応VBの部分はちゃんと出来ていることは確認していますが表示が全くダメです。 どなたか教えて下さい。 Option Explicit Dim objAccess Dim objDB Dim objRS Set objAccess = CreateObject("Access.Application") objAccess.Visible = True objAccess.OpenCurrentDatabase("c:\happy\island.mdb") Set objDB = objAccess.CurrentDb Set objRS = objDB.OpenRecordset("SELECT COUNT(*) AS 件 FROM 住所録テーブル") WScript.echo "件数=" & objRS("件数") objRS.Close Set objRS = Nothing Set objDB = Nothing Set objAccess = Nothing 件数をWScript.echoではなくinnerhtmlで表示したいです。 またSQLを("SELECT * FROM 住所録テーブル")にした場合データをレコードセットで抽出し必要なデータを表にして表示をしたいのですが・・・(これもinnerhtmlを使いたい)

  • 文字型フィールドの数値データの抽出

    mdbファイルを、VB6.0+ADO2.7で扱っています。 文字型フィールドに数値データが入力されたレコードを抽出したいのですが、何かよい方法はないでしょうか? そのフィールドに文字型データが入力されているレコードもあり、それを除外したいのです。 SQLでも、.filterプロパティでも結構です。お知恵を下さい。 よろしくお願いします。

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

  • アクセスのデータ画面のソートについて

    いつもお世話になっています。 アクセスのデータ画面、エクセルに何となく似ているのですが、 エクセルのように「A列で降順」のような並び替え、 または「オートフィルタ」のような抽出はできるのでしょうか? エクセルにエクスポートするには、データが多すぎてまた頻繁にデータが追加されるので都度エクスポートするのには時間がかかりすぎてしまいます。 また、クエリで上記のようなソートや抽出ができるのなら、 その方法を教えていただけますか? よろしくお願いします。

  • アクセス テーブルデータ他のテーブルにコピーVBA

    win10 access365のmdbファイルにおいて table1のフィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  table2;フィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  上記に置いて table2の新しいデータとして table1のデータをコピーしたい、 ただしtable1には レコードは1行だけとします (table1にレコードが複数行ある場合の最新レコードだけtable2にコピーも出来れば知りたいです) アクセス付属の更新クエリーでは、どうも うまくいきません sqlにおいて UPDATE table1, table2 SET table2.ID = [table1]![ID], table2.氏名 = [table1]![氏名]; 上記動作しません Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim TB As Table Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Table![table1]![ID] Rdset![氏名] = Table![table1]![氏名] Rdset.Update End Function table1, table2を それぞれ 同名のフォームを作り Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim fm As Form Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set fm = Forms![table1] If Rdset.BOF Then Exit Function Else Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Forms![table1]![ID] Rdset![氏名] = Forms![table1]![氏名] Rdset.Update End If End Function いずれも table2のデータ更新が なされていません すみません 宜しくお願い致します

  • 条件付きでACCESSのデータを抽出したい

    2分に1レコード生成されるmdbファイルがあります。 2分置きに排出数フィールドに値が記載されています。 停止する際は排出数フィールドに0が書き込まれ、動いてる時は最低1以上の値が入っています。 日時                      排出数 201501060700                      2000 201501060702                      2000 201501060704                      0 201501060706                      0 201501060708                      2000 201501060710                      2000 201501060712                      2000 201501060714                      0 201501060716                      2000 201501060718                      0 201501060720                      0 .... 排出数フィールドに0が書き込まれた最初のレコードを抽出します。 その後又1以上の値が書き込まれたら、次に0の値が最初に書かれたフィールドを抽出したいです。 上記の場合だと201501060704、201501060714、201501060718のレコードを抽出したいのです。 いい抽出条件はあるでしょうか? Excel側に1度全部出力してから選択するしかないでしょうか?

  • VB.NETでソートされたデータセットの取得

    データ数が数十万レコードのテーブルがあります。 ここから上位1000件のレコードをデータセットに取得したいと思います。 しかし、この時点でソートがかけられないのでビューを作成時にソート をすることになると思います。 レコード数が少ない場合は、これでもいいのですが、多くなると、データ セットに取得する時点でかなり時間がかかります。 この場合、どういった方法が最適でしょうか? リーダーを使うのが普通でしょうか?

  • Access VBAでのデータ抽出の仕方

    Access VBAでのデータ抽出の仕方 Access VBAでデータを抽出して、テキストボックスにデータを配置したいと思います。 Formにtxt1~txt10までのテキストボックスが10個あります。 テーブルからデータを引っ張ってきてレコードセットにいれます。 Dim objADOCON As ADODB.Connection Dim objADORS As ADODB.Recordset Dim strSQL As String Dim SQL As string SQL = "Select * from Table1" Set objADOCON = Application.CurrentProject.Connection Set objADORS = objADOCON.Execute(SQL) これでレコードセットを取得しました。このレコードセットは「ID」列があり、プライマリーキーを設定しています。またZAIKOという列もあります。 ID=001の時、在庫は100 ID=002の時、在庫は200 といったように条件を絞って、テキストボックスに値を入れたいと思います。 objADORS.Filter = "[ID] = '001'" txt1.value = objADORS!ZAIKO objADORS.Filter = "[ID] = '002'" txt2.value = objADORS!ZAIKO ..... を10回繰り返せば条件毎に値がセットするのはわかります。 ただし、あまりスマートなやり方ではなく、もっといい方法があるんじゃないかと思うのですが考えつきません。 何か良い方法、手段がありましたらお教え下さい。 よろしくお願いします。

  • クエリで抽出したデータに書き込みたい

    どうしても分からなくなってしまったので、質問させていただきます。 以前、連番フィールドだけのテーブルを作りたいと質問して以下のような回答を頂きました。もちろん回答内容で連番フィールドの作成はできました。 Private Sub Sample1()   Dim rs As New ADODB.Recordset   Dim i As Integer   rs.Open "ZZZZ連番テーブル", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic   For i = 1 To 9999     rs.AddNew     rs("仮想ID") = "ZZZZ" & Format(i, "0000")     rs.Update   Next   rs.Close End Sub そして今回は、また連番を振りたいのですが 今回は条件が加わっていまして、元テーブルからまずクエリで既存データの登録番号を昇順(空き番号ではないが番号が所々飛んでいるもの)で抽出します。 この虫食いのように飛んでいる番号を綺麗に連番にしようと思い、まずは別フィールドに変更したい連番のフィールドを作成したいのですが。 これがうまくいきません。 上に記述したVBAでは既にレコードがあるデータにAddNewが有効でないのは分かるのですが、 どのようにすれば元テーブルから抽出クエリ(昇順で抽出したデータ)を使って 別フィールドに連番を振ることができるのでしょうか? フィールドを書き換えるのではなく別フィールドに連番を振るだけなのですが・・・