ADOの応用


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
vol234

これならわかるマイクロソフトアクセス活用法
            -->ADOの応用
              
発行者:高内 章治 2015年6月 3日
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
┏ 今日の内容 ━━━━━━━━━━━━━━━━━━━━━━━━┓

┃【01 - ご挨拶    】
┃【02 - トピックス  】ADOの応用

┃【03 - 編集後記    】

┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

─────────────────────────────────
【01 - ご挨拶    】          
─────────────────────────────────

こんにちは、高内(こうない)です。

今回は、

「ADOの応用」

についてお話したいと思います。




─────────────────────────────────

【02 - トピックス】: ADOの応用

─────────────────────────────────

お客様から次のような質問が来ました。

以下のような「A」データがあります。


NO
1
2
5
6
8
9
10

次に以下のような「T」データがあります。

NO
3
8

「T」データと同じデータ、もしくはこれより、大きいデータを「A]データから取り出したいということです。

解答は

「T」の「3」には、大きい「A」の「5」です。
「T」の「8」には、同じ「A」の「8」です。

あなただったら、どうやって抽出しますか?

結構、難しいですね。
同じデータであれば、クエリで結合すればよいですが、その値より一番近いデータを取り出すのは難しいですね。

これは、ADOを使って取り出した方が良いと思います。
ADOの応用問題です。

簡単に言うと、
「A」データと「T」データを合体して、「T」データのすぐ下のデータを取り出します。

以下のようにおこないます。

例を上げて説明します。

■1.まずテーブルです。

  1. 「A」データのテーブルです。
    テーブル名は「T_Aデータ」にします。
    以下のようになっています。
    実際は、オートナンバーが主キーになっています。

    NO
    1
    2
    5
    6
    8
    9
    10

  2. 「T」データのテーブルです
    テーブル名は「T_Tデータ」にします。
    以下のようになっています。
    実際は、オートナンバーが主キーになっています。

    NO
    3
    8

  3. 書き出すデータのテーブルを作成します。
    テーブルは、「T_書き出しデータ」にします。

    項目名は、以下のようになります。

    • ID:オートナンバーです。
    • NO:T_AデータのNOが入ります。
    • データ:Aテーブルです。
    • TNO:ひとつ前のT_TデータのNOです。

    ここに抽出したデータを書き出します。


*******************

■2.実際にどのように取り出すか説明します。

  1. 「T_Aデータ」から「Q_Aデータ」のクエリを作成します。

    この時、Aテーブル名を書き込みます。
    次のようになります。

    NO データ
    1 A
    2 A
    5 A
    6 A
    8 A
    9 A
    10 A

  2. 「T_Tデータ」から「Q_Tデータ」のクエリを作成します。

    この時、Tテーブル名を書き込みます。
    次のようになります。

    NO データ
    3 T
    8 T

  3. これをユニオンクエリで合体します。
    「Q_ユニオンクエリ」にします。

    次のようになります。

    NO データ
    1 A
    2 A
    5 A
    6 A
    8 A
    9 A
    10 A
    3 T
    8 T

  4. このままだとNO順になっていませんので、
    NO順とデータをTが上になるように並べ替えます。

    名前は、「Q_ユニオン並べ替え」にします。

    次のようになります。


    NO データ
    1 A
    2 A
    3 T
    5 A
    6 A
    8 T
    8 A
    9 A
    10 A

    同じNOだと、必ずTテーブルが上に来ます。
    これを一行づつ読んでいきます。

  5. 処理は次のようにします。

    • まず、「T_書き出しデータ」の中のデータを削除します。

    • 最初から、1行づ読んで行きます。

    • データのTテーブルのとき、そのNOを格納します。

    • 次のデータを読み込んで、書き出します。

    • 最後までおこないます。

■3.VBAは以下のようになります。

**********************

Dim cn As New ADODB.Connection

Set cn = CurrentProject.Connection

Dim SQL As String

'まず、書き出しデータのデータを削除します。

SQL = "DELETE FROM T_書き出しデータ"

cn.Execute SQL

cn.Close: Set cn = Nothing

'----データを1行づつ読み込んで書き込みます

Dim cn2 As New ADODB.Connection
Dim rst2 As New ADODB.Recordset

Set cn2 = CurrentProject.Connection
Set rst2 = New ADODB.Recordset
rst2.Open "Q_ユニオン並べ替え", cn2, adOpenStatic, adLockReadOnly

Dim FLAG As String
Dim TNO1 As Integer

FLAG = "NO"

Do Until rst2.EOF

If FLAG = "YES" Then

'------データの書き込み
Dim cn3 As ADODB.Connection
Dim rst3 As ADODB.Recordset

Set cn3 = CurrentProject.Connection
Set rst3 = New ADODB.Recordset

rst3.Open "T_書き出しデータ", cn3, adOpenKeyset, adLockOptimistic

rst3.AddNew
rst3!NO = rst2!NO
rst3!データ = rst2!データ
rst3!TNO = TNO1

rst3.Update

rst3.Close: Set rst3 = Nothing
cn3.Close: Set cn3 = Nothing

End If

If rst2!データ = "T" Then

TNO1 = rst2!NO
FLAG = "YES"

Else

TNO1 = 0
FLAG = "NO"

End If

rst2.MoveNext

Loop

rst2.Close: Set rst2 = Nothing
cn2.Close: Set cn2 = Nothing

*********************

実際に、やってみましたが、動きますので、出来ると思います。

こういうやり方もあるということを知って貰ったらよいと思います。

参考にしてください。



─────────────────────────────────
【03 - 編集後記    】       
─────────────────────────────────

最近、地震や噴火が多いですね。

地震は、東京が多くなっています。

噴火は、御嶽山、箱根山、阿蘇山、鹿児島、そして、口永良部島です。

地震や噴火は、いつ起こるかわかりません。

今回の、口永良部島では、事前に防災の準備や訓練をおこなっていたので、住民には被害はなかったようです。
避難もスムーズにできたようです。

日ごろからの防災の準備は必要かも知れませんね。


◆私がアクセスをマスターできたのは!!
http://www.sk-access.com/kyozai/zaiko1.html  

テーブル作成からVBAまでマスターできます。 
「在庫管理システムをアクセスで作ってみよう」教材です。
http://www.sk-access.com/kyozai/zaiko2.html  


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
●ご意見・ご感想・ご質問
 
『メルマガでもっとお役にたてる情報を配信したいと思いますので、日ごろから疑問に思っていることを教えてください。
宛先はこちらへです』

  •  kohnai★vega.ocn.ne.jp
      (高内:こうない:)
    (メールするときは、★を@に変えてください)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


◎「これならわかるマイクロソフトアクセス活用法」 のバックナンバー・配信停止はこちら

archive.mag2.com/0000222659/index.html

◎以下のホームページからでもバックナンバーを見ることができます。

http://www.sk-access.com/mailmaga/index.html

登録・解除につきましてはご自身でお願いいたします。

※このメールマガジンの転送はOKですが、掲載された記事の内容を許可無く転載することをを禁止させて頂きます。
必ず事前にご相談ください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


1週間でアクセス(Access)のシステム開発ができる〜
「在庫管理システムをアクセスで作ってみよう」教材

「アクセスのプログラム/システムを短期間で開発したい方」、
「アクセスのフォーム/VBAを完全にマスターしたい方」のための
アクセス(Access)を使って1週間でシステム開発する究極の方法とは?

「アクセス(Access)のシステムを無料のSQL Server 2016 Expressへ
移行してみよう」教材

あなたの会社のアクセス(Access)のデータベースやシステムに不安を感じていませんか?
アクセスのデータ量が多くなり処理スピードが遅くなった。
アクセスのデータを共有したい。
セキュリティに不安がある。などと、感じている方は!!
(SQL Server 2016 Expressバージョンです。)


「アクセス(Access)プログラムの仕様書の作り方」教材
マイクロソフトアクセスを使用して、プログラムの作成/システム開発をおこないたい方の為に、
アクセス(Access)のプログラム開発に成功するために絶対に必要な「仕様書」とは?



[↑一番上へ]
[マイクロソフトアクセス活用法(メールマガジン)(ホームへ)]
14:141505

アクセス全体

VBA

SQL Server