みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

AccessがリンクしたMySQLと同期が取れない

いつも楽しく勉強させていただいております。

環境はWin7、Access2007、MySQL5.5です。

フランチャイズのお店の売上集計をしています。
以下の処理を行いたいのです。

1.AccessからSQLコマンドを書いたファイルをバッチで起動し、MySQLでサマリーテーブルを作成します。
2.Accessはできたサマリーテーブル(ODBCリンク)をお店ごとに分割してExcel形式でエクスポートする。

困っているのは1が終了したところで2を実行したいのですが、どうも同期がとれないことです。2が動き始めた段階ではサマリーテーブルは途中までしかできていない状態でしか読めません。これはバッチで起動した場合は仕方ないかと思います。

そこで1が終了したということを判定するため、ダミーのテーブルを作成しました。サマリーテーブルを作る前にダミーのテーブルレコードを削除し、サマリーテーブルの作成が終わった時点でダミーのテーブルにレコードを追加するというロジックを追加してみました。ダミーテーブルにレコードがあればサマリーテーブルには完全にレコードがそろっているはずですよね。それなのにリンクテーブルを開いてみるとまだ作成途中です。実際ステップ実行すると期待通りに動きます。また、1が終わった時点でサマリーテーブル(リンクテーブル)を開き、[Shift][F9]キーを押すとすべてのレコードがそろいます。

どうやらMySQL側での処理結果にリンクテーブルの反映がついていけてないような気がします。

どのように対処すれば1のサマリーテーブルが完全にできた時点で2の処理に引き継げるでしょうか。

たとえば1と2の途中でリンクテーブルを開き、[Shift][F9]キーを送信するという処理をVBAで実現できますか。

投稿日時 - 2013-03-15 09:44:12

QNo.7994262

すぐに回答ほしいです

質問者が選んだベストアンサー

<リンク再設定のサンプルコードはたくさんありますが、create table後にリンクの設>
accessDBのリンクなら作り直したことあるけど。。。。。。

さてACCESSはデータの数がきちんと返ってこないことが多々あります。これはMicrosoftのページでも指摘されています。

MoveLastで数を数えたらどうかと思いますが。
私はいつもこれでやってます。

投稿日時 - 2013-03-15 16:56:54

補足

MoveLastはビンゴ!かもしれません。
2.のエクスポートのフェーズの前でMoveLastしたら、本来のレコード数より小さい値となりました。
そこで正しいレコード数になるまでループし、正しくなった段階で従来の処理を開始するようにしてみました。

確認できるまでちょっと時間がかかりますが、店舗数分のファイルが作成できたら報告&お礼をいたします。

投稿日時 - 2013-03-15 17:24:39

お礼

処理1と処理2を続けて行いましたが、無事店舗数分のファイルができました!おかげさまで週末を明るい気持ちで迎えられます。本当にありがとうございます。

投稿日時 - 2013-03-15 17:45:30

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

完全な解決では無いとは思いますが
ACCESS側でレコード数が増えるかどうかを判断して増えなくなったら反映されたと判断するとか。
mysqlでフラッシュするコマンド無かったけな。

投稿日時 - 2013-03-15 16:27:04

お礼

それはたぶんうまくいかなさそうな気がします。

というのはサマリーテーブル作成後にdcount関数でレコード数をみると、正しく書きこめている旨の数字が返ります。それなのにリンクテーブルを開くとまだ書きかけという状態なのです。

いっそリンクを切断し(リンクテーブルの削除)、再度リンクしなおそうかと思うのですが、どうでしょうか。ちなみにリンクの「再設定」ではダメでした。

リンク再設定のサンプルコードはたくさんありますが、create table後にリンクの設定という方法がわかりません。もしかしてご存じないですか。

投稿日時 - 2013-03-15 16:43:01

ANo.1

まだ空中にある物を要求しているからなんでしょうね。

さてVBAでキーを送ることはできます。sendkeys で。
テーブル開いてその窓に sendkeys で送ってテーブルを閉じる?

投稿日時 - 2013-03-15 14:59:58

お礼

回答ありがとうございます。

DoCmd.OpenTable "summary"
SendKeys "+{F2}"

こんな感じですか?

せっかくヒントをいただいたのに結果はうまくいきませんでした。書き方が悪くてテーブルの窓に送れてないのでしょうか。

ちなみに手動での[Shift][F9]もレコード数が多い場合は信用できないことがわかりました。一回押したくらいでは、空中にある物が返るようです。

投稿日時 - 2013-03-15 15:48:54

あなたにオススメの質問