現在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と関連する良く見られている質問

QaccessからSQLサーバへの移行。

宜しくお願いします。

前回、SQLのインストールがわからず質問した者です。
インストールが完了し次のステップに入りました。

仕様環境:WinXP/Pro SP3 OSは32bit版
CPU: AMD Athlon64 processor 2.00GHz 1.43GB RAM
CPUは32bit・64bitともに対応
ローカルディスクは残り122G有り

access2002 SQLサーバ2008

まず、accessをSQLサーバ-2008に移行しようと思い、
いろいろ調べた結果、accessにアップサイジングウィザードというものがあり、
そこから移行できるようなので、試しましたがエラーが発生しました。
以下がその内容です。

”アップサイジングウィザードはマイクロソフトSQLサーバー(バージョン6.50SP5以上)で使用できます。
SQLサーバーデータソースにログインしてください)”
SQLサーバーにログインすることだな、と思い、いろいろ項目をさがしたところ、
「SQLサーバーマネージメントスタジオ」というツールがあったので、そこでログインをしました。
(この辺はわけもわからずやりました)

しかしその後、状況変わらず、アップサイジングはできませんでした。

そして次に試みたのは「SQLサーバーにデータのインポート及び、エクスポート(32bit)」という
項目があったのでそこから入りました。
データソースはaccessを選択し、ファイル名は該当するaccessのファイル名(仮に作成書として)
ユーザー名とパスワードは特に設定せず進みました。


そして次の変換先が問題です。
間違えだ思いますがわからなかったので、ここでも変換先をaccessに選択し、
ファイル名も同じく該当するaccessファイルユーザー名とパスワードは設定せず、先に進みました。

次にテーブルのコピーまたはクエリの指定という項目になりましたので、
1つ以上のテーブルまたはビューからデータをコピーするを選択し、次へ進み、
どれを変換するか実行したところ、実行の準備までは成功しましたが、
実際のコピーはエラーが出て停止しできませんでした。
またその変換されるファイルもテーブル全部とクエリの一部でした。
レポートにつながっている普通の選択クエリも変換の際に名前が出てきませんでした。
マクロやフォームは出てきませんでした。

そもそも変換先が間違っていると思うので、(同じところから同じところ)
仕方ありませんが変換先がたくさん項目があってをどこに指定していいかわかりません。

ちなみに何をしたいかというと、
・デーベース容量のアップ
・複数人で使っても「排他的に~」と出ず、スムーズな運用
・処理速度アップ(これは元ファイルが1Mぐらいなので今のところ不便は感じないのですが)

もしよければご指導・アドバイス等お願いします。
ちなみに一台のPCですべてやってます。

あと参考書も買わないといけなさそうです。
(何度も聞いてると気がひけますね)

宜しくお願いします。

前回、SQLのインストールがわからず質問した者です。
インストールが完了し次のステップに入りました。

仕様環境:WinXP/Pro SP3 OSは32bit版
CPU: AMD Athlon64 processor 2.00GHz 1.43GB RAM
CPUは32bit・64bitともに対応
ローカルディスクは残り122G有り

access2002 SQLサーバ2008

まず、accessをSQLサーバ-2008に移行しようと思い、
いろいろ調べた結果、accessにアップサイジングウィザードというものがあり、
そこから移行できるようなので、試しましたがエラ...続きを読む

Aベストアンサー

まず、今回のケースでは、アップサイジングウィザードの利用はできません。
以下のリンクを参照してください。
http://support.microsoft.com/kb/967913/ja
Access2003/2007ですら対応していないのですからね。

もともとウィザードの精度はあまり良いものとはいえず、エラーメッセージが出ても対処がわかりにくいことが多いです。

したがって、手間はかかりますが、以下の手順で実行することをお勧めします。
すくなくとも自分が何をやっているか、理解しながら進めることができると思います。

1) SSMS(SQL Server Management Studio)でデータベースを作成する
 ・データベースタブで右クリックして「新しいデータベースを作成」を選び、データベース名だけ入力してあとは初期値で可

2) SSMSのデータのインポートを使って、MDBファイルのテーブルを移行する
 ・作成したデータベースを右クリックして「タスク-データのインポート」
 ・データソースは、元となるMDBファイル(ユーザ名、パスワードはAccess側に掛けていなければ不要)
 ・変換先は上記で作成したデータベースがデフォルトで選択されているはずです
 ・「1つ以上のテーブルまたはビューからデータをコピーする」
 ・「コピー元のテーブルおよびビューを選択」ですべてのテーブルを選択(ビュー、クエリは選択しない)
 ・実行すると、MDB側のテーブルレイアウトに合わせてテーブルが自動生成され、データがコピーされます

3) SSMSでデータベースの下に作成されたテーブルをそれぞれ右クリックして「デザイン」を選択
 ・ここが手間といえば手間ですが、正しいデータ型でコピーされていることを確認しつつ修正します
 ・SSMSの「ツール-オプション」の「Designers」で「テーブルの再作成を必要とする変更を保存できないようにする」の
  チェックがオフになっていることを確認
 ・それぞれのテーブルにつき、以下を修正
  a)主キーを設定
   ・テキスト型からコピーされて、データ型がnvarchar(MAX)になっている場合は適当な長さ(nvarchar(50)など)に変更する
   ・NULLを許容のチェックはオフ
   ・列を選択して右クリックすると「主キーの設定」が選べる
  b)リレーションシップの設定
   ・デザイン画面を右クリックすると「リレーションシップ」が選べるので、「追加」
   ・「テーブルを列の指定」をクリックすると「...」ボタンが出るので、それを押して主キーテーブルを指定

4) PCにODBC接続のためのDSNを作成
 ・メニュー-コントロールパネル-管理ツール-データソース(ODBC)
 ・データソースドライバは「SQL Server Native Client」を設定
 ・名前は任意(SQLSVなど)、サーバはlocalhostなど。
 ・ログイン情報はSQL Serverにログインするときの情報を指定(Windows認証ならば省略可)
 ・既定のデータベースは新しく作成したデータベースを指定

5) Access側にあるテーブルをすべて削除して、代わりにSQL Serverにコピーしたすべてのテーブルをリンクテーブルとして登録する
 ・リンクテーブルのやり方はわかるという前提です(作成したDSNを使用)
  わからなければ以下のリンクも参照
  http://homepage2.nifty.com/SALTY/tips/access/odbcaccess.html
 ・テーブル名はすべて従来のテーブル名と同じになるように

上記までで、テーブルがすべてSQL Serverに移り、それを参照してAccessが動く状態になります。
クエリがAccess側にあっても、「やりたいこと」はすべて満たされるはずです。
(SQL Server内にあるテーブルをAccess側でクエリとして呼ぶことになるため)

クエリはSQL Serverではビューと呼びますが、移行するには、
・SQLビューで表示されるSELECT文をSQL Serverに持っていく
 CREATE VIEW (ビュー名) AS SELECT ....という形式で実行して、ビューを作成する
・ビューに対するリンクテーブルを追加する
の手順を踏む必要がありますが、ここはもう少し理解できてからの方がいいと思います。

>あと参考書も買わないといけなさそうです
もう少しSQL Serverのことは理解した方がいいかもしれませんね。
買うのもいいですが、参考になるものはネット上に大量にありますよ。
まずは、以下のあたりを見てみるといいと思います。

SQL Server 2008自習書シリーズ
http://www.microsoft.com/japan/sqlserver/2008/self-learning/default.mspx

SQL Server 2005自習書シリーズ
(質問者さんの目的であれば2005も2008も変わりません。ドキュメントはこちらの方が豊富です)
http://technet.microsoft.com/ja-jp/sqlserver/cc721623.aspx#ecb

まず、今回のケースでは、アップサイジングウィザードの利用はできません。
以下のリンクを参照してください。
http://support.microsoft.com/kb/967913/ja
Access2003/2007ですら対応していないのですからね。

もともとウィザードの精度はあまり良いものとはいえず、エラーメッセージが出ても対処がわかりにくいことが多いです。

したがって、手間はかかりますが、以下の手順で実行することをお勧めします。
すくなくとも自分が何をやっているか、理解しながら進めることができると思います。

1) SS...続きを読む

QAccessとSQL Serverの連携について

現在Accessで組まれているデータベースがあるのですが、複数人で入力をする必要が出てきたため、SQL Serverへ移行したいと思っています。
ただ、まだデータベースの内容が完全にFIXしておらず、項目に変更や追加が発生する可能性があります。

そこで、
●Accessを管理画面として使い、
●Access上で内容を変更したら、システム全体もその通り変わる
ような仕組みを作りたいのですが、可能でしょうか。
(完全にSQL Serverへ移行するのではなく、AccessとSQL Serverを連携させる?)

よき方法がありましたら教えて頂けましたら幸いです。
ちなみにコストはあまり大きくはかけられません・・。
どうぞよろしくお願いします。

(※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。なお、説明がおかしなこともあるかと思いますがご容赦ください。)

Aベストアンサー

>※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。

でもやることは十分玄人の領域な気が…。なので簡単に、は不可能でしょう。
以下、#1さんと同じように、AccessファイルからSQLServerへデータ読込、書込する環境を構築することを目指します。違うのは概要だけ。#1さんはきちんとシステムを構築する方法を書かれていますが、私は概要だけ。なんで概要だけかは後述。

(1)SQL Server Expressをダウンロードして、サーバー(もしくはサーバーに見立てたPC)にインストール。
(2)Accessのテーブルを(1)のSQL Serverに作成。
(3)ここからはPC側の作業
(4)ODBC接続を作成
(5)現行のAccessに(4)を使ってリンクテーブル作成。
(6)(5)のAccess内のクエリ、フォーム、レポートなどを必要に応じた修正を行う。
(7)動作確認
(8)各PCにODBC接続を設定&Accessファイルを配布。

概要はここまでです。如何でしょう、ご自分でできそうですか?

作業の概要はこの通りなんですが、サーバー機の選定とか"細かい"作業はかなり省略…というか書いてません書けません。特に(6)は実際にAccessファイルを見ないときっちりアドバイスはできませんし、作業ボリュームや難易度も見えてきません。…ということで(業者への発注は想定外のようですがw)業者も見積には難渋するでしょう。さくっと見積もりが出てくることもあるでしょうけど、かなりバッファをとった高額なお見積りかと。正直、見積もり作るのにお金がほしい内容です。

どうしてこんなことをグチグチ書いているかというと、大変申し上げにくいのですが、自称素人の方には難易度高め。業者に任せるか、類似のパッケージを探された方が、不具合などのリスクも軽減され、業務への影響も少ないかと。

ご健闘をお祈りしております。

>※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。

でもやることは十分玄人の領域な気が…。なので簡単に、は不可能でしょう。
以下、#1さんと同じように、AccessファイルからSQLServerへデータ読込、書込する環境を構築することを目指します。違うのは概要だけ。#1さんはきちんとシステムを構築する方法を書かれていますが、私は概要だけ。なんで概要だけかは後述。

(1)SQL Server Expressをダウンロードして、サーバー(もしくはサーバーに見立てたPC)にインストール。
(2)Accessのテー...続きを読む

QSQLサーバのデータをAccessにリンクする方法

SQLサーバの勉強を始めたばかりの者です。
Accessのテーブルを、SQLサーバに移行したいと考えています。

Acessのサイズアップして
SQLサーバにデータを移行することはなんとかできた様子なんですが
今度はそのSQLサーバのデータをAccessにリンクする方法がわかりません。
ネットで検索したのですが
Accessのバージョンが違っていたりしてどうもわかりません。

わかりやすく手順など掲載されているサイトがあったら
教えてください!

Access:2007
SQL Server:2008

を使用しています。

Aベストアンサー

参考URLを添付します。
インポートとリンクの方法、両方説明していますので、ご注意ください。
ODBCで接続する場合はODBC設定も忘れずに!

参考URL:http://office.microsoft.com/ja-jp/access-help/HA010200494.aspx

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESSからSQLServerのデータを取得したい

SQLServerが利用できない環境にデータを持っていくため、以下のようなシステムを考えております。(テーブルのリンクは不可・手動でのデータのエクスポートは不可)

1.ACCESSのフォームに「データベース名」「テーブル名」を入力し、実行ボタン押下
2.ADOでSQLServerに接続
3.指定のテーブルと同じ構造のテーブルをACCESSに作成
4.SQLServerのデータをACCESSにINSERT

ここで質問なのですが、ACCESSは自分のデータベースとSQLServerのデータベースに同時に接続できますか?
同時接続した場合のACCESS/SQLServerの書き分けはどのようになるのでしょうか。

Aベストアンサー

普通に同時接続できるかと思います。
ちょっと手元に環境がないので間違いがあるかもしれませんが以下のような感じでしょうか。
ようは各データベース用にそれぞれ変数を用意してあげれば済むことかと。

Dim accessdb As Database
Dim sqldb As ADODB.Connection

Set accessdb = CurrentDb
Set sqldb = New ADODB.Connection
sqldb.open()

それぞれのDBに対して処理する

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QSQLサーバーのテーブルの値が更新できません

お尋ねします。
SQLサーバー2005にDB1というデータベースにdbo_TB1というテーブルがあります。そのテーブルの特定の列の値を更新したいので、AC.mdbというアクセスのファイルにテーブルのリンクをし、更新したいファイルを用意して、アクセスのクエリでデータを更新しようとしましたところ、更新ができませんでした。
 dbo_TB1を更新可能にするためには、どのようにして権限を与えればいいでしょうか。
 SQLサーバー2005の知識を習得しようと学習を始めたばかりで、よく理解できていません。よろしくお願いします。

Aベストアンサー

通常SQL Serverの権限はデータベース/ユーザ単位につけるもので、個別のテーブルに権限をつけることは極めて稀です。
また、SQL Serverにはテーブル単位で読み取り専用にする機能もありません。
実際に更新権限をはずしても、表示されるメッセージは異なります。
ということで、ずいぶん悩みましたが、可能性が1つありました。

そのテーブルには主キーがなく、しかも、主キーを指定しないままリンクしたのではありませんか?
主キーのないリンクテーブルは更新できません(ODBCドライバの仕様上)。
その点を確認してみていただけますか?

Q別のDBからテーブルをコピーする方法

SQL Server2005 Express Edition を使っています。
異なるDB間(同じコンピュータ内)で、テーブルをコピーしたいの
ですが・・・
コピー元DB名:DB_A
コピー元テーブル名:dbo.顧客
コピー先DB名:DB_B

テーブルのコピーは select * into ・・・ from ・・・ を使えばできそうですが、別DBの場合の方法がわかりません。
お教えいただければ幸いです。
よろしくお願いいたします。

Aベストアンサー

別のDBでも同じインスタンス内ならば同じです。

SELECT * INTO DB_B.dbo.顧客 FROM DB_A.dbo.顧客

Qaccess ODBCリンクテーブルの作り方

 自分のPCで、あるaccessの業務システムを作成し、それを数人で共有してデータの入力をするようにする為に、ODBCリンクテーブルというものを作る必要があると思っています。

 既存で業務的に違う別のシステムがあり、そこでODBCリンクテーブルというものは使用しています。(退職した前担当者が作成。)

 ODBCリンクテーブルというものは、どのうようにして作るのですか?
 (地球マークのテーブルです。)

Aベストアンサー

Accessのテーブルの画面で
何もないところで右クリックすると、「テーブルのリンク」とあると思います。
それをクリックすると今度はファイルを開くダイアログが出てきます。
そこの「ファイルの種類」のドロップダウンリストの一番下の「ODBCデータソース」
を選択するとODBCデータソースの選択画面になります。

但しここで選べるものは、あらかじめ登録されているODBCデータソースだけです。
ODBCデータソースは各PCでコントロールパネル(管理ツール)のODBCデータソースから設定する必要があります。
(ODBCデータソースの登録の方法については長くなるので省きますが)

QODBCの接続に失敗しました(3146)について

どうにもならなくて困ってしまいメールいたします。
現在、ウインドウズ98、アクセス2000という環境で作業をしています。このアクセスでは、日に1回、本社とのデータのやりとりを行っていますが、ある日から「ODBCの呼び出しに失敗しました エラーメッセージ3146」と出てしまうようになってしまいました。何が原因かもさっぱり分かりません。どんなことでもいいので助言お願いします。

Aベストアンサー

ODBCのエラーは、簡単には原因がわからない場合が
ほとんどです。

通常はコントロールパネルのODBCデータソースアドミニ
ストレータの「トレース」タブの中に、「トレースの開始」
というボタンがありますから、適当なファイル名を指定
してからこれを押します。

それからエラーがでる処理をAccessでやってみます。

するとODBCの呼び出し、通信の内容がログに吐かれます
からこれが解決の手がかりになると思います。専門家に
直してもらうにしてもこの情報は必要ですよ。

おそらく3146ならば、MDACがらみかと推測しますけど、
自信はありません。WindowsUpdateとかIEを6にしたとか
サービスパックとか・・考えられる原因はいっぱいあり
すぎて・・


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

人気Q&Aランキング