レンタルサーバのMySQLとAccessをODBC以外で接続する話しのその2。
AccessのテーブルのデータをMySQLにそのままコピーもしくは、1件ずつ更新する事を考えてみたい。
サーバ(MySQL)のテーブルをAccessに取り込む場合には、
1)サーバ側でphpでprint文を使って画面に出力するプログラムを開発
2)そのプログラムをhttp接続でパソコン側にダウンロード
3)Accessにインポート
するだけだった
でもアップロードは一工夫必要だ。
まず、サーバ側でアップロードしたテキストファイルを読み込みMySQLのテーブルを更新するphpプログラム(a)を開発しておく。
単純にテキストファイルを1行読み込み。MySQLのテーブルデータを更新するプログラムだ。画面には実行結果を表示しておく。更新されなかった行は後で原因を調べる。
1)Accessでtab区切りのテキストファイルとして出力
2)そのテキストファイルをFTPでサーバへアップロード
3)aのプログラムを起動し実行結果をファイルで受け取る
という流れになる。これらの制御はAccessで完結させる。
テキストファイル出力は私はVBで書いているが、単純にエキスポートでマクロで記述しても良いと思う。
FTPサーバにアップロードするのは、BASP21を使用する。
Const RDir As String = "ファイル転送先ディレクトリ"
Set ftp = CreateObject("basp21.FTP")
rc = ftp.Connect("サーバ名", "ID", "PASS")
rc = ftp.DeleteFile(RDir & "/ファイル名") ' 既にある場合には削除
rc = ftp.PutFile("アップロードするファイル名", RDir, 2) ' テキストでアップロード
If rc = 1 Then ' 正常終了
'MsgBox "正常に終了しました。"
Else
MsgBox "ファイル転送に失敗しました。"
Exit Sub
End If
ftp.Close
次にサーバのプログラムを稼動させる
Dim bobj As Object
Set bobj = CreateObject("basp21")
rc = bobj.W3get("-d 結果受信フォルダ -o ファイル名 http://phpプログラム名")
これで、Access側のデータベースで修正したデータでMySQLのデータベースを更新できる。1ボタンで全ての作業が完了だ。
サーバ側でcronが使えない場合でも、この方法ならWindows側で定期的にバッチ起動してサーバデータを更新する事も可能だ。工夫次第で色々な事ができるだろう。
ってやっぱりこの話題ブログで書くには難しすぎる。ほとんどの人がわけわからないだろう。
でも、この技術を使えばかなり運用が便利になる事間違いなし。かなりお勧めだ。
疑問点は「何となく歩いた結果 本館」で質問してみよう。システム開発系のお仕事も待ってます。
AccessのテーブルのデータをMySQLにそのままコピーもしくは、1件ずつ更新する事を考えてみたい。
サーバ(MySQL)のテーブルをAccessに取り込む場合には、
1)サーバ側でphpでprint文を使って画面に出力するプログラムを開発
2)そのプログラムをhttp接続でパソコン側にダウンロード
3)Accessにインポート
するだけだった
でもアップロードは一工夫必要だ。
まず、サーバ側でアップロードしたテキストファイルを読み込みMySQLのテーブルを更新するphpプログラム(a)を開発しておく。
単純にテキストファイルを1行読み込み。MySQLのテーブルデータを更新するプログラムだ。画面には実行結果を表示しておく。更新されなかった行は後で原因を調べる。
1)Accessでtab区切りのテキストファイルとして出力
2)そのテキストファイルをFTPでサーバへアップロード
3)aのプログラムを起動し実行結果をファイルで受け取る
という流れになる。これらの制御はAccessで完結させる。
テキストファイル出力は私はVBで書いているが、単純にエキスポートでマクロで記述しても良いと思う。
FTPサーバにアップロードするのは、BASP21を使用する。
Const RDir As String = "ファイル転送先ディレクトリ"
Set ftp = CreateObject("basp21.FTP")
rc = ftp.Connect("サーバ名", "ID", "PASS")
rc = ftp.DeleteFile(RDir & "/ファイル名") ' 既にある場合には削除
rc = ftp.PutFile("アップロードするファイル名", RDir, 2) ' テキストでアップロード
If rc = 1 Then ' 正常終了
'MsgBox "正常に終了しました。"
Else
MsgBox "ファイル転送に失敗しました。"
Exit Sub
End If
ftp.Close
次にサーバのプログラムを稼動させる
Dim bobj As Object
Set bobj = CreateObject("basp21")
rc = bobj.W3get("-d 結果受信フォルダ -o ファイル名 http://phpプログラム名")
これで、Access側のデータベースで修正したデータでMySQLのデータベースを更新できる。1ボタンで全ての作業が完了だ。
サーバ側でcronが使えない場合でも、この方法ならWindows側で定期的にバッチ起動してサーバデータを更新する事も可能だ。工夫次第で色々な事ができるだろう。
ってやっぱりこの話題ブログで書くには難しすぎる。ほとんどの人がわけわからないだろう。
でも、この技術を使えばかなり運用が便利になる事間違いなし。かなりお勧めだ。
疑問点は「何となく歩いた結果 本館」で質問してみよう。システム開発系のお仕事も待ってます。