Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


577 / 9994 ←次へ | 前へ→

【12727】Re:更新クエリについて
回答  かるびの  - 15/3/12(木) 23:30 -

引用なし
パスワード
    本題からはずれますが、気になった点をいくつか。

>下記3点のテーブルがあります。
>I.入金・未入金
>II.入金・未入金(取込)

 第1に、「入金・未入金(取込)」テーブルですが、
テーブル名に括弧や中黒などの記号を使うのは、やめた方がいいです。
 それら記号は、プログラム上特別な意味が与えられていることがあるため、
コンピュータにおいて、プログラム上特別な意味が与えられている記号であるのか、
テーブルの名前の一部なのかの区別をつけられなくなるおそれがあるからです。
 使っていい記号は、アンダーバー「_」だけです。

 第2に、「入金・未入金(取込)」テーブルですが、
一般的に言えば、テーブル構成が同じテーブルを複数持ってはいけません。
 エクセルなどでは、月ごとや年ごとにワークシートを分けたりしますが、
そのようにテーブルを分けてはいけません。
 テーブルは1個にまとめるべきです。

 ただ、CSVファイルからいきなり「入金・未入金」テーブルへインポートすると、
不都合が出る場合があります。
 CSVファイルからインポートした後、データを修正した上で、
「入金・未入金」テーブルへ追加したいという場合です。
 インポートされたものを格納するだけの専用のテーブルを設けておいた方が、
そういうデータの修正をやりやすいです。
 つまり、今回の場合は「入金・未入金」テーブルと「入金・未入金(取込)」テーブルの
2テーブル構成で良いと思います。

 第3に、テーブル構成の提示です。
 こういう掲示板でアクセスについての質問をする人の中には、テーブル構成を示さない人が
半分くらいいます。
 なので、テーブル構成を書いてくれたのは、とても良いです。
 ただ、惜しいのは、主キーがどのフィールドなのか書いて欲しかったです。
 また、各フィールドのデータ型も示して欲しかったです。
 さらに言うと、「入金・未入金」テーブルと「請求」テーブルは、どういう関係に立つのか、
つまり、一対一なのか、一対多なのか、多対多なのかも書いてもらえれば、
さらに良かったです。


 さて、本題です。
>これらのテーブルに、下記のことを自動もしくは
>操作項目を少なくし、ミスを減らしたいと考えています。
>
>1.テーブルII.にcsvデータを取り込む
>  ※CSVの内容は、テーブルI.II.と同じ項目です。
>2.テーブルI.に1で取り込んだデータを追加する。
>  ※請求年月日と利用者IDが重複するものは、上書き更新
>3.テーブルI.の(4)契約者番号とテーブルIII.の(4)利用者IDが一致し、
> テーブルI.の(1)振替日とがテーブルIII.の(3)振替日一致するレコードを、
> テーブルI.の(14)不能理由が0になっている場合、
>  テーブルIII.の(7)領収済にチェックにいれる。
>
>このような一連の工程が短縮できるようにするには
>どうしたらよいかを教えていただければ幸いです。

 最も自動化を進めるならば、
フォームにコマンドボタンを配置し、そのコマンドボタンをクリックすれば、
上記1から3までの処理を行ってしまうというような形が可能です。

 上記1から3までの処理を部分的に自動化したいというのなら、
それに応じて、様々な方法が考えられます。


 自動化する場合、基本的には、マクロを使うか、VBAを使うかします。
 なお、私は、マクロは殆どわかりませんので、マクロについては細かな回答はできません。

>1.テーブルII.にcsvデータを取り込む
 マクロなら、「テキスト変換」アクションを使います。
 VBAなら、TransferText メソッドを使います。
 いずれの場合も、予め「インポート定義」を設定しておいた方がいいでしょう。

 ただ、CSVファイルでの並び順をテーブルでも何が何でも維持したいというのであれば、
上記の方法ではなく、「Line Input #」ステートメントを使います。


>2.テーブルI.に1で取り込んだデータを追加する。 
>  ※請求年月日と利用者IDが重複するものは、上書き更新
 更新クエリを実行することになります。
 次のページが参考になると思います。
   hatena chips
   クエリで2つのテーブルを同期させる
   ht tp://hatenachips.blog34.fc2.com/blog-entry-153.html

 ただ、「入金・未入金」テーブルや「入金・未入金(取込)」テーブルには、
「請求年月日」フィールドも「利用者ID」フィールドもありませんから、
両テーブルで重複するレコードをどのように認識するか、もう少し考える必要があります。

 更新クエリの実行は、マクロであれば、「SQL の実行」アクションですが、
VBAであれば、「RunSQL」メソッドか、DAOを使っての「Execute」メソッドを使います。
「Execute」メソッドの方がお勧めです。


>3.テーブルI.の(4)契約者番号とテーブルIII.の(4)利用者IDが一致し、
> テーブルI.の(1)振替日とがテーブルIII.の(3)振替日一致するレコードを、
> テーブルI.の(14)不能理由が0になっている場合、
>  テーブルIII.の(7)領収済にチェックにいれる。
 これも、更新クエリを実行することになります。
 
>テーブルI.の(4)契約者番号とテーブルIII.の(4)利用者IDが一致し、
>テーブルI.の(1)振替日とがテーブルIII.の(3)振替日一致するレコードを、
 ここは、両テーブルの結合条件を使って実現することになります。

>テーブルI.の(14)不能理由が0になっている場合、
 ここは、そのような抽出条件を指定します。SQL文で言えば、WHERE句で実現します。
248 hits

【12726】更新クエリについて ゆか 15/3/12(木) 16:42 質問[未読]
【12727】Re:更新クエリについて かるびの 15/3/12(木) 23:30 回答[未読]
【12731】ありがとうございます。 ゆか 15/3/16(月) 12:01 お礼[未読]
【12748】Re:更新クエリについて ゆか 15/3/21(土) 18:45 質問[未読]
【12749】クエリのCSV出力について ゆか 15/3/21(土) 21:45 質問[未読]
【12750】Re:別スレッドへ かるびの 15/3/21(土) 23:40 発言[未読]
【12751】畏まりました。 ゆか 15/3/23(月) 8:23 お礼[未読]

577 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free