本当にこれはケーキだと思います。Tonyが同じテーブル/バックエンドを引き続き使用できると言ったように、それはおそらく私がお勧めするルートです。MySQLデータベースにリンクするすべてのマシンにMySQLのODBCドライバーをインストールする必要があります。その後、DSNを作成し、Access内からDSNを介してテーブルにアクセスします。後でコードを追加して、DSNのないテーブルを使用してソフトウェアがロードされるたびにテーブルを再リンクすることをお勧めします。このようにして、DSNが構成されていないマシンでデータベースを実行できます。MSAccessバックエンドではなくMySQLまたはSQLServerExpressを使用することをお勧めしますが、その理由については詳しく説明しません。
PHPを使用した場合よりも、従来のWindowsデスクトップアプリケーション(MS AccessまたはVB.Netで構築されたもの)から実際にはるかに多くの機能を取得できると思います。そして、より少ないコードとより少ない時間でそれを行うことができるだろうというのが私自身の意見です。私はVB.Netについて言及しましたが、データベースにはVB.NetよりもMSAccessをお勧めします。
Tonyがすでに述べたように、AccessはVBA言語を使用します。基本構文を使用する他のプログラミング言語の経験がない限り、実際に理解するには少し時間がかかります。VBA/ASPからPHP/Javascriptへの移行は、必ずしもそれほど難しいわけではありませんが、ゆっくりと進んでいることがわかりました。PHPは中括弧付きのCスタイルのコードを使用しますが、VBAは使用しません。
PHPから来て、ここにあなたにとって新しいかもしれないいくつかのことがあります:
より強力な変数入力-Accessでは、String、Date、Integer、Long、Single、Doubleなどの指定されたデータ型で変数を実際に宣言できます。可能な限りこれを使用することをお勧めします。ObjectやVariantなどのより一般的なタイプを使用する必要がある場合はほとんどありません。指定されたデータ型で宣言された変数に間違ったデータ型を入れようとすると、エラーがスローされます。私の意見では、これはより良いコードを書くのに役立ちます。
Option Explicit-Option Explicitは、各コードモジュールの先頭に配置できる宣言であり、使用する前にDimステートメントを使用して変数を宣言する必要があることを強制します。これを行うことを強くお勧めします。問題のトラブルシューティングにかかる時間を大幅に節約できます。
MyVariable = Nothingを設定します-オブジェクト変数を使用した後にクリーンアップすることは、MSAccessを使用するためのベストプラクティスの1つです。これを使用して、DAO Recordset変数、ADO接続変数、ADO Recordset変数、フォーム変数などをクリーンアップします。オブジェクト(または特定のタイプのオブジェクト)として宣言する変数は、Nothingに設定してクリーンアップする必要があります。変数を使用する必要がなくなったとき。
インクルードなし-MSAccessにはインクルードステートメントなどはありません。他のAccessデータベースからコードモジュールをインポートできます。DLLに含まれている関数を呼び出すことができます。ただし、PHPのようにAccessにはインクルードはありません。
DoCmd-フォームやレポートを開いたり、その他の一般的なタスクを実行するには、MSAccessのDoCmdオブジェクトを使用する必要があります。ただの警告:それはしばしば不合理です。長年のAccessユーザーはそれについてあまり考えていませんが、これらのコマンドにはほとんどまとまりや一貫性がないことがわかりました。例を挙げましょう。フォームを閉じる場合は、次のコードを使用します:DoCmd.Close acForm、 "frmSomeFormName"が、フォームを開く場合は、次のコードを使用します:DoCmd.OpenForm "frmName"この例では、フォームを開くときに独自のOpenForm関数を取得するのに、フォームを閉じるときにCloseを使用し、その後にフォームを閉じたいことをAccessに通知する定数を使用するのはなぜですか。答えはありません。DoCmdは、このタイプの不整合に満ちています。Blueclawは、最も一般的なDoCmdをリストするのにかなり良い仕事をしていますが、そこにある例が正確に優れているとは思いません。
参照-参照を頻繁に使用する必要はありません。これらを使用して、DAOやADO(詳細は後述)やMicrosoft Scripting Runtime(ファイルやフォルダーへのアクセス、読み取り、書き込みなどに使用されることが多い)などを有効にする必要があります。それは基本的にあなたが一度やったことであり、それからあなたはそれを忘れます。
ActiveXコントロール-おそらく、これらを使用せずにプロジェクトをビルドしようとする方が良いでしょう。ソフトウェアを実行する各コンピューターに同じコントロールをインストールする必要があります。それについてはよくわかりませんが、プロジェクトでActiveXコントロールを使用すると互換性の問題が発生する可能性があることは理解しています。
DAO-データアクセスオブジェクト-DAOは、データコンテナへのインターフェイスに使用されるAccessの元のネイティブオブジェクトセットです。これは主にAccessデータベースのバックエンド/コンテナに保持されている日付にアクセスするために使用されますが、ODBCリンクテーブルを使用している場合の一部のタスクにも使用できます。DAOは、レコードセットをループして一括で変更を加える必要がある場合に非常に役立ちます。フォームコントロールをループするために使用することもできます。私がこれを使用する1つの場所は、行が削除された後、請求書の詳細で行番号を並べ替えることです。もう1つの一般的な使用法は、更新クエリでは実行できない特定の1つまたは複数のフィールドで何かを変更する必要がある「ユーティリティ」関数で使用することです。
CurrentDb.Execute( "ここでクエリを更新または削除...")CurrentDbオブジェクトのExecuteメソッドは、私の理解では、暗黙のDAO呼び出しです。これにより、VBAコードからローカルテーブルとリンクテーブルに対して更新または削除クエリを実行できます。DoCmd.RunSQLを使用してこれを実現することもできますが、2番目の引数として「、dbFailOnError」を追加すると何かが失敗した場合にエラーメッセージが改善されるため、CurrentDb.Executeが推奨される方法です。
ADO-ActiveXデータオブジェクト-ActiveXコントロールを使用しないことをお勧めしますが、これは必要になる可能性のあるActiveXテクノロジの1つです。私の知る限り、Accessからストアドプロシージャを実行するために使用できるのはADOだけです。ADOはDAOに似ており、実際にはそうではありませんでしたが、DAOを置き換えることになっています。私は自分のアプリケーションで両方を使用する傾向があります。どちらがあなたのために仕事をするのか、どちらがそれをより良くするのかを理解するのにしばらく時間がかかります。一般に、ストアドプロシージャの実行や外部データソースへの接続(つまり、リンクされたテーブルを使用しない)を除いて、すべてDAOを使用します。DAOとADOはどちらも、MS AccessとともにインストールされるMDAC(Microsoft Data Access Components)の一部です。
ファイルシステムオブジェクト-上記のこのオブジェクトは、ファイルやフォルダにアクセスするためによく使用されます。ファイルのコピー、テキストファイルの作成、テキストファイルの読み取り、テキストファイルへの書き込みなどに使用する必要がある場合があります。これは、WindowsScriptHostの一部であるMicrosoftScriptingRuntimeの一部です(ただし、すべてのWindowsコンピューターに存在します) 「壊れた」状態になる可能性があります)。Accessは、Dir()などのVBAの組み込み関数/メソッドを使用してファイルやフォルダーにアクセスするいくつかの方法を提供しますが、これらの関数はすべてのベースを網羅しているわけではありません。
SQL-サーバーのクエリ言語-おそらくSQLについてはすでにご存知でしょうが、AccessのSQL言語の「スーパーセット」に慣れる必要があります。大幅な違いはありませんが、AccessではAccess関数(Len、Left、rightなど)または独自のカスタム関数を使用できます。独自の関数は、コードモジュールに存在し、パブリックとして宣言する必要があります。独自の関数の例としては、Repeat(MS Accessには存在しない、MySQLには存在する)があります。これは、子の親関係を持つテーブルでCount(*)に基づいてインデントを作成するために使用されることがあります。これを例として挙げますが、入れ子集合モデルを使用して階層カテゴリを保持する場合を除いて、このような関数を使用する必要はほとんどありません。
変数をリテラル文字列にすることはできません-これは、AccessとPHPの大きな違いです。PHPでは、次のように記述できます。 "SELECT * FROM tag WHERE tagtext ='$ mytag'" MS Accessでは、次のように記述する必要があります。 "SELECT * FROM tag WHERE tagtext ='"&strMyTag& "'"( DAOまたはADOレコードセットを取得するためにVBAでクエリをフォーマットする場合を除いて、これについて心配する必要はありません。先ほど指摘したことは、通常は使用しないため、フォームやレポートのレコードソースや保存されたクエリには影響しません。それらの変数。)
クエリ-理解するのは難しいことではありませんが、Accessではクエリは基本的にMySQLビューです。実際、クエリを保存することはあまりありません。私は通常、SQLの「コード」を導出するためにのみそれらを使用し、フォームを保存されたクエリにバインドする代わりに、そのSQLを取得してRecordsourceとしてフォームに貼り付けます。どちらの方法でやりたいかは関係ありません。これを行うには、どちらの方法でも長所と短所があります。補足として、MySQLでビューを作成し、Accessでそれらにリンクすることを恐れないでください。それらにリンクすると、Accessはそれらをテーブルとして認識します。更新可能/書き込み可能かどうかは、ビューの構成によって異なります。特定のタイプのクエリ/ビュー(ユニオンなど)は読み取り専用です。
最後に、OpenOffice.orgBaseよりもMSAccessをお勧めします。数年前にBaseを試してみましたが、多くの機能が不足していることがわかりました。しかし、私はすでにMS Accessの経験があるので、OpenOfficeBaseを公正な裁判にかけたかどうかはわかりません。私が行方不明にしたのはイベントでした。私はMSAccessでフォームを微調整して、ユーザーに多くのフィードバックを伴う非常に応答性の高いUIを提供できることに慣れていますが、Baseでこれを行う方法を理解できませんでした。たぶん、最後に試した時から状況が変わったのかもしれませんが、わかりません。これは、BaseとMSAccessを比較した記事です。
他のSOAccessの達人、私の答えの誤りを自由に指摘してください。私はまだ自分自身をプログラミングの新人だと思っています。