サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
tsware.jp
Excelで[ファイル]-[開く]メニューを実行すると、「ファイルを開く」ダイアログが表示されますが、そこではファイルの種類としてAccessのデータベースファイル、"MDB"や"MDE"ファイルを選択することができます。 ここでAccessのファイルを選択すると、次のような画面が現れます。ここには、そのデータベース内に存在する表(テーブルのこと)が一覧表示されています。 そして、特定のテーブルを1つ選択して[OK]ボタンをクリックすると、そのテーブルのデータを丸ごとExcelのシートに取り込むことができます。 AccessのテーブルのデータをExcelで利用するには、Access側においてエクスポートやOffice Linksを実行する方法がありますが、このようにExcel側の操作でも簡単にデータを取り込むことができます。
Accessでテーブルを扱う場合、外部の共有用のデータベースファイル上のテーブルを”リンクテーブル”として扱うことも多いでしょう。一方、リンクテーブルだけでなく、作業用としてローカルのテーブルもいっしょに使っている場合もあると思います。 そのようなとき、すべてのテーブルを探索して、リンクテーブルだけを指定のデータベースファイル上の”同名”のテーブルと再リンクし直す方法です。 処理としては、全テーブルをループで探索し、それがリンクテーブルだったらそのテーブルの「Connect」プロパティ(テーブルの「説明」プロパティ)の値を書き換えます。 Dim dbs As Database Dim tdf As TableDef Const cstrBackDBPath As String = "C:\Data\Database2.accdb" Set dbs = CurrentDb '全テーブルの探索
テーブルやクエリと連結しているデータをフォーム上に表示している際、カレントレコードが保存されていない状態、すなわちレコード編集中の状態で、裏でVBAのプログラムで同じデータを編集したり、あるいはネットワーク環境で何からのデータ編集が行われたりした場合、フォーム上のレコードを保存しようとすると次のようなデータ競合の警告メッセージが表示される場合があります。 このメッセージ表示を抑止して、データ競合エラーを無視させることができます。 それには、フォームの「Error/エラー時」イベントプロシージャに次のようなコードを記述します。 Private Sub Form_Error(DataErr As Integer, Response As Integer) If DataErr = 7787 Then Response = acDataErrContinue End If End Sub For
「Debug.Print」という命令は、VBAのプログラムにおいて、処理途中の変数の内容や処理の進捗状況を示す文字など、さまざまな情報をイミディエイトウィンドウに出力する命令です。 またステップ実行中に直接イミディエイトウィンドウに関数式などをこの命令文とともに書き込むことで、その時点のさまざまな情報を取得することもできます。また、実行中でなくても、ちょっとした関数のテスト、たとえば「Debug.Print Date()」といった命令を実行することで今日の日付をイミディエイトウィンドウに表示させるといった使い方もできます。 ※プログラム中ではなくイミディエイトウィンドウに直接書き込む場合は「?Date()」という書き方もできます。 イミディエイトウィンドウに出力するだけですので、通常のアプリケーションの動作としては無意味で、主にデバッグ時に利用します。 デバッグ作業においては非常に役立つ命
クエリーでは、元となっているテーブルのフィールドをそのまま使うだけでなく、それに演算を加えた「演算フィールド」を新たに作成することができます。そしてそれは、四則演算や"&"による文字列結合、Mid$やInstrといった組み込み関数だけでなく、オリジナルの関数を呼び出して使うこともできます。ここではその一例を紹介します。 まず、オリジナルの関数をVBAで作る際のポイントです。 "標準モジュール"にプロシージャを作成する プロシージャは"Function"プロシージャとする このポイントに基づいて、一例として、2つの数値を引数とし、その加算結果を返り値とする簡単なFunctionプロシージャを作成してみます。 続いて、クエリーからのこのプロシージャの呼び出し方法です。 下図の様に、クエリー上のフィールド名(ここでは税込金額)を設け、":"に続けて、税抜金額と消費税額の2つのフィールド値を引数と
Dim dbs As Database Dim rst As Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("住所テーブル") With rst Do Until .EOF Debug.Print !ID, !氏名, !住所, !郵便番号 .MoveNext Loop .Close End With Dim cnn As Connection Dim rst As Recordset Set cnn = CurrentProject.Connection Set rst = New ADODB.Recordset With rst .Open "住所テーブル", cnn Do Until .EOF Debug.Print !ID, !氏名, !住所, !郵便番号 .MoveNext Loop .Close End Wit
あるフォームを開いてデータ入力を行い、そのフォームが閉じられたら次の処理(ステートメント)を続行したいような場合、そのフォームが"ダイアログ"に設定されていれば自動的にVBAのコードは停止した状態になりますが、それ以外のフォーム、あるいはレポートのプレビューウィンドウではすぐに次のステートメントが実行されてしまいます。そのような場合に利用できる、指定したオブジェクトが閉じるまで待機するSubプロシージャをご紹介します。 Public Sub WaitObjectClose(intObjType As Integer, strObjName As String) 'intObjType には acTable、acForm、acReportなどの定数を指定します 'strObjName にはそのオブジェクト名を指定します Do DoEvents 'SysCmdでオブジェクトが開いているか確認し
ExcelのワークシートをAccessのテーブルとしてインポートする際は、ワークシートの先頭から8行分に保存されているデータが事前にチェックされ、各列のAccessテーブル上でのフィールドのデータ型が決定されます。 そのため、数値や文字の両方を含んでいる列(Access上では「テキスト型」にすべきフィールド)であっても、ワークシートの前の方に数値データしか格納されていないと、Access上では「数値型」フィールドと定義され、文字データを含む行をインポートする際にデータ型変換のエラーが発生してしまいテーブルには取り込まれません。 CSVファイルのインポートでは各例をどのようなデータ型として取り込むかをユーザーが設定できますが、Excelのファイル(.xls等)の場合はそのような設定ができないため、何らかの工夫をする必要があります。 たとえば、Excel側で事前に先頭8行にあえてデータ型が混在
本題材の従来のAccessデータベースファイル(.accdb)におけるVBAのプログラムでは、Access固有のデータベースエンジンであるJetデータベースエンジンを介してテーブル等にアクセスしています。accdbでは、Jetデータベースエンジン用のライブラリである「DAO」も、また「ADO」も利用することができます。 しかしADP(.adp)では、外部のSQL Serverがデータベースエンジンとなりますので、「DAO」は使えません。もし元のデータベースファイルのVBAのプログラムにおいて、DAOを使ったコードを書いている場合にはすべてそれをADOのコードに書き換える必要があります。 そこでここでは、モジュールのVBAのプログラムにおいて、DAOからADOへの変更を行います。 まずその最初のステップとして、VBAの「参照設定」を変更します。 アップサイジングウィザードを利用してADPを作
AccessでPaSoRiを使うDLL Accessから、PaSoRi(パソリ)を使ってFeliCaのICカード固有のIDmを読み取る、DLLファイルとその利用例のVBAコードのサンプルです。 本DLLファイルならびにサンプルのAccessデータベースはフリーウェアです。自由にお使いください。VBAのソースもいじれますので、自由にカスタマイズしてお使いください。ただし、サポートは一切できかねますので、ご自分の責任においてご利用ください。 。 特 徴 このIDm読取用DLLを使うと、PaSoRiを使って、FeliCaのICカード固有のIDmを読み取ることができます。 FeliCa対応のICカードとして、Edy、Suica、nanaco、WAON、PASMO、ICOCA、おサイフケータイなどのIDmを読み取ることができます。 ※ただしそれらすべてのカードについて動作確認はしていません。また、読
アクセスでGoogleマップ Ver 2 Accessのフォーム上にWebブラウザコントロールを使ってGoogleマップを表示し、テーブルに保存された住所にマーカー(赤い旗)を立てる、Microsoft Access 2010用のサンプルデータベースです。Access2010から標準コントロールとなったWebブラウザコントロールの使い勝手を見てみようと思って作ってみました。 本データベースはフリーウェアです。自由にお使いください。デザインやVBAのソースもいじれますので、自由にカスタマイズして使っていただいてかまいません(エラー処理なども完全ではないかもしれませんのでむしろアレンジしないと本格的には使えないかもしれませんね)。ただし、サポートは一切できかねますので、ご自分の責任においてご利用ください。 。 特 徴 Accessのテーブルに、場所の名前と住所を登録しておくことで、Googl
AccessのVBAからOutlook(ここではVer2002)を呼び出して、受信メールの内容を取り込むプログラム例です。 このプログラム例では、受信メールの件名をチェックして、指定の件名であればその発信元メールアドレスと本文をイミディエイトウィンドウに出力するだけですが、これを応用すれば、Outlookの受信メールをAccess側で仕分けして、HTMLのフォームから送信された「商品注文」のような定型的なメールの内容を、受注テーブルなどに半自動で取り込む処理も実現できると思います。 ※このプログラムを実行するには、「Microsoft Outlook 10.0 Object Library」のライブラリに参照設定を行う必要があります。 Sub OutlookMailRciv() Dim olApp As Outlook.Application Dim olNameSpace As Outl
次のように、すでに開かれている別のフォームのコントロールの内容を参照したい場合があります。 別のフォームのテキストボックスの内容を自分のフォームのテキストボックスの初期値として表示したい。 別のフォームのテキストボックスの内容を自分のフォームのラベルに表示したい。 別のフォームのオプショングループの選択値を自分のフォームにも反映させたい。 別のフォームのチェックボックスのON/OFFに応じて自分のフォームの編集可否を設定したい。 別のフォームのリストボックスと同じ値集合ソースを使いたい。 などなど。 このような場合には、次の構文を使って別のフォームのあるコントロールのプロパティ値を取得することができます。
追加クエリ・更新クエリ・削除クエリといったアクションクエリをVBAから実行するには、主に次のようなケースによって処理方法を使い分けます。 アクションクエリが”クエリ”としてデータベースに保存されている場合 SQL文をVBAで動的に組み立てて処理する場合 ■DoCmdオブジェクトのOpenQueryメソッドを使った方法 ※この方法は、アクションクエリが”クエリ”としてデータベースに保存されている場合に使います。 ※SetWarningsをFalseとすることで、アクションクエリ実行前の確認メッセージを表示させずに、そのまま即実行させることができます。 ■SQL文で指定する場合(Databaseオブジェクトの「Execute」メソッドを使用) Dim dbs As Database Dim strRate As String Dim strSQL As String Beep strRate
VBAの一連のコードの中で、処理と処理との間で一定時間待機する方法をご紹介します。 ここではまず Timer関数 を使ってそれを実現するサンプルプロシージャを示します。Timer関数は午前0時からの経過秒数を単精度浮動小数点数型(Single)で返す関数です。このサンプルプロシージャは、一定時間待機する部分を含むプロシージャから、 Sub WaitSec(sngWaitSec As Single) Dim sngCurTimer As Single '現時刻のTimer関数値に引数の秒数を加えて指定時間経過後の値を設定します sngCurTimer = Timer + sngWaitSec '現時刻のTimer関数値が所定の経過後の値になるまでループで待ちます Do Loop Until Timer >= sngCurTimer End Sub しかし、上記のコードには1つ問題点があります
Vol.1のテーマは「T'sKitでAccess解剖」と題して、Accessの一般的なユーザーインタフェースを使ってのデータベースアプリケーション開発ではあまり触れることのないDAOやMDBの内部構造について、その解析方法や利用方法をStudyしていきます。 "T'sKit"は拙作のAccess97アドインツールです。このテーマの内容がより分かりやすくなると思いますので、ぜひダウンロードして見てください。T'sKitについてはこちらをクリックしてください。
Vol 20 Access365/2007プロパティ比較資料 多くのテーブル/クエリ/フォーム/コントロールを持っているデータベースを解析し、そこから各構造に関する情報を収集するためのサンプルコードを紹介します。広い範囲に影響を及ぼすような改変を行うときなどにその影響範囲を調査するなど、データベースの開発時に使える内容になっています。 Vol 19 データベース解析・収集サンプルコード集 Accessの主要オブジェクトについて、Access2007から365(2021/12現在のビルド)の間のプロパティの変更ケ所をVBAプログラミングの観点から整理しています。特に、Access2007より後に追加されたプロパティ(あるいはコントロール)については、その概要を簡単に説明しています。 Vol 18 Accessアップサイジング実例 すでに作成されているスタンドアロン用のAccessのデータベー
Accessでは、CSVファイルなどのテキストファイルをAccessのテーブルとしてインポートする際、CSVファイル上の各列をテーブル上のどのような形式のフィールドとして取り込むかを定義しその定義を保存しておくことができます。 通常のマニュアルによるインポート操作では、テキストインポートウィザードの画面左下の[設定]ボタンをクリックすることによって「インポート定義」ダイアログが表示されますので、そこでフィールド情報を定義したり、[保存]ボタンでそれを保存したり、あるいは[定義]ボタンによって保存済みの定義を呼び出してそのインポート処理に適用させたりすることができます。 このインポート定義を使うことによって、次回同様のインポート操作を行う際にわざわざ再度フィールド定義をする必要がなくなります。またVBAでインポートを自動化する際にも、インポート定義名を引数に指定してインポートさせることもでき
■SSISの概要 SQL Server Integration Services(略称「SSIS」:データ統合サービス)は、Microsoft SQL Serverに装備された“データ転送ツール”で、SQL Server 2000以前ではDTS(Data Transformation Services:データ変換サービス)と呼ばれていたものをより高度にしたツールです。 SSISを利用することで、SQL Serverのテーブル間のデータ転送はもとより、Access、Oracle、ODBC対応のデータベース、さらにはExcelファイルやCSVファイル・固定長テキストファイルなど、さまざまなデータソースからSQL Serverへとデータを取り込んだり、あるいはその逆にSQL Serverの方からそれらへデータを出力したりすることができます。 さらに特徴的なものとして、bcpコマンドなどは比較的単
結論 レコード追加では「QueryDefやDatabaseオブジェクトを使うよりDocmdを使った方が速い」、またCurrentDb関数によってデータベースを開く場合とDocmdを使った場合それぞれでは「SQL文を直接発行するより保存済みクエリーを使った方が速い」。また、リンクテーブルを対象としたレコード削除では、「Docmdを使うよりをQueryDefやDatabaseオブジェクト使った方が速い」。 追加クエリーや更新クエリー、削除クエリーといったアクションクエリーを実行したい場合、もっとも簡単なのはデータベースウィンドウからそれらのクエリーを選択して[開く(O)]をクリックすることです。複雑な処理を行うのではなく、いくつかのアクションクエリーを実行するだけで完了するような簡単な処理で、かつある程度Accessを使える人であればその方法で充分でしょう。もしAccessそのものを知らない人
データシート形式で表示されているフォームでは、列全体(列名部分)を右クリックして表示されるショートカットメニューから[列の幅]を選択すると、「列の幅」ダイアログが表示されます。 このダイアログでその列幅を変更することができますが、次の4種類の設定方法が可能です。 数値を指定するとその幅に変わる 「0」を指定すると非表示になる [標準の幅]にチェックを付けると既定の幅になる [自動調整]ボタンをクリックすると最適幅(データ内容がすべて表示される幅)になる ここで、VBAを使って上記のような操作を行ういくつかの例を紹介します。 次のようなフォームを作って、[実行]ボタンのクリック時イベントプロシージャにいくつかのパターンでプログラムを記述します。なお、「frm売上明細_sub」はデータシート形式であるサブフォームコントロールの名前、「cmd実行」がボタンの名前です。 例1:「商品名」の列幅を1
このシリーズは、Accessをすでに業務に使用している方のためのVBAプログラミングの入門講座です。VBAの基本文法からフォームやコントロール操作、テーブル操作など、Access VBAの基礎を一通り解説します。
結論 データ更新がなく参照だけのテーブルの場合には正規化せずに単独のテーブルにすべてのデータを含めた方がよい。一方データ更新の場合には、マスタ上のデータが使われる頻度が30以上の場合にはリレーションシップの連鎖更新を利用した方が速い。 この Access Labo ではデータベースアプリケーションの高速化についてさまざまな実験を行っていますが、『正規化』の問題はAccessだけに限らず、より高速で効率的なリレーショナルデータベースを設計する上で最も根本的に考慮すべき課題といえます。正規化とは、一口で言ってしまえば「データやディスクスペースをより効率的に扱うためのテーブル設計手法あるいはテーブル分割手法」です。例えば「商品仕入データ」というものがあるとします。このデータは「仕入日」、「商品コード」、「商品名」、「仕入数量」から構成されているとします。最終的にフォームやレポートで出力する場合に
このシリーズでは、AccessやSQL Serverのデータベースファイルを、PHPを使ったWebページで処理する方法について説明します。PHPを使ってテーブルのデータを表示したり編集したりするための、基本的なスクリプトを紹介します。 AccessやSQL Serverのデータベース操作固有のPHPスクリプトについてのみ紹介します。PHPの一般的な文法や関数などについては触れませんので、それらに関しては関連書籍等を参考にしてください。 本シリーズは、Windows XP、IIS、PHP5.0、Access2003、SQL Serever2003を動作環境としています。
結論 レコード追加や削除ではインデックスを付けない方が速く、レコード選択ではフィールド数によってインデックスを付けた方がよい場合と付けない方がよい場合があり、フィールド数が多い場合にはインデックスを付けた方がよい。ただし、いずれの場合も試行錯誤は必要か? データベースのパフォーマンスを最適化しようとする時に、正規化などによってテーブル構造を見直したり、テーブルのインデックスの付け方に目を向けることは重要である、というのをよく見聞きします。そこで、ここでは実際にテーブルにインデックスを付けた場合と付けない場合でどのくらいの時間的違いがあるのかを検証してみたいと思います。 テストの内容としては、6種類のテーブルに対して、それぞれ5万件のレコード追加と一部のレコードの読み込み、全レコードの更新、さらに全レコードの削除をVBAを使って行うものです。レコードの読み込みではインデックスの設定されている
結論 MDBファイルでデータベースを構築する場合、データアクセスの実行時間の観点からはDAOの方がほんのわずかであるが優位である。 Access2000から、Accessの扱うデータベースの形式が2つになりました。従来からあったMDBファイルと新しいADPファイルです。また、これに対応した形でデータアクセスの方法も従来のDAO(Data Access Object)に加えてADO(Microsoft ActiveX Data Objects)が本格的に加わることとなりました。SQL Serverのようなサーバーベースのデータベースをバックエンドとして扱う場合、ADPでAccessのデータベースを構築することによって従来の開発環境にはなかったさまざまな恩恵を得ることができます。しかし、かといって従来のODBC経由のリンクテーブルへのアクセスやパススルークエリー、ODBC Directを使った
Accessデータベースファイル内にあるテーブルからレコードを読み込むには、次のような手順でスクリプトを記述します。 「odbc_connect関数」によってAccessデータベースに接続します。 「odbc_exec関数」を使って、SELECT文を使ったSQLをデータベースに対して発行します。 この関数では、最初の引数にodbc_connect関数の返り値である接続IDを、第2引数にSQL文を指定します。 SELECT文を発行した場合、odbc_exec関数の返り値が、取得した結果セットを表わすIDとなります。 続いて、「odbc_fetch_row関数」を使って1レコード分のレコード移動を行います。引数には、odbc_exec関数の返り値である結果セットIDを指定します。 この関数を実行すると、カレントレコードを示すポインタが1つ次のレコードに進みます。最後のレコードまで達したあとにこ
Accessにはテーブルウィザードやフォームウィザード、コードビルダ、リンクテーブルマネージャなどさまざまなアドインがあらかじめ組み込まれています。しかもAccessでは、既製のアドインを利用するだけでなく、Access自身でこのアドインを作ることもできるのです。VBAなどを日頃使っている人なら決して難しいものではありません。普通のデータベースアプリケーションとの違いやアドインとして動作させるための数少ないポイントだけ押さえれば、簡単にオリジナルアドインを作成することができます。そしてそれがこのVol.2のテーマです。 本シリーズは Access2000 での開発を前提に作成しています。 ここで作成したサンプルアドインのソースがダウンロードできます →
拙著「商売繁盛!アクセスで販売顧客管理」の最新版執筆に伴い、Access2000~2003対応の販売顧客管理データベースを「Access2007+Vista」対応に移行する作業を行いました。その作業で行ったこと・気付いたことなどについてレポートします。 「.accdb」への変換と起動時の画面 まずはじめに行ったことは、Access2000形式の「.mdb」ファイルを、2007形式である「.accdb」に変換する作業です。 それには次のような操作を行います。 Access2000形式の販売顧客管理データベースをAccess2007で開きます。 Officeボタンより[変換]を選択します。 「名前を付けてダイアログ」が表示されたら、「ファイルの種類」が”Access2007データベース(.accdb)”であることを確認して[保存]ボタンをクリックします。 この作業はエラーなど出ることなく終わり
次のページ
このページを最初にブックマークしてみませんか?
『T'sWare for Access Users & Access Developers』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く