1. Accessを使用すると、クエリの実行中に警告メッセージが表示されます。 これらはアプリケーションのデバッグ時に非常に便利ですが、ユーザーにとっては原則として必要ありません。 あなたは小さなVBAコードでそれらを無効/有効にすることができます:
Application.SetOption "Confirm Action Queries", 0 Application.SetOption "Confirm Document Deletions", 0 Application.SetOption "Confirm Record Changes", 0
パラメーター0を指定して無効にし、1を指定して有効にします。
2.データベースをpr索好きな目から保護し、アクセス権を区別するために、ワークグループファイル(.MDW形式)が使用されます。 ワークグループファイルへのパスを手動で指定できますが、ネットワーク上に多くのユーザーがいる場合は、クリックするとMDWへのパスを設定する1行のコードを処理するボタンを持つAccessファイルを使用する方がはるかに便利です。
Application.SetDefaultWorkgroupFile Path:="D:\ \file.MDW"
3.リクエストまたはフォームのコンテンツでテキスト検索を行うフォームを自分で作成していなかった場合、どのように動作するかわかりません(おそらく同じように動作しますが、もっと時間がかかります)。 多くの場合、何らかのリファクタリングを実行するか、テーブルまたはフィールドのスコープを決定する必要があります。
クエリを検索するには、クエリテキストで検索するコードを含むフォームが役立ちます。
For i = 0 To CurrentDb.QueryDefs.Count - 1 If InStr(CurrentDb.QueryDefs(i).sql, strSearchWord) > 0 Then ' CurrentDb.QueryDefs(i).Name End If Next : For i = 0 To CurrentDb.QueryDefs.Count - 1 For j = 0 To CurrentDb.QueryDefs(I).Fields.Count ' CurrentDb.QueryDefs(i).Name Next Next
フォームで検索するには、コードがもう少し大きくなります。
Dim strSearchWord As String ' , strSearchWord=”” Dim oAO As object Dim frm As Form Dim ctrl As object For Each oAO In CurrentProject.AllForms DoCmd.OpenForm oAO.Name, acDesign Set frm = Forms(oAO.Name) For Each ctrl In frm.Controls Select Case ctrl.ControlType Case acTextBox, acComboBox, acListBox, acCheckBox ' If InStr(1, ctrl.ControlSource & "", strSearchWord) Then ' frm.Name ctrl.Name End If End Select Next DoCmd.Close acForm, oAO.Name, acSaveNo Next Set oAO = Nothing Set frm = Nothing Set ctrl = Nothing
4.プログラミングの観点から作業をもう少し強固にし、作業中のデータベースで本番モードで作業しているときにエラーを検索できるようにするには、テキストログファイルにイベントを記録するためのVBAモジュール(トレースモジュール)を追加することが非常に望ましいです。 テキストファイルに書き込む簡単な関数は、デバッグ時に非常に役立ちます。
Sub Trace(ByVal txtinfo As String) On Error Resume Next MyFile = "D:\" & "logfile.txt" fnum = FreeFile() Open MyFile For Append As fnum txtinfo = CStr(Now()) + " " + txtinfo Print #fnum, txtinfo Close #fnum End Sub
5.このコード(ポイント4から)は、別のAccessデータベースファイルに簡単に転送でき、VBAエディターの参照/リンクを介してすべての既存のデータベースに追加できます。
複数のAccessデータベースファイルがある場合は、重複するコードを別のファイルに移動できます。 必要な唯一の変更は、コードでCurrentDbオブジェクトを使用し、それをCodeDbに置き換えて、共通コードの管理者として使用されるベースのオブジェクトにアクセスする場合です。
6.多くの場合、リクエストでは、開いているフォームフィールドの値をパラメータとして示します。 たとえば、次のようにします。
WHERE demotable.infonumber>Forms!Form1!Field25
ただし、リクエスト自体にパラメータを直接指定する必要がある場合があります。 次の方法で実行できます。
PARAMETERS val Text ( 255 ), fldID Long; UPDATE demotable SET demofield = val WHERE [fieldID]=fldID;
次に、Accessコードからこれらのパラメーターを設定し、リクエストを実行します。
With CurrentDb.QueryDefs("demoquery") .Parameters("fldID") = 2 .Parameters("val") = "newvalue" .Execute End With
別の方法として、VBAモジュールを作成してグローバル変数を追加し、この変数を返す関数を追加します。
Global start_ID As Long Public Function get_global() As Long get_global = start_ID End Function
要求を開始する前に、グローバル変数の値を設定する必要があります(メインフォームを開くときに設定できます)。
start_ID=3 '
そして、リクエスト自体で、値を返す関数の名前をパラメーターで指定します。
SELECT * FROM demotable WHERE (demotable.infonumber>get_global());
6.1。このクエリパラメータの取得方法は、テーブル情報へのアクセスを部分的に制限するために使用できます(ワークグループの場合)。 フォームをロードするとき、現在のユーザーに応じて、グローバル変数の値を設定します。
Private Sub Form_Load() If (CurrentUser = "Buh") Then start_ID = 1 Else start_ID = 1000 End If End Sub
次に、デモテーブルの表示と変更の禁止を設定し、リクエストの許可を設定します。 ただし、リクエストには権限のないテーブルが使用されているため、データは返されません。 データを返すために、最後にリクエストのSQLに追加します
WITH OWNERACCESS OPTION
結果として、Buhユーザーはテーブルのすべての行にアクセスでき、他のすべてのユーザーは最初の1000を除くすべての行にアクセスできます。
7.コードからフォームを開くために、コードが使用されます:
DoCmd.OpenForm "FormName", View, "FilterName", "WhereCondition", DataMode, WindowMode, "OpenArgs"
「WhereCondition」として、フォームレコードを開く必要がある条件を指定できます(フォームがデータバインドの場合)。 たとえば、「ZakazID = 56325」を指定すると、56325に等しいZakazIDデータ値でフォームを開くことができます。
「OpenArgs」の値として、開いているフォームで読み取ることができるパラメーターを指定できます。
Me.OpenArgsを使用したPrivate Sub Form_Load() 複数のパラメーターを渡す必要がある場合は、記号で区切ったテキスト文字列として渡すことができます。 さらに、Private Sub Form_Load()でパーツに分割します。
If Len(Me.OpenArgs) > 0 Then x = Split(Me.OpenArgs, "|") ' , | param1 = x(0) param2 = x(1) param3 = x(2) End If
8.多くの人は、Accessがmdb / accdbファイルのテーブルだけでなく、他のデータベースのテーブルでも機能することを忘れています。 既存のテーブルをエクスポートするには、 SQL Server Migration Assistantという無料のユーティリティがありますが、組み込みの機能を使用するか、サードパーティのソリューションを見つけることができます。
最後に、「すべての子供がこれを知っているが、私はそれを知りませんでした...」というカテゴリからの小さなヒント:
Accessファイルを開いてデフォルトのフォームを開かないときにマクロが機能しないようにするには、Shiftキーを押したままにする必要があることをご存知ですか?