caferan 2024年02月03日 カード146 いいね1

広告

単語カード

  • プロジェクトとは
    DBファイルに保存されているモジュールをまとめて管理するもの。
    3種類のモジュールがある
    ・Microsoft office Access クラスオブジェクト
    (フォームモジュール、レポートモジュール)
    ・標準モジュール
    ・クラスモジュール
  • モジュールとは
    プロシージャを記述・格納するためのオブジェクト
    ・フォームモジュール、レポートモジュール
    ・標準モジュール
    ・クラスモジュール
  • プロシージャとは
    プログラムを構成する最小単位
    プログラムとは、コンピュータを演算する処理を行わせる手続き全般で、プロシージャはそれらの処理に対する命令を手順としてまとめたもの
  • オブジェクトとは
    VBAにおける処理の対象となるアプリケーションの構成要素を指す
  • プロパティとは
    オブジェクトが持つ属性
    例:フォームオブジェクトの場合
    配置する位置やサイズ、背景色などがプロパティにあたる
  • メソッドとは
    オブジェクトが行うことができる動作
    メソッドには「引数」と呼ばれる、どのように動作を行うかを指定する値がある
  • 演算子とは
    ・算術演算子
    ・比較演算子
    ・文字列連結演算子
    ・論理演算子
    ・代入演算子
  • 算術演算子
    +、ー、*、/、Mod、¥、^
  • 比較演算子
    =、<、<=、>、>=、<>、Is、Like
  • 文字列連結演算子
    &、+
  • 論理演算子
    And、Or、Not、Xor、Eqv、Imp
  • 代入演算子
  • キーワードとは
    VBAにとって特別な意味を持つ文字列
    ステートメント名、関数名、演算子などがあり、キーワードと同じ文字列をプロシージャ名や変数名に用いることはできない
  • テーブルの正規化
    複数のテーブルにデータを分割し、お互いが連携しながらDBのデータを活用する
    ・繰り返し項目を削除することでDBサイズが小さくなる
    ・各テーブルの目的が明確になる
    ・データ管理が容易になる

    第1正規化から第3正規化まである
  • 第1正規化
    繰り返し項目を無くす
  • 第2正規化
    主キーの一部によって決まる項目を他テーブルに分離する
  • 第3正規化
    主キー以外の項目によって決まる項目を含むテーブルを他のテーブルに分離する
  • 結合の種類
    ・内部結合
     2つのテーブルに共通する値のみ表示する
    ・左外部結合
     左側のテーブルの全てと右側のテーブルで共通する値のレコードを表示する
    ・右外部結合
     右側のテーブルの全てと左側のテーブルで共通する値のレコードを表示する
  • 静的変数とは
    プロシージャレベル変数でプロシージャ終了後も値を保持したいときに使用する宣言

    Staticステートメント
  • オブジェクト変数の宣言
    ・固有オブジェクト型
     例)
     ・Dim オブジェクト変数 As Form
    ・Dim オブジェクト変数 As Label
     ・Dim オブジェクト変数 As TextBox
     
    ・総称オブジェクト型
     例)
     ・Dim オブジェクト変数 As Object
     
    固有オブジェクトで宣言した方がエラーの発見をしやすく、少しだけ実行速度が速い
  • キャリッジリターン文字
    vbCr
    chr(10)
  • ラインフィード文字
    vbLf
    chr(13)
  • 改行文字
    vbCrLf
    vbNewLine
    chr(10) &chr(13)
  • For…Nextの構文
    For 変数=初期値 To 最終値 (Step 加算値)
    繰り返し実行する処理
    Next 変数
  • Do…Loopの構文(実行前判断)
    Do(While又はUntile) 条件式
    繰り返し実行する処理
    Loop
  • Do…Loopの構文(実行後判断)
    Do
    繰り返し実行する処理
    Loop(While又はUntile) 条件式
  • Whileキーワード
    条件を満たしている間
  • Untilキーワード
    条件を満たすまで
  • ループの実行前判断と実行後判断の違い
    条件を満たしていないとき、実行前判断では一度もループ処理を実行しない
    実行後判断では必ず一度ループ内の処理を実行する
  • For Each…Nextの構文
    For Each 要素変数 In 配列またはコレクション
    繰り返し実行する処理
    Next 要素変数 
  • For Eachの例(全テキストボックスを消去)
    Dim MyControl As Object
    For Each MyControl In Me.Controls
    If Mycontrol.ControlType = acTextBox then
    MyControl.Value=""
    End if
    Next MyControl
  • For Eachで使用する要素変数のデータ型
    配列の場合はバリアント型
    コレクションの場合はバリアント型かオブジェクト型
  • コレクションとは
    Accessが持っているオブジェクトの集合体
    例えば「Forms」というコレクションは、現在開いているフォーム全てに対して一括処理すいることができる
  • コレクション「Reports」
    現在開いているすべてのレポート
  • コレクション「Printers」
    システムで使用可能なすべてのプリンタ
  • コレクション「Me.Controls」
    フォーム、レポート上のすべてのコントロール
  • コレクション「CurrentProject.AllForms」
    DB内にあるすべてのフォーム
  • コレクション「CurrentProject.AllReports」
    DB内にあるすべてのレポート
  • Exitステートメント
    処理を抜け出すことができる
    ・Exit Do
    ・Exit For
    ・Exit Sub
    ・Exit Function
  • 特殊なクエリ(SQLクエリ)
    ・ユニオンクエリ
    ・パススルークエリ
    ・データ定義クエリ
  • 宣言セクションとは
    モジュールの先頭から最初のプロシージャを記述するまでの領域。
    この領域に宣言した変数は、パブリック変数またはモジュールレベル変数となる
  • 変数を宣言するステートメント種類
    ・Public
    ・Private
    ・Dim
  • パブリック変数
    ステートメント:Public
    宣言場所:標準モジュールの宣言セクション
    適用範囲:全てのモジュール全てのプロシージャ
  • モジュールレベル変数
    ステートメント:Dim又はPrivate
    宣言場所:宣言セクション
    適用範囲:宣言されたモジュール内の全てのプロシージャ
  • プロシージャレベル変数
    ステートメント:Dim
    宣言場所:プロシージャ内
    適用範囲:宣言されたプロシージャ内からのみ
  • パブリック定数
    ステートメント:Public Const
    宣言場所:標準モジュールの宣言セクション
    適用範囲:全てのモジュール全てのプロシージャ
  • モジュールレベル定数
    ステートメント:Const
    宣言場所:宣言セクション
    適用範囲:宣言されたモジュール内の全てのプロシージャ
  • プロシージャレベル定数
    ステートメント:Const
    宣言場所:プロシージャ内
    適用範囲:宣言されたプロシージャ内からのみ
  • Staticステートメント
    プロシージャレベル変数でプロシージャ終了後も値を保持したいときに使用する宣言

    ステートメント:Static
    宣言場所:プロシージャ内
    有効範囲:パブリック変数と同じ

    Static MyId As String
  • Set ステートメント
    オブジェクト変数にオブジェクトの参照を代入する
    Set オブジェクト変数 = 参照するオブジェクト

    例)
    Dim MyForm As Form
    Docmd.OpenForm "Fオブジェクト変数"
    Set MyForm=Forms("Fオブジェクト変数")
    MyForm.詳細.Backcolor = vbCyan
    MyForm.txt1.Value=ABCDE"

  • 配列 Option Baseステートメント
    配列のインデックス番号の最小値を「0」ではなく「1」に変更することができる

    Option Base 最小値(0又は1の数値)
    ※宣言セクションに記述
  • 配列 Toステートメント
    モジュール内の全ての配列変数ではなく個々の配列変数ごとに設定したい場合に使用する

    Dim 変数(最小値 To 最大値) As データ型
  • 動的配列とは
    要素数は設定せずに配列の宣言のみ行うこと
    ReDimステートメントで要素数を設定する

    Dim 変数() As データ型
  • ReDimステートメント
    実際に使用する段階で要素数を設定する

    ReDim 変数(要素数-1)

    ※それまで格納されていた値は初期化される
  • Preserveステートメント
    それまで格納されていた値を初期化することなく要素の最大値を変更することができる

    ReDim Preserve 変数(新しい要素数-1)
  • Eraseステートメント
    配列に格納されて値を一気に初期化する

    Erase 配列変数
  • ユーザ定義型とは
    ユーザが独自に型の定義を行うことができる機能
    任意の数の要素を設定でき、各要素のデータ型もそれぞれ異なるものを設定可能
  • Typeステートメント
    ユーザ定義型を定義するステートメント。
    標準モジュールの宣言セクションで行う

    例)
    Type ユーザ定義型名
     要素名1 As データ型1
    要素名2 As データ型2
    要素名3 As データ型3
    End Type
  • ユーザ定義型の宣言方法
    Typeステートメントで定義したユーザ定義型を通常の変数宣言と同様に宣言します

    Dim ユーザ定義型の変数 As ユーザ定義型名

    例)
    Dim MySyain() SyainType
    ----------------------------------------
    Private Sub Form_AfterUpdate()
    Static i As Long
    ReDim Preserve MySyain(i)
    MySyain(i).社員番号=Me.txt1.Value
    MySyain(i).部署コード=Me.txt2.Value
    MySyain(i).社員名=Me.txt3.Value




  • プロシージャの種類は
    標準プロシージャ
    イベントプロシージャ
  • 標準プロシージャとは
    特定のイベントに関連付けられていない汎用的な処理を記述するプロシージャ
    SubプロシージャとFunctionプロシージャの2種類がある

    処理の結果を返す必要がない場合はSub
    返す必要がある場合はFunction
  • イベントプロシージャとは
    フォームやレポートのイベントによって実行するプロシージャ。
    全てSubプロシージャとなる
  • Functionプロシージャの呼び出し方
    変数 = プロシージャ名()
    または
    変数 =プロシージャ名(変数)

    例)
    sub Test()
    Dim MyStr As String
    MyStr=Func("※※※")
    Msgbox MyStr
    End Sub

    Function Func(MyStr As String) As String
    Func = MyStr % "AAA"
    End Function
  • 引数とは
    プロシージャを呼び出す際に、呼び出し先のプロシージャに渡される値
  • 戻り値とは
    呼び出されたプロシージャの処理が終わった後に、呼び出し元のプロシージャに渡される値
  • 値渡しとは
    変数のコピーを渡すこと
    ByValキーワードを使用する
    例)
    Sub プロシージャ名(ByVal 引数 As データ型)
    又は
    Function プロシージャ名(ByVal 引数 As データ型)
  • 参照渡しとは
    変数をそのまま渡す
    渡し先で変更されれば元の変数も変更される
    ByRefキーワードを使用する
    例)
    Sub プロシージャ名(ByRef 引数 As データ型)
    又は
    Function プロシージャ名(ByRef 引数 As データ型)
  • Optionalキーワードとは
    引数を省略可能にできる

    Function Func1(Optinal ByVal MyStr As String = "BBB")
    Func = MyStr & "***"
    End Function
    -------------------------------------------------
    Sub Test()
    Debug.Print Func("AAA")
    Debug.Print Func()
    -------------------------------------------------
    結果
    AAA***
    BBB***

    引数を省略した場合に初期値が適用される
  • フォーム・レポートを参照する構文
    対象となるオブジェクトのモジュールから参照
    Me.メソッド(又はプロパティ)

    それ以外のモジュールから参照
    Forms("フォーム名").メソッド(又はプロパティ)
  • 様々なフォーム参照の構文
    Forms!フォーム名
    Forms![フォーム名]
    Forms.フォーム名
    Forms!フォーム名!コントロール名
    Forms("フォーム名")("コントロール名")
    Forms("フォーム名").Controls("コントロール名")
  • サブフォーム・サブレポートを参照する構文
    対象となるオブジェクトのモジュールから参照
    Me.サブフォーム.Form.メソッド(又はプロパティ)

    それ以外のモジュールから参照
    Forms("フォーム名").サブフォーム名.Form.メソッド(又はプロパティ)
  • メインフォームを参照する場合
    Me.Parent.メソッド(又はプロパティ)

    Me.Parent.コントロール名.メソッド(又はプロパティ)
  • OpenArgdプロパティとは
    Docmd.OPenFormのプロパティ
    どのフォームから開かれたか調べることができる
    例)
    Private Sub btn_Click()
    Docmd.OPenForm "F_フォーム",,,,,,Screen.ActiveControl.Name
    End Sub
    -------------------------------------
    Private Sub Form_OPen
    Me.txt.Value="[" & OpenArgs & "]ボタンより開かれました"
    End Sub
  • KeyPressイベントとは
    キーボードのANSIキーが押された時に発生する
    ANSIキーが押されると、
    KeyDown→KeyPress→Change→KeyUpの順でイベントが発生する
    例)
    Rrivate Sub KeyPress(KeyAscii As Integer)
     Select Case KeyAscii
     Case 8,9,13
    Exit Sub
    Caee Else
    If KeyAscii >=Asc("0") And KeyAscii <= Asc("9") Then Me.Lbl.Cartion ="数字キーが押されました"
     End If 
  • GetFocusイベントとは
    コントロールにフォーカスが移った時に発生する
    フォーカスを取得した際に他のコントロールから値を取得したりテキストボックスのカーソル位置を指定したり。
    例)
    Private Sub txt_GetFocus()
     If IsNull(Me.txt.Value) Then
     Me.txt.Value=Me.txt5.Value
     Me.txt.SelStart = Nz(Len(Me.txt.Value),0)
    End If 

  • SelStartプロパティとは
    テキストボックス内のカーソル位置を指定する
    (0から総文字数の範囲で)

    Me.txt.SelStart = Nz(Len(Me.txt.Value),0)

    テキストボックス内の文字を数えて、その文字数の最後尾にカーソルを設定する
  • BeforeUpdateイベントとは
    データを更新する前に発生し、入力された値が不正なときやデータ更新のキャンセルを行うことができる
    データを更新すると、BeforeUpdate → AfterUpdateの順番でイベントが発生する

  • Loadイベントとは
    フォームに読み込まれる時に発生する
    フォームが開かれると
    Open→Load→Activeの順にイベントが発生する
  • コンポーネントとは
    特定の機能を持つプログラムの部品
    外部のライブラリファイルを読み込むことでAccess VBAにない機能を利用することができる

    参照設定
  • 事前バインディングとは
    利用したい外部ライブラリファイルをあらかじめ選択し、オブジェクト変数にオブジェクトへの参照を格納する

    Dim オブジェクト変数 As 特定のオブジェクト型
    Set オブジェクト変数 = New 特定のオブジェクト型

    実行時バインディングに比べてコード の実行が早い

    固有オブジェクト型による宣言
  • 実行時バインディングとは
    CreateObject関数を利用して、コード 実行時にオブジェクトを参照する
    参照設定ダイアログでライブラリファイルを選択する必要はない

    Dim オブジェクト変数 As Object
    Set オブジェクト変数=CreateObject(オブジェクトのクラス名)

    総称オブジェクト型による宣言
  • カレントデータベースのパスと名前
    パス
    CurrentProject.Path

    名前
    CurrentProject.Name
  • CurrentDb.Name
    フォルダのパスとファイルの名前を同時に取得できる

    CurrentProject.Pathと
    CurrentProject.Name
    を両方あわせた感じ
  • FileSystemObjectの概要
    8つのオブジェクト種類
    Driveオブジェクト
    Driveコレクション
    Folderオブジェクト
    Folderコレクション
    Fileコレクション
    Fileオブジェクト
    TextStreamオブジェクト
  • FileSystemオブジェクトの事前バインディング記載方法
    Dim オブジェクト変数 As FileSystem
    Object
    Set オブジェクト変数=New FileSystemobject
  • FileSystemオブジェクトの実行時バインディング記載方法
    Dim オブジェクト変数 As Object
    Set オブジェクト変数 =CreateObject(”Scripting.FileSystemObject")
  • FileSystemObjectのオブジェクト
    copyFile
    CopyFolder
    CreateFolder
    CreateTextFile
    DeleteFile
    DeleteFolder
    DriveExists
    FileExists
    FolderExists
    GetDrive
    GetFile
    GetFolder
    MoveFile
    MoveFolder
    OpenTextFile
  • Driveオブジェクトの内容

    オブジェクト.GetDrive(ドライブ名)
    DriveLetter…ドライブ名取得
    DriveType…ドライブ種類の数値取得
    FileSystem…ファイルシステムの種類「FAT」「NTFS」「CDFS」のいずれかを取得
    FreeSpace…使用可能なディスク空き容量
    IsReady…ドライブが準備できているかどうか
    Path…ドライブのパス
    ShareName…ドライブのネットワーク名
    TotalSiza…ドライブの総容量
  • Driveオブジェクト
    DriveTypeプロパティの数値種類
    0 不明
    1 リムーバブルディクス
    2 ハードディスク
    3 ネットワークドライブ
    4 CD-ROM
    5 RAMディスク 
  • Folderオブジェクトの内容

    オブジェクト.GetFoler(フォルダのパス)
    ■プロパティ
    Attributes…フォルダ属性の取得
    DateCreated…フォルダ作成の日時
    DateLastAccessed…フォルダが最後にアクセスされた日時
    DateLastModiffed…フォルダが最後に更新された日時
    Drive…フォルダが含まれているドライブ名
    Files…フォルダ内のすべてのファイル取得
    IsRoolFolder…ルートフォルダかどうか調べる
    Name…フォルダの名前を取得
    Path…フォルダのパスを取得
    Size…フォルダ内のサイズを取得
    SubFoldrs…すべてのサブフォルダを取得

    ■メソッド
    Copy…フォルダをコピー
    Delete…フォルダを削除
    Move…フォルダを移動する
    CreateTextFile…新しいテキストファイル作成
  • Fileオブジェクトの内容

    オブジェクト.GetFile(ファイルのパス)
    ■プロパティ
    Attributes…ファイル属性の取得
    DateCreated…ファイル作成の日時
    DateLastAccessed…ファイルが最後にアクセスされた日時
    DateLastModiffed…ファイルが最後に更新された日時
    Drive…ファイルが含まれているドライブ名
    Name…ファイルの名前を取得
    Path…ファイルのパスを取得
    Size…ファイル内のサイズを取得
    Type…ファイルの種類を取得

    ■メソッド
    Copy…ファイルをコピー
    Delete…ファイルを削除
    Move…ファイルを移動する
    OpenAsTextStreem…テキストファイルを開く
  • TextStramオブジェクトの内容

    オブジェクト.CreateTextFile(ファイル名、上書き)
    記載例)

    Dim FSO New FileSystemObject
    Dim MyText As TextStreem
    Dim MyPath as Dtring
    MyPath=CurrentProject.Path & "¥test"
    Set MyText = FSO.OPenTextFile(MyPath & "¥01.txt",Forwriting)
    MyText.Erite "12345"
    MyText.Close
  • FileDialogオブジェクトの内容
    ファイルまたはフォルダを参照するダイアログボックスを表示し、選択したファイル等へのパスを格納する

    ■ファイルを格納
    Dim オブジェクト変数 As FileDiaLog
    Set オブジェクト変数 = Application.FileDialog(msoFileDialogFilePicker)

    ■フォルダを格納
    Dim オブジェクト変数 As FileDiaLog
    Set オブジェクト変数 = Application.FileDialog(msoFileDialogFolderPicker)
  • FileDialogオブジェクト
    プロパティとメソッドの種類
    ■プロパティ
    Title…ダイアログボックスのタイトル
    ButtonName…操作ボタンに表示される文字列
    AllowMultiSelect…操作ファイルの選択が可能か指定
    InitialFileName…初期表示されるフォル名やフォルダパスを指定
    InitialView…ファイル等の初期表示を指定
    Filers…選択できるファイルの種類を指定
    FilerIndex…表示されるファイルの種類を指定
    SelectedItems…選択したファイルパスを表示

    ■メソッド
    Show…
    ダイアログボックスを表示する
    キャンセルボタンを押すと「0」、それ以外は「−1」を返す
  • FileDialogオブジェクト
    InitialViewプロパティのクラス定数
    msoFileDialogViewDetails…詳細表示
    msoFileDialogViewLargeicons…大きいアイコン
    msoFileDialogViewList…一覧表示
    msoFileDialogViewPreview…プレビュー表示
    msoFileDialogViewProperties…プロパティ表示
    msoFileDialogViewSmallIcons…小さいアイコン
    msoFileDialogViewThumbnail…縮小表示
  • OLEオートメーションの意味
    Object Linking and Embeddingの略称
    アプリケーション間でオブジェクトをやり取りするための規格
  • EXCELとの連携
    事前バインディング
    Dim オブジェクト変数 As Excel.Application
    Set オブジェクト変数=New Excel.Application
  • EXCELとの連携
    実行時バインディング
    Dim オブジェクト変数 As Object
    Set オブジェクト変数=CreateObject("Excel.Application")
  • OLEオートメーションのExcelオブジェクトの種類
    Excel.Application…Excel本体
    Excel.Sheet…Excelワークシート
    Excel.Chart…Excelグラフ
  • VBAの高速化
    定義域集計関数とRecordsetオブジェクト
    Recorset(SQL)が高速

    定義域集計関数
    MyStr=Dlookup("社員名","社員マスタ","社員番号1=’S08000’")
    ↓↓↓
    高速化書き換え例
    Set DB=CurrentDb()
    SQL="SELECT 社員名 FROM 社員マスタ WHERE 社員番号='S08000'"
    Set rs = DB.OpenRecordset(SQL)
    MyStr = rs.Filds("社員名")
  • VBA高速化
    DatabaseオブジェクトとRecordsetオブジェクト
    Datebaseオブジェクト
    For i=1 To 1000
    SQL=””INSERT INTO 社員マスタ
  • SQLのパターンマッチング
    ワイルドカードの記載例
    フィールド名 Like "パターン文字"

    種類
    *  任意の文字数 Like "*本"
    ? 任意の1文字 Like "?本"
    # 任意の1文字の数字 Like "#組"
    [文字リスト] 文字リスト内の1文字
    Like "g[eo]t"
    [!文字リスト] 文字リスト以外の1文字
    Like "p[!eo]t"
    [文字1-文字2] 文字1~2の範囲の1文字
    Like "b[a-c]t"
    [!文字1-文字2] 文字1~2の範囲以外の1文字
    Like "b[!a-c]t"
  • ANSI-89とANSI-92の違い
    ANSI-89…通常やDAOで使用 * ?
    ANSI-92…ADOで使用 % -
  • SQLレコード化 GROUP BY句
    のグループ化記載例
    SELECT * FROM テーブル名 GROUP BY フィールド名;
  • SQL GROUP BY句使用時のSQL集計関数種類
    SELECT 集計関数(フィールド名) As 別名 FROM テーブル名 GROUP フィールド名;

    Count(フィールド名)
    Avg(フィールド名)
    Sum(フィールド名)
    Min(フィールド名)
    Max(フィールド名)
  • SQL GROUP BY句使用時の条件指定
    HAVING句を使用

    SELECT * FROM テーブル名 GROUP BY フィールド名 HAVING 条件式;
  • SQL 内部結合
    INNER JOIN句の構文
    SELECT *
    FROM テーブル名
    INNER JOIN
    テーブル名 ON テーブル名.結合フィールド=テーブル名.結合フィールド
  • SQL 外部結合
    LEFT JOIN句
    RIGHI JOIN句
    SELECT *
    FROM テーブル名
    LEFT JOIN
    テーブル名 ON テーブル名.結合フィールド=テーブル名.結合フィールド
  • SQL 不一致レコードの抽出方法
    外部結合で抽出条件にNUllを指定することで不一致レコードを抽出することができる

    SELECT *
    FROM テーブル名
    LEFT JOIN
    テーブル名 ON テーブル名.結合フィールド=テーブル名.結合フィールド
    WHERE テーブル名.フィールド名=IS NULL;
  • SQL テーブル定義の変更
    新しいフィールドを追加
    ALTER TABER テーブル名 ADD COLUMN フィールド名 データ型(サイズ);
  • SQL テーブル定義の変更
    既存フィールドの属性変更
    ALTER TABER テーブル名 ALTER COLUMN フィールド名 データ型(サイズ);
  • SQL テーブル定義の変更
    既存フィールドの削除
    ALTER TABER テーブル名 DROP COLUMN フィールド名;
  • SQL インデックスを作成する
    CREATE INDEX インデックス名 ON テーブル名(フィールド名1、フィールド名2…)
    例)
    Dim StrSQL As String
    StrSQL ="CREATE INDEX idx備考 ON T在庫マスタ(備考;"
    Current.QueryDafs("Qクエリ").SQL = StrSQL
    Docmd.OpenGuery "Qクエリ"
  • SQL インデックスを削除する
    DROP INDEX インデックス名 ON テーブル名
  • ADOのオブジェクト
    7種類
    ・Connection
     データベースへの接続を保持する
    ・Command
     データベースのコマンドを保持する
    ・Recordset
     レコードの集まりを保持する
    ・Field
     フィールドを保持する
    ・Paramater
     パラメーターを保持する
    ・Property
     プロパティを保持する
    ・Error
     エラーを保持する
  • ADO
    データベースへの接続例
    Dim オブジェクト変数 As ADODB.Connection

    ※カレントDBへの接続
    Set cn=Currentproject.Connection

    ※カレントDB以外へ接続
    Set cn=New ADODB.Connection
    cn.ConnectionString="Provider=Microsoft.ACE.CLEDB.12.0;" & _
    "Date Source=データベースファイルのパス"
    cn.Open
  • ADO
    Recordetオブジェクトの記載例
    ■方法1RecordsetでOpenする
    Dim rs As ADODB.Recordet
    Set rs=New ADODB.Recordset
    rs.Open ソース,cn,カーソルタイプ,ロックタイプ

    以下の書き方でもOK
    Dim rs As New ADODB.Recordset
    rs.Open ソース,cn,カーソルタイプ,ロックタイプ

    ■ConnectionでExecuteする
    Dim rs As ADODB.Recordset
    Set rs=cn.Execute(コマンド)
    ※コマンド…テーブル、クエリ、SQlなど
  • ADO
    Recordsetオブジェクトのカーソルタイプ種類
    ・adOpenForwardOnly
    前方スクロールのみ。前方向のみの移動なので高速。その他は静的カーソルと同じ
    ・adOpenKeyset
    他のユーザによる追加・削除は確認できない。その他は動的カーソルと同じ
    ・adOpenDynamic
    動的カーソル。すべての方向に移動可能。他のユーザによる追加、更新、削除を確認できる
    ・adOpenStatic
    静的カーソル。すべての方向に移動可能。他のユーザによる追加、更新、削除を確認できない
  • ADO
    Recordsetオブジェクトのロックタイプ
    ・adLockReadOnly(規定)
    読み取り専用
    ・adLockPessimistic
    レコード単位の排他ロック
    ・adLockOptimistic
    レコード単位の共有ロック
    ・adLockBatchOptimistic
    共有的バッチ更新
    ・adLockUnspectified
    ロックタイプを指定しない
  • ADO
    Recordsetオブジェクトのメソッド種類
    ・Open
    ・Close
    ・Move
    ・MoveFirst
    ・MoveLast
    ・MoveNext
    ・MovePrevious 戻る
  • ADOの記載例 2種類
    方法1------------------------------
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = Currentproject.Connection
    Set rs = cn.Excute(テーブルなど)

    方法2------------------------------
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = Currentproject.Connection
    Set rs = New ADODB.Recordset
    rs.Open "テーブル等"cn,adOpenStatic
  • ADO
    レコードの更新方法
    Updateメソッドを使用する

    ① rs.Update フィールド1,値
    ② rs("フィールド").Value = 値

    ※Fieldオブジェクトの参照パターン
    rs!(フィールド名).Value
    rs.Fields("フィールド名").Value
    rs("フィールド名").Value
  • ADO
    レコードの追加方法
    rs.AddNew
    rs("フィールド").Value=値
    rs.Update
  • ADO
    レコードの削除
    rs.Delete
  • ADO
    レコードの検索
    Findメソッドを使用する

    rs.Find 検索条件,スキップ行,検索方向,開始位置

    記載例)
    Do
     rs.Find "住所1='愛知県'"
     If Not rs.EOF Then
     Debug.Print rs("社員名"), _
    rs("住所")
     rs.MoveNext
    Else
     Exit Do
    End If
  • FindメソッドでのNull検索
    rs.Find "フィールド名=Null"

    ちなみにSQLでは
    フィールド名 Is Null
  • ADO
    レコードの並べ替え
    Sortプロパティを使用する

    rs.Sort="フィールド名 ASCまたはDESC"

    ※並べ替えを行うには
    CutsorLocationプロパティに「adUserClient」を設定する必要あり



  • ADO
    レコードの抽出方法
    Filterプロパティを使用します

    rs.Filter="フィールド1=検索条件1 And フィールド2=検索条件2"
  • ADO
    レコードセットをフォーム表示等に使用する使用する例
    フォーム表示やコンボボックス、リストボックスに使用可能
    この場合は、CursorLocationプロパティに「adUseClient」を設定する必要あり

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = Currentproject.Connection
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.Open "テーブル名",cn
    Set Me.コンボ1.Recorset=rs

    コンボボックスの内容を解除
    Set Me.コンボ1.Recordset = Nothing
    Me.コンボ1.Requery




  • ADO
    トランザクションの実装方法
    以下のメソッドを使用
    BeginTrans…トランザクションを開始
    CommitTrans…変更内容を更新
    RollBackTrans…変更を取り消して元の状態に戻す

    記載例)
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = Currentproject.Connection
    Set rs = New ADODB.Recordset
    rs.Open "テーブル名",cn,adOpenKeySet,adLockOptimistic
    On Error GoTo ErrExit
    cn.BeginTrans
    Do Until rs.EOF

    Loop
    cn.CommitTrans
    Msgbox "トランザクションを確定しました"
    Exir Sub
    ErrExit:
    cn.RollbackTrans
    Msgbox "トランザクションを取り消しました"


  • ADO
    Excelブックへの接続方法
    記載例)
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim MyPath As String
    MyPath = CurrentProject.Path & "¥"
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & MtPath & "test.xlsx;" & _
    "Extended Properties='Excel 12.0;HDR=YES'"
    Set rs= cn.Excute("SELECT * FROM [Sheet1$])

    Do Until rs.EOF

    Loop
  • ADO
    例外処理 Errorオブジェクト
    Error オブジェクトのプロパティ
    ・Number
    ・Description
    ・Source

    記載例)

    Dim MyErr As ADODB.Error

    rs.Open "テーブル名",cn,adOpenKeyset,adLockOptimistic
    on Error GoTo ErrExit

    ErrExit:
    For Each MyErr In cn.Errors
    Msgbox "発生したエラー情報は次の通り” & vbCrLf & _
    MyErr.Number & vbCrLf & _
    MyErr.Source & vbCrLf & _
    MyErr.Description
    Next
  • DAOとADOの違い
    DAOにはテーブルやクエリを作成する機能あり
    Access単体で使用するのみ向いている
    参照設定する必要はない

    ADOはAccessのみでなく、SQLServerなどのデータベースにも接続できる
  • DAOでのデータベース接続方法
    Set DB = CurrentDb

    カレントDB以外
    Set DB= OpenDatabase("データベースファイルパス")
  • DAO
    テーブル・クエリの作成方法
    新規テーブルの作成
    CreateTableDefメソッドを使用する

    新規クエリの作成
    CreateQueryDefメソッドを使用する
  • DAO
    CreateTableDefの記載例
    Dim DB As DAO.Datadase
    Dim TD As DAO.TableDef
    Set DB = CurrentDb
    Set TD = DB.CreateTableDef("T在庫マスタ")
    TD.Fields.Append TD.CreateField("商品番号",dbText,4)
    TD.Fields.Append TD.CreateField("在庫数",dbLong)
    TD.Fields.Append TD.CreateField("在庫区分",dbText,4)
    DB.TableDefs.Append TD
    Set TD=Nothing:Set DB=Nothing
  • DAO
    CreateQueryDefの記載例
    Dim DB As DAO.Datadase
    Dim QD As DAO.TableDef
    Set SQL As String
    Set DB = CurrentDb

    SQL="SELECT * FROM T社員名簿 WHERE 年齢>=50;"

    Set QD = DB.CreateQUERYDef("Q50以上社員",SQL)
    Set TD=Nothing:Set DB=Nothing
  • エラーの種類
    コンパイルエラー
     文法の誤りなど

    実行時エラー
     コード実行時に処理継続できないエラー

    論理エラー
     プログラムが目的通りに動作しない
  • On Errorステートメントとは
    エラーが発生した時に実行する処理を指定するステートメント
    On Error Gotoステートメント
    On Error Resume Nextステートメント
    On Error Goto 0ステートメント
  • On Errorステートメント
    On Error Gotoステートメントとは
    エラーが発生したときに行ラベルの場所に移動して以降の処理を実行する

    例)
    Dim MyNumber As Long
    On Error Goto ErrExit
    MyNumber = InputBox("数字を入力" )
    MsgBox MyNumber & "の値が入力されました"
    Exit Sub
    ErrExit:
    MsgBox "数値が入力されませんでした"
    End Sub
  • On Errorステートメント
    On Error Resume Nextステートメントとは
    エラーが発生してもエラーを無視して処理を継続する

    例)
    On Error Resume Next
    Debug.Print 100/0
    Debug.Print 100/1
    Debug.Print 100/2
    Debug.Print 100/4
    End Sub

    「100/0」は0除算エラーだがエラーメッセージは表示されない
  • On Errorステートメント
    On Error Goto 0ステートメントとは
    エラートラップを無効とする
  • Resumeステートメントとは
    エラーが発生した際、処理を再実行する時に使用するOn Error Gotoステートメントが有効な時、エラー処理ルーチンでエラー処理を行った後、指定の場所から処理を再実行します
    Resume
    Resume Next
    Resume 行ラベル
  • Resume ステートメント
    Resumeとは
    エラーが発生した場所から処理を再実行する
    例)

    Sub Test()
     Dim MyNumber As Long
     On Error Goto ErrExit
     MyNumber = InputBox("数値を入力")
     MsgBox MyNumber & "の値が入力されました"
    ErrRetry:
    ExitSub
    ErrExit:
    Select Case MsgBox("もう一度入力する?")
    case vbYes
    Resume
    Case vbNo
       Resume Next
     Case vbCancel
       Resume ErrRetry
    End Select
    End Sub
  • Errオブジェクトとは
    実行時エラーが発生するとErrオブジェクトにエラーを識別する為の情報が格納される
    Number…エラーの番号を返す
    Description…エラーの情報を返す
  • エラー番号とエラー情報の種類
    6…オーバーフローしました
    7…メモリが足りません
    9…インデックスが有効範囲にありません
    11…0除算しました
    13…型が一致しません
    17…要求された操作は実行できません
広告

コメント