更新日付

最新投稿:大浦神社
投稿日:2026年4月13日
追記:吉備津彦神社
追記日:2026年5月7日
 火縄銃演武
ラベル ACCESS の投稿を表示しています。 すべての投稿を表示
ラベル ACCESS の投稿を表示しています。 すべての投稿を表示

2012年3月3日土曜日

MS-ACCESSのソース管理用アドインをUPDATE

以前、ちらっと紹介したACCESS管理用アドイン
(主要オブジェクトをテキスト出力するだけだけどw)

若干の改修をして公開しました。

たいした改修じゃない(仕事先で要望があったのでw)から
どうしようか迷ったけど、とりあえずUPしました。

対象はACCESS2003以降、2010での動作確認まではしました。

2、3時間の改修なので別に性能UPって訳じゃないです。

結構、知れ渡っている「SaveAsText」ってやつを使用しているだけです。

ソースはお見せするほどの出来では無い為、恥ずかしくて公開してません。

ダウンロードは
http://www.vector.co.jp/soft/winnt/business/se495956.html
よりできます。 笑ってやってくだせい。

2012年1月7日土曜日

ACCESSの実行画面をMSペイントに出力

たまには技術ネタも書け!とお叱りを受けそうなのでw

ACCESSを使用したシステムでハードコピーをボタン等でしたい。
出来たハードコピーはペイントで見たい との案件。
とりあえず思いついたのがクリップボード経由での受け渡し。
ただ出力先がMSペイント指定なのでめんどくさい。
しかもACCESSにクリップボード操作はサポートされてないようだし。

安直に
[prt sc]を画面から投げてクリップボードに画面コピー後
MSペイントを起動させて[Ctr+v]を投げる事を考えた。

最初 SendKeysで[scr sc]を投げたけど取れない。
ググったらどうも使えない事があるらしい。
めんどくさいけどAPIを一部使用。

以下がそのソース(簡易版w)

--------------------------------------------------------------------------------------
Option Compare Database

Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
    ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

'画面をクリップボードにコピー
Public Sub subGetSnapShot()
   
    '[prt sc]Key 送信
    Call keybd_event(CByte(vbKeySnapshot), 0, 0, 0)
    Call keybd_event(CByte(vbKeySnapshot), 0, 2, 0)
   
End Sub

'ペイント起動後、クリップボードをペースト
Public Sub subOutClipBord()

    Dim objShell    As New WSHShell
    Dim objExe      As WshExec
   
    'MSPaint起動
    Set objExe = objShell.Exec("mspaint.exe")
   
    '起動待ち
    Do Until objShell.AppActivate(objExe.ProcessID)
    Loop
   
    '[Ctr+V]key 送信
    SendKeys "^v"
   
    '参照破棄
    Set objExe = Nothing
    Set objShell = Nothing

End Sub

'画面をペイントに出力
Public Sub subOutForm()

    '画面取得
    Call subGetSnapShot
   
    '制御をWindowsに一時戻す
    DoEvents
   
    'ペイントへ出力
    Call subOutClipBord

End Sub
--------------------------------------------------------------------------------------

参照設定に[Windows Script Host Object Model]を設定して
画面から上記[subOutForm]をコールすればとりあえず動くはず^_^;

マシンのスペックが古いと時間が掛かりますし
実行中の操作で不具合が発生する可能性もありますがw
参考程度に(^^ゞ

試行錯誤してたから1日掛かったorz・・・

2011年12月12日月曜日

雑談 12月12日

MS-ACCESSを使用した小規模システムの構築ってもう定番化しつつあるのかな?
もちろんDB自体はサーバにSQL-SERVER等で。

たしかにACCESSってDBを簡易操作するには便利なツールではあるし
簡単なシステムなら十分期待に副えるんだけど…

ユーザが勝手に改変できないようにロック掛けたり
ACCESS標準の機能を止めたりと面倒なんだよね。

中途半端にACCESS知ってるユーザが敢えて変更できるようにしてくれとか…

以前、短期に運用を頼まれたシステムで
データが消去される事があって
原因を調べたらテーブルを開いた後で
表示した内容をユーザが勝手に消してたw
単に必要なデータを印刷させたい為だったそうだが…
もちろん、最初からスナップショットなりで変更できなくすれば良いんだけど
前任者が即席で作らされたシステムらしい。

簡単に何も考えずそれなりの物が出来ちゃうけど
それなりの落とし穴もある訳で…

2011年10月15日土曜日

ACCESSでのアドイン作成

前にACCESSでのソース管理について雑記したけど
その時にアドインも作成したので
その方法を。
他にもアドイン作成方法はあると思うけど未調査^_^;

なを、元ネタはACCESS2000で作成時の記録

-----------------------------------------------------------------
手順1.アドイン用MDBの作成
           通常のMDB作成と同じ

手順2.定義用テーブルの作成
           テーブル名:USysRegInfo
                      フィールド名                属性
                          Subkey                 テキスト型  255文字
                          Type                     長整数型
                          ValName              テキスト型  255文字
                          Value                    テキスト型  255文字
手順3.アドイン機能の作成
             呼出モジュール(Function)の作成
             戻り値指定は不要
                     ex:   Public Function adin_Main()
                                   :
                            End Function
             ※)このモジュール等はアドイン外からも参照可能なので
                 名称が重ならないように配慮するべし。

定義4.定義テーブルのレコード作成
             手順2で作成したテーブルに3レコード追加

USysRegInfo
SubkeyTypeValNameValue
HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\%アドイン名%0

HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\%アドイン名%1Expression=%手順3で作成したFunction名%
HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\%アドイン名%1Library|ACCDIR\%アドイン実体名%

                          %アドイン実体名% は ○○.mda って奴ね

定義5.ファイルの拡張子を変更(MDB->MDA)

-----------------------------------------------------------------

これでACCESS用アドインは完成。
後は実行用PCにコピーしてACCESSのメニューから登録すればOKかな。

そうそう、UsysRegInfoってシステムオブジェクト扱いなんで通常は見えません。
オプションを変更すれば見えるよ。

        

2011年10月8日土曜日

MS-ACCESSのソース管理

それほど大きくないシステムでMS-ACCESSを利用して構築する案件は
予想外に多かったりする。
(オイラのまわりだけかもw)

で、単独での開発なら良いけど複数人での開発となると
ちょっと厄介。
どうしてもデグレが発生しやすい。

VBAのソースだけなら良いけど、フォーム等のプロパティもあるし。

ただ、各オブジェクトをテキストとして出力もできるんだよね。
ヘルプ等では公開されてないようだけど。
SaveAsText ってやつね。

で以下のモジュールをつくってみた。
'-----------------------------------------------
'モジュール一括出力
'-----------------------------------------------
Public Sub Addin_subOutModule(strFolder As String)
    Dim aObj As Object
    Dim FName As String
    On Error GoTo Err_Addin_subOutModule
    '全モジュール出力
    For Each aObj In CurrentProject.AllModules
        FName = strFolder & "module_" & aObj.Name & ".txt"
        Application.SaveAsText acModule, aObj.Name, FName
    Next
   
    '全フォーム出力
    For Each aObj In CurrentProject.AllForms
        FName = strFolder & "form_" & aObj.Name & ".txt"
        Application.SaveAsText acForm, aObj.Name, FName
    Next
   
    '全レポート出力
    For Each aObj In CurrentProject.AllReports
        FName = strFolder & "report_" & aObj.Name & ".txt"
        Application.SaveAsText acReport, aObj.Name, FName
    Next
   
    '全マクロ出力
    For Each aObj In CurrentProject.AllMacros
        FName = strFolder & "macro_" & aObj.Name & ".txt"
        Application.SaveAsText acMacro, aObj.Name, FName
    Next
   
    '全クエリ出力
    For Each aObj In CurrentData.AllQueries
        FName = strFolder & "querydef_" & aObj.Name & ".txt"
        Application.SaveAsText acQuery, aObj.Name, FName
    Next

    Set aObj = Nothing
   
    Exit Sub
   
Err_Addin_subOutModule:
   
    MsgBox Err.Description
    Resume Next
End Sub
-------------------------------------------
strFolder に出力先フォルダ名(最終文字に¥付き)を指定してコールするだけ。
ただオブジェクト名に"/"等があると駄目だけど^_^;

出力ファイルで差分を取れば変更箇所が判定できる。
(編集しなくても変わる項目もあるけど…)
以前アドインとして公開してるソースから引用してます。
VBAStepCounterForAccess2000 ってやつね(^^ゞ

ACCESS2000 ~ 2007までは出来るはず。2010は知らんw

2011年9月23日金曜日

ACCESSとVB.NETの色指定

以前、ACCESS(2003)とVB2008を使用したシステム構築の案件があったんだけど
当然、ACCESS側とVB.NETでのインターフェイス(見た目w)を統一したいと。
フォーム上の色はINIファイルから設定したいと。

で、ACCESSの色(RGB)とVB2008(ARGB)の色は形式が異なる訳で変換が必要。
例)
ACCESS-----------------------------
   me.詳細.BackColor = %指定色%

VB2008------------------------------
  Dim cl As New Color
  cl = ColorTranslator.FromWin32(%指定色%)
  me.BackColor = cl