1
// ********************************************************** // 【機能】 // PHP のファイルのアップロード機能を使用して、Excel を // アップロードし、その Excel を DB として ADO で読み込み // SQLServer の TABLE に更新する // // 【注意事項】 // メッセージは、リダイレクト後に表示させる事を想定して // 作成していますが、テスト中はやっかいなので、 // POST 後そのまま画面表示をしています。 // // // db.php は、同種のデータベース接続を前提としていますので // このような他種の接続の場合は、メソッド毎に種別指定します // ********************************************************** // windows 前提なので、shift_jis $conf_client_charset = "shift_jis"; header( "Content-Type: text/html; Charset=$conf_client_charset" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); // MDB、Excel を COM 経由で使用するので、try 〜 catch が必要 // エラーが起きないという前提ならば、db_php4 でも OK if ( (substr(phpversion(),0,1) + 0) == 4 ) { require_once( "db_php4.php" ); } else { require_once( "db_php5.php" ); } $conf_db_type = 2; // SQLServer if ( $_POST['send'] == 'アップロード' ) { // SQLServer に接続 $SQL = new DB( "localhost\\MSDE2000", "isdb", "sa", "password" ); if ( $SQL->Connect === false ) { $msg = "接続できませんでした
\n"; $msg .= $SQL->Error; // リダイレクト header( "Location: {$_SERVER['PHP_SELF']}?msg=" . urlencode($msg)); exit(); } else { // アップロード先のファイル // 複数クライアント対応するには、セッション等でユニークなファイル // を作成して、処理後削除する必要があります $upload = "file/Book1.xls"; if ( move_uploaded_file( $_FILES['targetExcel']['tmp_name'], $upload ) ) { $_GET['msg'] = "アップロードに成功しました\n"; } else { $_GET['msg'] = "アップロードに失敗しました\n"; } $conf_db_type = 7; // 一時的に Excel( db.php の仕様 ) // Excel 接続 $SQL_Excel = new DB( realpath($upload) ); $conf_db_type = 4; // Excel・MDB $Column = $SQL_Excel->QueryEx( "select * from [Sheet1$]" ); while ( $Column ) { // データ中の ' をエスケープ $Column['コメント'] = str_replace( "'", "''", $Column['コメント'] ); $Query = "select * from [コメントテーブル] where "; $Query .= " [コード] = {$Column['番号']}"; $Query .= " and [日付] = '{$Column['日付']}'"; $conf_db_type = 2; // SQLServer if ( $SQL->QueryEx( $Query ) ) { $Query = "update [コメントテーブル]"; $Query .= " Set [本文] = '{$Column['コメント']}'"; $Query .= " ,[更新日] = getdate()"; $Query .= " where [コード] = {$Column['番号']}"; $Query .= " and [日付] = '{$Column['日付']}'"; } else { $Query = "insert into [コメントテーブル]"; $Query .= " ([コード],[日付],[本文],[更新日]) "; $Query .= " values({$Column['番号']}"; $Query .= " ,'{$Column['日付']}'"; $Query .= " ,'{$Column['コメント']}'"; $Query .= " ,getdate())"; } // ADO の レコードセットを確実に閉じる if ( $SQL->Rs->State >= 1 ) { $SQL->Rs->Close(); } // 更新処理 if ( !$SQL->Execute( $Query ) ) { $data_string .= "$Query\n"; print $SQL->Error; } $conf_db_type = 4; // Excel・MDB $Column = $SQL_Excel->QueryEx( ); } $conf_db_type = 4; // Excel・MDB $SQL_Excel->Close(); } } ?>
HTML雛形
Excel をアップロードして DB を更新します
メッセージ
= $_GET['msg'] ?>
ファイル選択
備考
1) データは必ず Sheet1 にセットして下さい
= $data_string ?>
コード
日付
本文
$conf_db_type = 2; // SQLServer if ( !$SQL ) { $SQL = new DB( "localhost\\MSDE2000", "isdb", "sa", "password" ); } $Column = $SQL->QueryEx( "select コード,CONVERT(varchar, [日付],111) as [日付],本文 from [コメントテーブル] order by [更新日] desc" ); $ncnt = 0; while ( $Column ) { $Column['本文'] = str_replace( "\n", "
\n", $Column['本文'] ); // この部分は、http://winofsql.jp/php/cnvtext/frame.htm // で簡単に作成できます $str=''; $str.="
\n"; $str.="
{$Column['コード']}
\n"; $str.="
{$Column['日付']}
\n"; $str.="
{$Column['本文']}
\n"; $str.="
\n"; print $str; $Column = $SQL->QueryEx( ); $ncnt++; if ( $ncnt >= 100 ) { break; } } $SQL->Close(); ?>
1
CREATE TABLE [コメントテーブル] ( [コード] [int] NOT NULL , [日付] [datetime] NOT NULL , [記入者] [varchar] (40) COLLATE Japanese_CI_AS NULL , [本文] [text] COLLATE Japanese_CI_AS NULL , [更新日] [datetime] NULL , PRIMARY KEY CLUSTERED ( [コード], [日付] ) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]