現在SQL Server2005を使用しております。

別のサーバー内でAccessのテーブルデータが定期的に更新されており、
このデータを利用したシステムをSQL Server上で作ろうと考えています。
手動でSQL ServerにAccessのテーブルデータをインポートするやり方は分かりましたが、(データ更新の為に)定期的にインポートする方法がわかりません。

どのように実現すればよいか、サンプルや参考になるHPがありましたら
是非教えていただけないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

SQL Serverのエディションと、Accessのバージョンを書いた方がよいです。


(Access2003までを想定して書きます)

1) リンクサーバを設定する
 ・サーバオブジェクト→リンクサーバで作成
 ・リンクサーバ名は任意(例えばACC)、「Microsoft jet 4.0 OLE DB Provider」を選択し、製品名に「Microsoft Access」、あとはMDBをフルパス指定するだけでよい。
 ・SQL Server側では「SELECT * FROM ACC...テーブル名」の形式でクエリを実行できる。
 (条件)32ビットマシンであること

2) OPENROWSETを使う
 ・以下のようなクエリを実行する
  SELECT a.* FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','MDBのフルパス';;,テーブル名) AS a
 ・あとはリンクサーバと同じ
 (条件)32ビットマシンであること。アドホッククエリの実行を許可しておくこと

3) SSISを使う
 ・SQL Server Integration Serviceで取り込み処理をパッケージとして作成する
 (条件)Standard Edition以上であること

いずれの方法もジョブをSQL Server Agentに登録することで定期実行できます。
1)2)の場合は、TRUNCATE TABLE文とINSERT SELECT文、3)の場合はパッケージの実行を登録することになります。
Expressであれば、sqlcmdを使ったバッチを書いてそれをWindowタスクで実行します。

外部データのアクセス:http://msdn.microsoft.com/ja-jp/library/ms188313(SQL.90).aspx
OPENROWSET http://msdn.microsoft.com/ja-jp/library/ms190312(SQL.90).aspx
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
>SQL Serverのエディションと、Accessのバージョンを書いた方がよいです。
申し訳ありませんでした。
SQL Server 2000 StandardがWin2003 Serverに入っているのですが、自分のPC(WinXP)に入っているSQL Server2005 StandardのManagement Studioで2000側を操作している状況です。
2000と2005とVersionが違うので正しい使い方か分かりませんが…。
Accessは2003になります。

1),2),3)の手段、全てで試してみたいのですが取り合えず1)でできそうです。
>「SELECT * FROM ACC...テーブル名」
で実行したところデータがとれました。
しかしデータを読んでいるだけで保存はされていないので、後はテーブルを作ってコピーするSQL文を追加すればよいのでしょうか?
(見当違いでしたらすいません)

SQL Serverは今回初めて使うので実現手段も調べてはみましたが結局はよくわからず途方にくれていたのですが、解決の道筋がみえそうです。
ありがとうございます。

他の手段も追って確認したいと思います。

お礼日時:2009/05/15 01:19

#1です。


とりあえずリンクサーバが使えたのであれば、よかったです。

>しかしデータを読んでいるだけで保存はされていないので、後はテーブルを作ってコピーするSQL文を追加すればよいのでしょうか?

その通りです。データは入れ替えでよければ、テーブルを作っておいて、
TRUNCATE TABLE テーブル;
INSERT INTO テーブル SELECT * FROM ACC...テーブル;
を実行させればOKです。

Standardということなので、SQL Server Agentが使えます。
タスクを新規登録して、上記の2つのコマンドを打ち込み、スケジュールを指定すれば自動実行されます。
詳細はリンクなど、MSDNを参考にしてください。

サーバはSQL Server 2000だそうですが、通常の作業には全く問題ないです。ただ、タスクの登録までSSMSでできるかは試したことがないので、わかりません。
うまく登録できないようなら、サーバにログインしてEnterprise Managerを開き、そこで設定した方がいいかもしれませんね。

参考URL:http://msdn.microsoft.com/ja-jp/library/ms189237(SQL.90).aspx
    • good
    • 0
この回答へのお礼

方法(1)での確認完了しました。
また(3)を試したのですが、やはりServer側が2000という事もあり
jamshid6さんがおっしゃるとおりSSISは使えないようです。
(SSISは2005から追加された機能ですので当然といえば当然ですね。)

>サーバにログインしてEnterprise Managerを開き、
>そこで設定した方がいいかもしれませんね
こちらも仰るとおり、サーバー側で設定したら上手くいきました。

(2)の方法も後ほど試したいと思います。
いろいろと教えていただきありがとうございました。

一旦クローズさせていただきます。

お礼日時:2009/05/18 12:30

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qメールスプール一括削除をしてポート578で送信出来なくなりました。

メールスプール一括削除をしてポート578で送信出来なくなりました。

説明下手ですがよろしくお願いします。


最近Windows7に買い替えメールソフトがWindows Liveメールに変わりました。
アカウントの設定がサーバーにメールのコピーを置くという設定になっていて、サーバーがいっぱいになりぎみになり受信が出来ない状態になりました。

ので、その設定を外しましたがたまにエラーとなって返ってきたり(自分の携帯からPCにメールを送ると)していたのでプロバイダーのHPで色々調べメールスプール一括削除というのをしました。

自分では、サーバーにメールのコピーを置くという設定をしていたときのメールのコピーをすっきりさせたつもりでした。

しかしその後メールの送受信(WinLiveメールでは同期)をすると、受信は出来るのですが送信が不可に。

あれ?と思い メールスプール一括削除のことを忘れていてアカウントを削除し新規作成しましたがダメ。

システムの復元をし(このときもメールスプール一括削除を忘れてる)送受信してみるもダメ。

あ、とメールスプール一括削除を思い出しましたが直し方?がわからないので解決策を探し ネットで送信メールのポート番号がブロックされているかもとなっていたので 規定のポート25に変更しなんとか送信出来るようになったのですが・・・。

希望としてなぜそうなったのか?元のポート578では出来るように戻せないのかが知りたいです。

詳しい方教えてくれないでしょうか??

するんじゃなかったぁ~と後悔しまくりです・・・。

ちなみに
PCOS Windows7
メールソフト WindowsLiveメール
出たエラー  アカウント: '******', サーバー: '********', プロトコル: SMTP, ポート: 587, セキュリティ (SSL): なし, ソケット エラー: 10060, エラー番号: 0x800CCC0E
のようにでます。

プロバイダーはDIONでADSLです。

メールスプール一括削除をしてポート578で送信出来なくなりました。

説明下手ですがよろしくお願いします。


最近Windows7に買い替えメールソフトがWindows Liveメールに変わりました。
アカウントの設定がサーバーにメールのコピーを置くという設定になっていて、サーバーがいっぱいになりぎみになり受信が出来ない状態になりました。

ので、その設定を外しましたがたまにエラーとなって返ってきたり(自分の携帯からPCにメールを送ると)していたのでプロバイダーのHPで色々調べメールスプール一括削除と...続きを読む

Aベストアンサー

0x800CCC0Eへの対処法は決まっています。
http://121ware.com/qasearch/1007/app/servlet/qadoc?QID=011248
ですので、セキュリティ対策ソフトを終了させ、かつアカウント設定を削除して再作成しても駄目な場合は、Liveメール自体が壊れている可能性があるので、その場合はLiveメールを削除してしインストールするか、他のメールソフトをご利用下さい。

Q○SQL Server2000○複数テーブルのデータをストアドプロシージャでCSV出力

SQLServer2000で困っています。
定期的にデータを消す必要のあるテーブルが複数あり、
データを消すストアドプロシージャを作成しました。

しかし、これだけでは不十分で、データを消す前に
データをCSV形式などで保存しておきたいと考えて
います。

。。。といったことは可能なのでしょうか。
また、別の方法の方がよいといった意見もお願い
します。

ツール類がインストールされていないPCなので、
Accessなどは使えません。

よろしくお願いします。

Aベストアンサー

BCP を使用してデータをエクスポートできるようです


>bcp テーブル out テーブル名.csv -P -Usa -フォーマットファイル -ログ名.log

フォーマットファイルの内容はマニュアルを参照してください。

Qポートについて

ユーザが送信元ポートをA,宛先ポートをXで相手のサーバに通信して,
そのレスポンスが送信元ポートY,宛先ポートAであった場合問題なく
通信を確立できますか?
この通信のプロトコルにもよるのでしょうか?

また,ユーザが送信元ポートをA,宛先ポートをXで相手のサーバに通信して,
そのレスポンスが送信元ポートY,宛先ポートBであった場合はどうでしょうか?

Aベストアンサー

結論から言うと、そのようにアプリケーションを組めば出来るということに
なると思いますが・・開発はちょっと専門外です
ただ通常のWebサーバやwwwクライアントではそういう機能は無いと思いますよ

TCPIPのソケットプログラム作成のHPを探しましたが
本の紹介はあってもHPで分かりやすく・・というのは無さそうです
TCPIPのソケットプログラミングの本を図書館などで見ていただくのが
確実と思います・・中途半端な回答で申し訳ないです

QSQL ServerとACCESSとのデータのやり取りについて

下記の仕組みを検討しています。データをSQL Serverに置く。(安全性などを考慮して)Access側にも同じ構造のテーブルを用意してデータの編集・検索表示などをACCESSで行う。更新したデータをSQL Serverの該当テーブルにSQL文を実行して書き込む。書き込み方法は、両者を比較してSQL Server側にないレコードをInsert文にて追加する。(Not Inによるサブクエリを使用)
お聞きしたいのは、ここで問題が発生していまして、
(1)単一主キーのテーブルの場合は動作しているが、複数主キーのテーブルの場合に、処理に非常に時間がかかる、もしくはエラーとなること(複数主キーでは処理できないものなのか)
(2)上記のようなSQL ServerにデータをおいてAccess側でデータの編集・検索表示などを行う場合の良い仕組みについて
色々とHPを探し回ったのですが、今回のケースにずばり当てはまるものがなく、解決の糸口もなく苦戦しています。わかりにくい質問文になって申し訳ないですが、似たようなご経験の皆様方おられましたらアドバイス頂けないでしょうか。お願い致します。

下記の仕組みを検討しています。データをSQL Serverに置く。(安全性などを考慮して)Access側にも同じ構造のテーブルを用意してデータの編集・検索表示などをACCESSで行う。更新したデータをSQL Serverの該当テーブルにSQL文を実行して書き込む。書き込み方法は、両者を比較してSQL Server側にないレコードをInsert文にて追加する。(Not Inによるサブクエリを使用)
お聞きしたいのは、ここで問題が発生していまして、
(1)単一主キーのテーブルの場合は動作しているが、複数主キーのテーブルの場合に、処理に非...続きを読む

Aベストアンサー

前職でSQLとAccessを連携させてシステムを構築していました。
2年前なので現在はもっと効率的な方法もあるのかもしれませんが
OJTで前述のような方法を学んでいました。

ただ私が後輩を指導する際には
http://www2.famille.ne.jp/~akio1998/l_msac.html であったり
書籍は谷尻かおりさんの書かれた物がに役立ってはいましたので
活用してみてください。

一番いいのは、開発者用サイト(SQL 質問 掲示板などで検索すると大体でてきますが)
にはQ&A掲示板があり、そこであればより多くの専門家が閲覧して
答えてくれるのでそこで得た答えを参考に試行錯誤を一度してみるのがスキルをつけるのにてっとり早いと思います。

QIP固定や、ポート開放をしたつもりだったのですが、

IP固定や、ポート開放をしたつもりだったのですが、
http://www.ugtop.com/spill.shtml
でポート番号を見たところ、設定したポート番号と違う上、ページ更新をするとポート番号が変わります。
これはポートがちゃんと開放されていないということなのでしょうか?

Aベストアンサー

>ポート番号を見たところ、設定したポート番号と違う上、ページ更新をするとポート番号が変わります。

そりゃ、クライアント(ブラウザ)がサーバに接続するポート番号は固定しないのが一般的だからです。
そのページでルータやファイヤーウォールなどのポート解放(ポートフォワーディングなど)の確認はできません。

TCPポートの指定した範囲への接続を試してくれるサイトが他にあるでしょう。
# そのポートで待ち受けしているアプリが起動していないと失敗と表示されるかも知れません。

QSQL Serverのテーブル追加を、Accessに反映させたいのですが・・・

SQL Server Enterprise Manager でテーブルの行を追加したのですがが、
リンクさせているAccessのテーブルに反映されません。

会社のDBで、テーブルをSQL Serverで作成し、
Accessへリンクさせています。
通常の入力業務はAccessで行っています。
このDBを作成した前任者が退職してしまい、
DBを管理できる人がいない状況です。

ネットで調べたところ、SQL Serverで、
「パブリケーションの新規作成」を行うか、
「DTSインポート/エクスポート」を行う必要がありそうなのですが、
これらの違いもわからず、
またAccesDBへの影響がわからず、うかつに試せない状況です。

SQL Server、Access共に全く明るくないため、
つたない文章で申し訳ありませんが、
どなたか、テーブルの追加を反映させる方法を
教えて頂けませんでしょうか。

Aベストアンサー

ネットでお調べになった内容は明らかに関係ないのですが、
そもそも、Enterprise Managerでなさったオペレーション内容はテーブルの「行」の追加ですか?
デザイン画面でテーブルの「列」(カラム、項目、フィールド)を追加されたわけではないですか?
もし「列」ならリンクテーブルの貼り直しが必要かと思いますが、Accessへの影響を考えないで列を増やすのは危険なので、なぜそのオペレーションを行ったのかの背景も気になります。
そのオペレーションはあなたがなさったのですか?

Qポートスキャンでこちらのポートではなく相手方のポートをコロコロ変えてア

ポートスキャンでこちらのポートではなく相手方のポートをコロコロ変えてアクセスしてくるのは何故ですか?

アクセスしてきて、そのポートに入れなかったから、こちらの別ポートを探そうとしてくるならわかりますが、既にフィルタリングでブロックされて入れなかったのに、相手方のポートをコロコロ変えて入れなかったポートにアクセスし続ける意味がわからないのですが・・。
相手方のポートを変えることに意味があるのですか?

Aベストアンサー

別に変えたくてコロコロ変えているわけではないと思います

http://www.way-on.com.tw/PCbasal/internet/tcpip5.htm
「クライアントのポート番号には、OSによって動的(ダイナミック)に任意の番号を割り当てて使用されています」
ソースポート(クライアントのポート番号)は動的に割り振られますので

自分のPCでも、Webブラウザを開いて何度かアクセスしながらDOSプロンプトでnetstatコマンドを叩けばソースポートが変化しているのがわかるでしょう

QSQL serverの1つのデータベース内にある全てのテーブルを一気に

SQL serverの1つのデータベース内にある全てのテーブルを一気にcsv化したいと思っています。
が、テーブルを1個ずつcsv化する方法しか見つからず、困っています。
テーブルの数が100ほどあるので、できれば一気に行いたいのです。

※見つけた方法
(1)SQL Server Enterprise Maganerで、データベースを右クリック→「すべてのタスク」の「エクスポート」→変換対象にFlat Fileを選ぶ
これだとテーブル1個ずつしか変換できません。

(2)bcpコマンドを使う
こちらもテーブル名を指定していますので、やはりテーブル1個ずつしか変換できません。

何かいい方法はないでしょうか。
あるいは、上記の方法を少し変えることで一気に変換できるのでしょうか。

Aベストアンサー

テーブルsysobjectsを検索してCSV化したいテーブル名を出力するSQLを実行して、その結果を使ってbcpを起動するバッチを作るとか。

Qポート開放チェックとポートの状態

ポート開放チェックというサイトが多数あります。
グーグルで検索すれば何件かはヒットすると思います。

そういったサイトには必ず、ポートを使用するソフトウェアを起動します。
次にそのソフトウェアが使用するポート番号を入力します。
と書かれています。

ルーターのポートを開放し、ファイアウォールソフトのポートも開放し
ソフトを起動すればポートの開閉をチェックできるのは分かるのですが、
ルーターのポートは開放してあってもポートを使用するソフトウェアを
起動していないときのポートは開いているのでしょうか。
閉じているのでしょうか。

ふと気になったので質問させていただきました。
なお、ポートの開放の仕方を聞いているのではありません。

Aベストアンサー

未使用ポートなので状態はCLOSEDです。

QSQL ServerのデータをSQL Databaseに連携したい

オンプレにあるSQL ServerのデータをクラウドのAzure SQL Databaseからリアルタイムに参照したいのですが、リンクサーバーは使えないようです。うまい方法ありませんでしょうか?
最悪、CSVかなんかでバッチ的に連携するしかないかなと思っていますが・・

よろしくお願いいたします。

Aベストアンサー

オンプレの更新頻度やクラウドの参照頻度によりますが、
そもそもオンプレのデータをクラウドからプルするのはセキュリティ的にどうかと思います
オンプレ側からプッシュする方式がよいのではないでしょうか?

同じ種類のSQLサーバーであればリプリケーション機能があったりしそうですが
無理ならとりあえず、SQL文ベースでのダンプとインサートができるか確認し、
無理ならCSVなど汎用テキストで受け渡すことになると思います
本来はEDIなどかまして所定の入出力形式のすり合わせをしておくのでしょうけどね


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報