プロが教えるわが家の防犯対策術!

レンタルサーバー上のMySQLにローカル上のEXCELで作成するデータを登録しようとしています。
過去ログ等を調べたのですが、自分で質問することにしました。
http://oshiete1.goo.ne.jp/qa1244588.html

MySQLとPHPでwebに公開するサイトを作っています。
データベースはphpMyAdminより操作しています。

データ登録時なのですが、登録する項目(フィールド)と、件数(レコード)が多いので、
phpMyAdminだと一度に登録できるのが、2件とブラウザ上での作業になるので、
間違いや、確認等の効率がかなり悪くなります。
エクスポートでEXCELやXML、CSVなどがあるので、インポートでも使えるのではないかと考えました。
そこで過去ログやweb上で情報を探し、CSVなどをインポートしてみたのですが、エラーが表示されます。

過去ログで見つけました、ODBCドライバというのは必要なのでしょうか。
またそれはレンタルサーバーでも使用可能なのでしょうか。

EXCELなどのソフトを使って、ローカル上でデータを作成・管理したいと考えています。
何か良い方法はないでしょうか。

環境:
Mac OSX.4  (基本Macで作業しています)
Windows XP sp2

レンタルサーバ:
MySQL 4.1.10a
phpMyAdmin 2.6.4-pl4
PHP4(ver.4.3.8)

宜しくお願いします。

A 回答 (5件)

しばらくアクセスできなかったので、だいぶ日が経ってしまいましたが、まだみてますか?



>1.excelから csv形式で保存
このcsv中にtableの全行のデータがあるなら、

>6.load 用のsql文実行 (全行追加)
この前に、table内の全行削除「DELETE FROM table_name」をしてから、全行追加すれば、全行置き換えになります。

>phpは少し触れます。
失礼しました。
phpで全自動化を行うなら、csvデータの量にもよるけど、
アップロードフォームに<textarea> でcsvの内容を入れて送信。量が多ければ、<input type="file">を使用。
受信側では、<textarea name="csv">のデータ$_POST["csv"]をMySQLデータ領域にcsvファイルとして書き出したのち、
「ファイル書き込みは、PHPマニュアルのint file_put_contents ( string filename, string data [, int flags [, resource context]]) あたりの関数をチェック」
MySQLに接続して、「接続方法はPHPマニュアルのMySQL関連関数を熟読のこと」
table内の全行削除のSQL文とload 用のsql文とを実行
と言う手順になるかな。
一遍に作ろうとせず、一つ一つ実行確認しながら組み上げていくとよいです。

参考URL:http://jp.php.net/manual/ja/
    • good
    • 0
この回答へのお礼

返事大変遅くなり申し訳ございません。
そしてありがとうございます。

アレから、いろいろと試行錯誤して実行しているのが、
phpMyAdminでMySQLに二つのテーブルを作成して、
アップロード用テーブルと実際に反映させるテーブルにわけて、
アップロード用テーブルから、phpMyAdminのエクスポートで書き出して、テーブル名を一括変更してから、反映させることにしました。

アップロード方法は自力で登録フォームを作成して、登録する事に成功しました。
まだ、ブラウザ上での一覧表示、検索、編集機能等はないのですが、
これから作っていくつもりです。

今回の件は大変勉強になりました。
ありがとうございます。

お礼日時:2007/04/20 11:35

load文は追加です。

同じcsvファイルに対して2回実行すると、2重ロードエラーになります。

>phpで専用プログラム
ftpソフトの起動の手間を省くための、ファイルアップロード用と言うだけです。
よけいな説明しすぎたようです(どうやら、phpプログラムもまだ書けないようですので)。まずは、プログラミングの必要のない以下の手順でちまちまやって下さい。

1.excelから csv形式で保存
2.ftpソフトを起動
3.MySQLから見えるデータ領域へcsvファイルをアップロード
(アップロード先を訂正、load文を実行するのはMySQLなので)
4.ブラウザを起動
5.phpMyAdminにアクセス
6.load 用のsql文実行 (全行追加)


追加ではなく、既にあるレコードの上書き変更ならcsvで一気にはいきません。
変更レコード毎に、update文を作る必要があります。
まずはSQL文を理解しないことには、次には進めないと思います。
http://dev.mysql.com/doc/refman/4.1/ja/

参考URL:http://dev.mysql.com/doc/refman/4.1/ja/data-mani …

この回答への補足

ありがとうございます。
phpMyAdminでloadするのですね。
ローカル上に常に最新のデータ(excel又はcsvデータ)を保持している場合、
phpMyAdmin上でフィールドの内容を毎回削除して、一括登録していくことはできないのでしょうか?

phpは少し触れます。こちら側で管理していく上で、mysqlへ登録する一番最適な方法を探しています。
宜しくお願いします。

補足日時:2007/02/06 11:13
    • good
    • 0

csvファイル経由でできませんかね。


excelから必要データをcsvファイルに変換出力して、そのファイルをphpMyAdminの実行できるサーバーへアップロードしたうえで、
以下のsql文を実行すれば、csvの一行がtableの一行相当で一遍にインポート出来るはず。

load data infile 'taisyo.csv' into table tablename fields terminated by ',' enclosed by '"' lines terminated by '\r\n';

csvファイルの項目順やデータ型はtableの設定に先に合わせておくこと
taisyo.csv は、phpMyAdminから見えるところに置くこと
最後の改行コード指定は、MACだと'\r' だったと思うが、MAC版excelでcsv出力した時どうなるのかは、調べてみて下さい。
また、ftpでのアップロード時にアスキー転送すると、サーバー側の改行コードに変換されるのも要注意。
phpMyAdminにファイルアップロード機能があればそれを使えばよいですが、なければ、phpで別に専用プログラムを作っての実行でもよいでしょう。

この回答への補足

ありがとうございます。
>load data infile 'taisyo.csv' into table tablename fields terminated by ',' enclosed by '"' lines terminated by '?r?n';
試してみようと思うのですが、これは、上書きされるのでしょうか?追加されるのでしょうか。

phpで専用プログラムというのは、
INSERT INTO table ('name') VALUES ('$name');
などに、該当する$nameの部分をCSVに記述されている値を代入してやって、データベースに登録!ってことでしょうか?
もし、それがあれば、ローカル上にある最新のexcelデータを上書き登録できるということなのでしょうか。もしくは追加していけるということなのでしょうか?

補足日時:2007/01/26 10:45
    • good
    • 0

ちょっと質問本筋と関係がないVBAの話をしてしまい、惑わせてしまうようで心苦しいですが。



Insert文が記述されたファイルを作ればインポートできますね、というのが前提のお話です。
なので、VBAでもC#でも、何でも良いとは思います。
ただ、VBAは、エクセルに付いているプログラミング環境なので、都合が良いという思いから、前回そのように書きました。

>VBAを使用することによって、ExcelファイルがSQLに変換されると考えてよかったでしょうか

変換というより、”Insert文が羅列されたファイル”を出力するプログラムを書くということです。
前回仰っていたODBCによるデータベースへのアクセス・データ入力も可能だと思います。
(やったことはないので、だと思います、にしておきます^^;)
が、レンタルサーバが、ODBCによる接続を許す設定になっているとは思えないので、今回のケースではムリ※だと思います。

※その理由
http://www.mysql.gr.jp/Manual/mysql-3.23.16/manu …

Grant文で、ODBC接続ユーザに「grant ~ to ユーザ@"192.168.0.%"」的な権限付与しないといけないらしいので、レンタルサーバ屋さんとしてはムリなような気がします。
IDとパスワードがあるから大丈夫なのかな?
横道にそれました。

ツラツラ書きましたけど、要はエクセルとかCSVとかのファイルを指定してドンで、ラクラクImportはムリじゃね?というのが主旨です。
Insert文を全データ分作るしか思いつかないなぁ、というところです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Insert文を作成する為に、VBAを使用するってことですね。
VBA等調べてみます。

お礼日時:2007/01/26 10:34

わたしの環境だと、インポートはSQLしか受け付けないようで、その他の入力形式が許されるのかは知りません。



Excelファイルをダイレクトに読む込むのと違って、SQLファイルへ変換する工程がひとつ増えますが、VBAなどを利用して、insert文記述ファイルを作成するのが、近道なような気がします。

for cells(1,1) to cells(1,1).currentregion.rows.count
buf = buf & "insert into tab values ..."
loop

で、変数bufの内容をファイル書き込みすればインポートファイルが比較的簡単に作成できますね。

ただし、250行程度置きに区切り(一つのInsert文にする)を入れないとわたしの環境だとエラーになりました。
※行数と、エラー内容は忘れました。

ちょっと質問本筋から外れているようなので、このへんで。
    • good
    • 0
この回答へのお礼

ありがとうございます。
VBAですか、まだ聞いたことくらいしかない物なのですが、
それで可能であるならば、今から調べていきたいと思います。

VBAを使用することによって、ExcelファイルがSQLに変換されると考えてよかったでしょうか。

お礼日時:2007/01/18 20:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!