質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • PHP

    20844questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • VBA

    1862questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Access

    456questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

MS-AccessとPHP&PostgreSQLとのデータ通信・同期方法について

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 816

m6u

FuelPHP総合1位

古い業務システム(POS)の保守・改良を請け負っている者です。 みなさんのお知恵を貸してください。
Windowsパソコン上でMS-Access、レンタルサーバーでPHPを介してPostgreSQLサーバーを立てています。

既存システムでは、WININET.DLLを使って簡単なリクエストをHTTPで送り、
結果をCSVファイルとしてFTPダウロードする流れになっています。
サーバーが持つデータをパソコンでも同じ構造でテーブルを持ち、
最終更新日時を元に差分データをCSVダウンロードしてデータ同期を取っています。
パソコン側でデータ処理した結果を、同様にCSVファイルでFTPでサーバーに送信し、
HTTPでデータベース反映処理PHPを起動するようにしています。

そのような仕組みで10年以上運用してきていますが、トラブルがないわけではありません。
データ処理をパソコンでした上でサーバーに反映させる仕組みが、まれにサーバー未送信データを生じさせ、
結果的にデータの不整合を起こすトラブルを(保守を請け負うようになってからでも)何度か遭遇しました。
その都度、手作業でデータ介入しています。

パソコンも古くなってきて、MS-Accessも古くなってきて、バージョンだけでも最新化しようとしていますが、
この際データ通信・同期の方法を改善したいです。

1)VBAからHTTP POSTの結果をストリーミング的に扱えるのかどうか。

WININET.DLLのInternetReadFile API関数を直接VBA上から使って制御するのに挫折しており、
FTPでCSVデータをダウンロードする方式になっています。

2)パソコン側でのデータ処理(前加工)を廃止して、必要なパラメータ(可変)を
サーバーに送ってサーバーで処理したい。

データがサーバーとパソコンの双方にあると整合性に苦しむし、
エラーハンドリングの弱いパソコンではあまり処理させたくないと考えています。
従来パソコン側で前処理した結果をCSVファイルにしてFTPでアップロードしていたのを、
処理に必要なパラメータをサーバーのPHPで受けてサーバーで処理して、
結果のみパソコンに返すようにしたいです。
CSVの固定パラメータではなく柔軟な可変パラメータでサーバーに送って、
柔軟にパソコンに結果をもらうようなことをどう実装したらいいでしょうか。
PHP側はいろんなライブラリ・関数がありJSONやXMLも楽に扱えますが、
VBA側にはほとんどない(?)ので難しいのかなと思ってしまいます。

長くなってしまいましたが、データの受け渡し、処理の主導権を見なおしするために、
どういうインターフェースで構築するのがいいか、教えていただけたら幸いです。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

MSXML2.XMLHTTPを使用すれば可変なパラメーターを設定して、POSTできそうです。
http://d.hatena.ne.jp/end0tknr/20081115/1226755041
http://d.hatena.ne.jp/juku-cho/20090429/1240971645

VBAでJSONが使える物もあるようです。
http://outofmem.tumblr.com/post/63355773212/vba-vba-json

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/25 18:55

    POSTできそうですね。日本語でもStrConv()して送れそうだし。
    この方法で試してみようかと思います。
    ありがとうございます。

    キャンセル

+1

今手元にWindows版のAccessがないので確定情報ではないですが
VBAから直接httpでリクエストやデータを投げることは出来ると思いますので
サーバ側のPHPを起動することは出来ると思います。
あと確かVBAをでもアドオン?プラグイン?でXMLは扱えます。

問題は、ローカルのデータをサーバに送るのは従来通りFTPで問題ない感じでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/25 18:45

    回答有難うございます。

    以前の改造で、IEを制御してPHP処理の起動をかけていたのを、WININET.DLLのHTTPリクエストのを使う感じに書き換えております。
    IEの制御に失敗して未送信データをたんまり貯めこむ事例がありましたので。

    しかし、HTTPリクエストでは小規模なGETしかできない感じで、文字列長の障害があります。
    VBAからAPI関数を使うのが、いつも文字列長に引っかかるんですよね。

    HTTPは最小限のきっかけのみにして、
    処理パラメータ群もすべてXMLかCSVファイルなりで予めFTPでアップロードするのが
    結局無難ですかね。

    すみません、ちょっとした愚痴になってしまいました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    VBA google画像検索 画像表示

    エクセルのVBAで文字列に対する画像が表示されるマクロを作成したいです。 やりたいこととして例えば、 A列に5つワードが書かれており、 そのワードをひとつずつgoogleで画像検

  • 受付中

    テキストデータをVBAで週ごとに分けたい

    2015/12/01,* cbdl,345 2015/12/02,Ubcmf Gspn DTW,2 2015/12/03,* gspou,375 ・ ・ ・ こんなテキ

  • 解決済

    PostgreSQLでテストデータをテーブルに挿入する一番手っ取り早い方法は?

    前提・実現したいこと VBとPostgreSQLを連携させてシステムを作っています。 PostgreSQLに新しいテーブルを作成してそこにテストデータを入れたいです。 テスト

  • 解決済

    posgresql \copyのfromに変数(csvのパス)を使いたい

    AWSのRDSでpostgresqlを使用しております。 定期的なデータ更新があり、シェルスクリプトとSQLで更新環境を作成しております。 ローカル(vagrantで作成したc

  • 解決済

    PostgreSQLに複数のCSVをインポート

    前提・実現したいこと 毎日他のシステムで作成される日本語ヘッダ付きCSVをDBサーバーに置き 夜間バッチでディレクトリ内のCSV全てインポートしたいです。 ご教示くださいますよ

  • 解決済

    PostgreSQL,Accessでinsert selectがおかしい

    Accessで、レコード数が約120万件あるPostgreSQLのテーブルから リンクテーブルを経由して別のaccess上のテーブルへ全件Insertする処理があります。 その

  • 解決済

    PHPでの検索フォームでの作成

     前提・実現したいこと 検索フォームに入力した文字と一致するデータをDBから出力し、表示するページを作成しています。 検索を行い一致したデータが5件以上だった場合、 複数ペ

  • 解決済

    PostgreSQLのCOPYコマンドについて

    csvのデータをpostgresのデータベースに格納したいと考えています。 以下のcsvファイルから名前と年齢を取得したいです テーブルはname列とage列のみ作成してあり

同じタグがついた質問を見る

  • PHP

    20844questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • VBA

    1862questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Access

    456questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。