Iniファイルを使用してAccessVBAのプログラミングをしたいのですが、記述方法が分かりません。また、Iniファイルを使用するメリット・デメリットなんかも教えていただければと思います。

A 回答 (2件)

レジストリを使うほうがスマートかもしれませんが、iniファイルを


使用した場合、テキストファイルなので簡単に変更できる、という
メリットがありますね。テストとかもしやすいですし。
逆にそれがデメリットでもあるのかな?
レジストリはなかなか恐ろしくて変更できないですね。

ちなみに、iniファイルをアクセスするのはWindowsAPIを使用したほうが
簡単です。以下をAccessで定義すればAccessVBAで使用できると思います。

Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long
    • good
    • 0

確か、APIを使わないと出来なかったと思います。



同様の処理は、最近ではレジストリを使用するのが一般的ではないでしょうか。Getsetting、SaveSettingを使用すればそれぞれ値を取得、セットできますよ。

自分が使っている方法は、最後に入力した日付を保存しておいて次に起動した時のデフォルト値にする、マシン毎の環境設定を保存しておいてマシンにより実行できるプログラムを固定する、などですかね。
デメリットはレジストリの読み書きが多くなるのでレジストリ部分が肥大化する(?)ことでしょうか。影響が出るほど肥大化したことはまだないですが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessVBAを使用して、DB内を検索する画面を作成したいのですが。

Accessのヴァージョンは2000以降です。
フォーム上で、テキストボックスに入力して、検索ボタンを押すと、検索結果が表示される物を作りたいのです。

SQLの知識はあるので、SQL文は記述できるのですが、どうすれば検索結果が表示されるのかわかりません。

検索ボタンをクリックしたときにどういう処理をするのか、また、検索結果画面はどのように作っておけばよいのか等、少しでも多くのご回答をいただきたいです。

本やサイトも色々見たのですが、見あたりませんでした。
そのようなサイトがありましたら是非教えていただけると助かります。

お忙しい中申し訳ありませんが、本当に困っています。
よろしくお願いいたします。

Aベストアンサー

VBAはやっぱり知っておいた方がよろしいかと思います。
と言っても、下記の例ではほんのちょっとだけですけど。
ほとんど中身はSQLです。
応用するにはさらに知らねばならないでしょう。

まず、テーブルは「テーブル1」と言う名前で項目「氏名」と「体重」だけ作ります。
フォームは「表形式」を選択し基になるテーブルに「テーブル1」を選択し作成してください。
フォーム名は「フォーム1」で保存してください。

できたフォーム1に「氏名選択」という名前でテキスト入力フィールドを作成してください。
さらに検索ボタンを作成し、「検索」と言う名前で保存。
プロパティ-の「クリック時」で下↓のボタンを押し「イベントプロシージャ」を選択。
右端の「・・・」を選択するとVBAを記述できる画面が出てきます。
そこに下記内容を記述

Private Sub 検索_Click()
Forms![フォーム1].RecordSource = "SELECT * FROM [テーブル1] where forms![フォーム1]![氏名選択] = [テーブル1]![氏名]"
End Sub

VBAはやっぱり知っておいた方がよろしいかと思います。
と言っても、下記の例ではほんのちょっとだけですけど。
ほとんど中身はSQLです。
応用するにはさらに知らねばならないでしょう。

まず、テーブルは「テーブル1」と言う名前で項目「氏名」と「体重」だけ作ります。
フォームは「表形式」を選択し基になるテーブルに「テーブル1」を選択し作成してください。
フォーム名は「フォーム1」で保存してください。

できたフォーム1に「氏名選択」という名前でテキスト入力フィールドを作成してください...続きを読む

Q正規形のメリット&デメリット

数日前に「正規形の定義」が知りたくて、質問を書いたものです。
すばらしい解答をいただき、正規形の定義は理解できた私ですが、また新たな問題にぶつかってしまいまし。正規化することに、一体、どんなメリット&デメリットがあるのでしょうか?どなたか、教えてください。

Aベストアンサー

正規化のメリットに関して最も重要な点は、データの保守であろうと思います。
複数のテーブルに散在したデータの更新は、テーブル数が多くなると、それに応じて労力が必要になります。
また、同じ意味を持つデータでも表現が異なり、データを修正する場合に、SQLに全ての場合を記載する必要が出てくる、即ち、データを全てのテーブルで洗い出しをしないと完全な修正が行えない、といった問題が出てきます。

但し、第三正規化の段階で、数行のテーブルを数多く作ることになるため、データの修正が発生しないことが判明している(規制当局が指定した用語で将来に渡って変更がないものなど)場合、単一テーブルでしか使用しない場合等では、敢えて正規化しない場合もありますが、データの修正・保守の観点からの判断必要だと思います。

上記のように記載しましたが、よほどのことが無い限り正規化は行うべきと考えています。

QAccessとCGIでのデータ管理のメリット・デメリットについて

500件ほどの調査報告データを管理することになったのですが、
管理方法に関して意見が分かれて困っています。

A)Accessで管理する
B)CGIで管理する

管理条件等に関しては下記の通りなのですが、
この場合、適しているほうはA・Bのどちらなのでしょうか。
また、私としてはAccessよりCGIでの管理の方が向いていると思っているのですが、
Access・CGIで管理する利点・欠点を教えて頂けると助かります。

※Accessで管理すると、共有サーバで複数の人間が閲覧すると
 DBが破損する危険性が高いということや、
 レコード件数が増えることによりレスポンスが遅くなる、
 という欠点があることは分かりましたが、それ以外でもしあったら…。

※全ての条件を満たしているCGIはすでに見つけてあり、即設置することは可能です。
 Accessの場合は、これからシステムを作ってもらうことになります。

なお、当データの管理は短期的・暫定的なもので、
開発や設置にあまり時間をかけたくはないと思っています。


<データについて>
 調査報告データは基本的には文章。短いもので4行~多いもので50行ほど。

<目的>
 調査報告データを検索し、類似のデータがないかを調べ、閲覧すること。
 新しい調査報告の追加、既存の報告データの修正。

<欲しい機能>
 データの検索
 使用頻度順での並び替え
 調査内容別のカテゴリ分類

<希望>
 設置・導入までが短期間で終了する
 専門的な知識がなくても扱える
 使用時に重くない(極力)

お手数ですが、よろしくお願いします。

500件ほどの調査報告データを管理することになったのですが、
管理方法に関して意見が分かれて困っています。

A)Accessで管理する
B)CGIで管理する

管理条件等に関しては下記の通りなのですが、
この場合、適しているほうはA・Bのどちらなのでしょうか。
また、私としてはAccessよりCGIでの管理の方が向いていると思っているのですが、
Access・CGIで管理する利点・欠点を教えて頂けると助かります。

※Accessで管理すると、共有サーバで複数の人間が閲覧すると
 DBが破損する危険性が高いというこ...続きを読む

Aベストアンサー

度々すいません.
「なんでもかんでもAccessで」というのは好ましくありませんね.道具を定めることは悪くないんですが・・・
あまり勝手なことを申し上げるのもなんですが,次のようなポイントで説得してはどうでしょうか?
文章を読む限り,Accessのデメリットは納期までのスピード以外になさそうです.技術的にもAccessの自社開発は慣れているようですし・・・

・短期的暫定的であることを強調する為に具体的にいつからいつまで使う予定かを決める.(CGIなら実現できてAccessでは実現でき無そうな日程?)

・CGIの既存のものの機能を調べて書き出し(箇条書きでいいと思います),開発部門に渡し,同じものを作るとしての納期を回答させる.回答期限も大切.

・Accessにすることでシステムの稼動時期が遅れるとどれ位コストが発生するのかを説明し,Accessにすることで,どうやって遅れによるコストを取り戻すつもりなのか尋ねる.


繰り返しますが,以上のことは
・すぐにシステムに稼動して欲しい
・システムは短期的,暫定的にしか使わない
・すぐに使えるCGIパッケージがある
が前提です.

今後,再び同じようなことをやる可能性がある場合は拡張性からAccessが有利であり,急ぐわけではない場合は保守性からAccessが有利であるという意見には変わりません.
まして自社開発するときにAccessを用いるという方針があるのならば尚更です.


質問を覆すようなことで申し訳ないのですが,500件程度のデータに対して
・調査報告データを検索し、類似のデータがないかを調べ、閲覧すること。
・新しい調査報告の追加、既存の報告データの修正。
以上のことを短期的にやるだけならExcelにして人間が頑張るってことでも出来ると思いますよ.定期的に繰り返しやるなら話は別ですが・・・

あまり要領の良くない回答で申し訳ありません.

度々すいません.
「なんでもかんでもAccessで」というのは好ましくありませんね.道具を定めることは悪くないんですが・・・
あまり勝手なことを申し上げるのもなんですが,次のようなポイントで説得してはどうでしょうか?
文章を読む限り,Accessのデメリットは納期までのスピード以外になさそうです.技術的にもAccessの自社開発は慣れているようですし・・・

・短期的暫定的であることを強調する為に具体的にいつからいつまで使う予定かを決める.(CGIなら実現できてAccessでは実現でき無そうな日程?...続きを読む

QAccessのクロス集計クエリから、追加クエリをvbaで記述したいが記述が分からない。

Windows7のAccess2007を使っています。
Accessのクロス集計クエリから、追加クエリをvbaで記述したいが記述
が分からない。

vbaを使わなければ、データベースウインドウで最初にクロス集計のク
エリを作って、そのクエリを使って追加クエリを作れば終わりですが。
これと同じ事をvbaで記述をしたいのですが。

出来るのでしょうか。

例として、収穫テーブルとサイズテーブルのクロス集計を作ると仮定し
て下記の構造で作る物とします。
収穫テーブルは下記の構造です。
1. idと言う名前でオートナンバーの型
2. サイズと言う名前で数値の型

サイズテーブルは下記の構造とします。
1. idと言う名前でオートナンバーの型
2. 名前と言うフィールドの名前でテキストの型

収穫のテーブルは下記のデータが入っています。
ID サイズ
1 1
2 2
3 2
4 2
5 1
6 2
7 3

サイズのテーブルは下記のデータが入っています。
ID 名前
1 大
2 中
3 小

リレーションシップは、一側のテーブルがサイズのテーブルで、idを主
キーとします。多側のテーブルは、収穫のテーブルで多側のキーはサイ
ズです。

ここで、クエリ1の名前で
TRANSFORM Count(収穫.ID) AS IDのカウント
SELECT 収穫.ID
FROM サイズ INNER JOIN 収穫 ON サイズ.ID = 収穫.サイズ
GROUP BY 収穫.ID
PIVOT サイズ.名前;

を実行すると、下記が得られます。
ID 小 大 中
1 1
2 1
3 1
4 1
5 1
6 1
7 1

ここで、クエリ1を使って下記のクエリ2を作ります。
INSERT INTO table1
SELECT クエリ1.*
FROM クエリ1;

上記の操作でクエリ1のクロス集計クエリを使って
クエリ2の追加クエリと言う二つの手段で
クロス集計からデータを作る事が出来ます。

この操作をvbaの手法で作る方法は無いのでしょうか。
この例でのコードの記述を宜しくお願いします。

Windows7のAccess2007を使っています。
Accessのクロス集計クエリから、追加クエリをvbaで記述したいが記述
が分からない。

vbaを使わなければ、データベースウインドウで最初にクロス集計のク
エリを作って、そのクエリを使って追加クエリを作れば終わりですが。
これと同じ事をvbaで記述をしたいのですが。

出来るのでしょうか。

例として、収穫テーブルとサイズテーブルのクロス集計を作ると仮定し
て下記の構造で作る物とします。
収穫テーブルは下記の構造です。
1. idと言う名前でオートナ...続きを読む

Aベストアンサー

こちらが参考になるでしょう。
http://www.accessclub.jp/bbs6/0008/das1904.html


おまけ、上記を参考にした
一応動作するコード。

Dim strSQL As String
strSQL = "INSERT INTO table1 " & _
   "SELECT Q.* " & _
   "FROM [" & _
   "TRANSFORM Count(収穫.ID) AS IDのカウント " & _
   "SELECT 収穫.ID " & _
   "FROM サイズ INNER JOIN 収穫 ON サイズ.ID=収穫.サイズ " & _
   "GROUP BY 収穫.ID " & _
   "PIVOT サイズ.名前 " & _
   "IN ('大','中','小')" & _
   "]. As Q"
Debug.Print strSQL
CurrentDb.Execute strSQL

QCOBOLソースに記述するホスト変数を使用したSELECT INSER

COBOLソースに記述するホスト変数を使用したSELECT INSERT分に関する質問です。

COBOLのソースに下記のようなSQL分を記述した際、どのような制御でホスト変数にはどのような値が代入されるのでしょうか?

SELECT MAX(columnA) INTO :H1010:H2020 FROM A_TABLE WHERE …(以下抽出条件)

※H1010及びH2020はホスト変数定義しているものとします。

SELECTを行った項目数とINTO句にて指定した変数の数が異なる場合、エラーとなる記憶があります。
また、複数のホスト変数を使用する場合、カンマ区切りが必要だった記憶もあります。

実際に実行したところ、エラー等無く実行されました。結果を見るとH1010には値が代入され、H2020は初期値のままでした。
どのような制御でこの結果になっているのでしょうか?

参考までに、DBMSは「symfoware」です。

もしご存知の方がいらっしゃいましたら、ご教授頂けると助かります。よろしくお願いします。

Aベストアンサー

一個の列の設定や受け取りで、

:値の受け取り変数[:標識変数]

といった書き方をします。

標識変数は、列の値が「null」なのか「nullでない有効な値」なのかを判別するために使います。

標識変数が負であれば、受け渡しをしようとした列値がnullという意味になります。この場合、列値の受け渡し変数の値は、保証されません。
標識変数の値が0であったり、正の数値なら、nullでない有効な列値が返されているという意味になります。

標識変数の値の具体的な意味については、お使いのRDBMS、コンパイラのマニュアルを参照してください。


このカテゴリの人気Q&Aランキング

おすすめ情報