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

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

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

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

Access

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

PHP

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

Q&A

解決済

2回答

2923閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

Access

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

PHP

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

0グッド

1クリップ

投稿2015/06/25 09:09

古い業務システム(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側にはほとんどない(?)ので難しいのかなと思ってしまいます。

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

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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 09:39

chiku_

総合スコア1464

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/06/25 09:55

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

0

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

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

投稿2015/06/25 09:37

icham

総合スコア559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/06/25 09:45

回答有難うございます。 以前の改造で、IEを制御してPHP処理の起動をかけていたのを、WININET.DLLのHTTPリクエストのを使う感じに書き換えております。 IEの制御に失敗して未送信データをたんまり貯めこむ事例がありましたので。 しかし、HTTPリクエストでは小規模なGETしかできない感じで、文字列長の障害があります。 VBAからAPI関数を使うのが、いつも文字列長に引っかかるんですよね。 HTTPは最小限のきっかけのみにして、 処理パラメータ群もすべてXMLかCSVファイルなりで予めFTPでアップロードするのが 結局無難ですかね。 すみません、ちょっとした愚痴になってしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問