【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

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

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

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

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

A 回答 (3件)

普通に同時接続できるかと思います。


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

Dim accessdb As Database
Dim sqldb As ADODB.Connection

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

それぞれのDBに対して処理する
    • good
    • 1
この回答へのお礼

アドバイスありがとうございます。なるほど、片方はCurrentDBで接続、片方はADOで接続すればよいのですね。この二つを同時に一つのSQL文で扱うことはできるでしょうか?「Insert into accessDB.ユーザーマスタ Select sqldb.ユーザーマスター」みたいな。

お礼日時:2005/10/19 22:35

#1です。


>この二つを同時に一つのSQL文で扱うことはできるでしょうか?
これはさすがに無理ではないかと思います。

2のお礼で書かれているようにSQLServerのデータをレコードセットに取り、1レコードずつInsertするしかないと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。あれから試行錯誤いたしまして、マクロ→データベース変換でODBCドライバを使用することにより、簡単にテーブルデータを取り込めるようになりました。何度もお返事ありがとうございました。

お礼日時:2005/10/21 18:41

>ACCESSは自分のデータベース・・に接続できますか?


自分のとはカレントDB?ということですか?それとも他のAccessファイルにADOで接続するということですか?

カレントDBからADOでSQLServerに接続すればカレントDB内で処理できますが。
もしくは#1の方のいうように変数を宣言してカレントDBを変数にセットすればいいのでは。
Dim acdb As Database
Set acdb = CurrentDb のように。


’SQLServerに接続
Dim cnn As New ADODB.Connection
Dim rec As New ADODB.Recordset

' 接続を確立させる。
cnn.Open "Provider=SQLOLEDB;" & _
"Data Source=サーバー名;" & _
"Initial Catalog=サーバ上のデータベース名;", "sa", ""
’SQLを指定してレコードセットを作成する。
rec.Open "select * from テーブル名", cnn, _
adOpenKeyset, adLockOptimistic
他のAccessファイルに接続する場合はProvider=Microsoft.Jet.OLEDB.Jetのバージョン
に変えて接続を確立すれば出来ます。
質問内容と違っていたらゴメンなさい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。#1さんのお礼欄にも書いたのですが、一つのSQL文で同時に扱うことはできますでしょうか?それともSQLServerのデータをレコードセットに取り、1レコードずつInsertするしかないでしょうか。

お礼日時:2005/10/19 22:38

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

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

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

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

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

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

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のテー...続きを読む

QVBAでSQLServerへのODBC接続

お世話になります。

最近AccessとVBAの学習を始めた者です。
Accessを用いて簡単な売上管理システムを作成しました。
システムを共有できるようにするためにSQLServerへの接続を試みています。
SQLServer内にAccessと同じデータ型のテーブルは作成済みです。
これにどのような方法でデータの追加などをするか調べても良く分かりません。
VBAでODBC接続を行うためのコードを記述するというところまで分かりました。
コードの例などあればすごく助かります。

私自身理解が不足しているため稚拙な文章ですがご了承ください。

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

Aベストアンサー

リンクテーブルを使うのが一番幸せな方法。
ローカルの DB 内には外部 DB のテーブルへのリンク情報が保存される。
フォーム、クエリ、レポート、VBA コードなどからは、ローカルの DB にあるテーブルも、リンクテーブルも、どちらも違いなく扱えるというメリットがある。

ODBC を媒体にして VBA コードから外部 DB へ接続し、レコード群のやり取りだけを行う方法も可能だが、自由度は減る。
ユーザー側にある Access の DB にはユーザーが操作するフォームやレポートがあるわけだが、これらとデータの仲介が全て VBA コードによる処理となるため、"非 VBA" で接続する方法がとれない。
具体的には、フォームやレポートのデザイン画面でレコードソースを設定することができなかったり、Access 側のクエリが使用できなかったりする。
UI とデータをそこまで分離させようとするのであれば、Access じゃないほうがもっと便利に開発できるんじゃないか? と個人的には思う。
Visual Basic 2015 Express とかのがもっと本格的に、もっと自由に開発できる。

VBA のコードで作成した DAO または ADO の Reocordset オブジェクトをフォームの Recordset プロパティに設定して読み書きするためのサンプルは下記を参照。
https://msdn.microsoft.com/ja-jp/library/office/ff822528.aspx

DB からデータを取得したり、DB のデータを更新する部分は SQL 文を中心に処理することになるかと思います。
データを更新する場合は SQL Server 側に作成したストアド プロシージャーを VBA から呼び出して適切な更新値を与えてあげるやり方が主でしょうかね。

「ADO SQL Server」 あたりで検索していくと調査がはかどると思います。

リンクテーブルを使うのが一番幸せな方法。
ローカルの DB 内には外部 DB のテーブルへのリンク情報が保存される。
フォーム、クエリ、レポート、VBA コードなどからは、ローカルの DB にあるテーブルも、リンクテーブルも、どちらも違いなく扱えるというメリットがある。

ODBC を媒体にして VBA コードから外部 DB へ接続し、レコード群のやり取りだけを行う方法も可能だが、自由度は減る。
ユーザー側にある Access の DB にはユーザーが操作するフォームやレポートがあるわけだが、これらとデータの仲介が全て...続きを読む

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のテーブルデータを一気にVBAで追加したい・・

Accessのテーブルデータを一気にVBAで追加したい・・

Accessに一時商品登録データというテーブルがあり、
問題なければ商品登録データにデータを流し込みたいと思っています

テーブルのデータ構造は全く同じです

VBAで一時商品登録のテーブルから一件ずつデータを読み取って
商品登録データに追加することは出来るのですが
一気にデータを追加する方法があれば教えていただけないでしょうか?

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

Aベストアンサー

本当にいろいろな方法があります。

一番簡単なのは、
あらかじめ「追加クエリ」を作成しておき

 Docmd.OpenQuery "追加クエリ名"

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute "追加クエリ名"

追加クエリを使用しない場合は
追加クエリの SQL文 に相当するSQL を 実行。

 strSQL="INSERT INTO 商品登録データ SELECT 一時商品登録データ.* FROM 一時商品登録データ"

 Docmd.RunSQL strSQL

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute strSQL

とか。

直書き、間違いがあったら御免。

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

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

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

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

Aベストアンサー

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

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

QADOでRecordsetオブジェクトをレコードソースに設定したい

Access2000を使っています。リンクテーブルを使わずに、ODBCで繋いだDBのテーブルをフォームのレコードソースにセットしたいのですが、可能でしょうか。

宜しくお願いします。

Private Sub FormNoKansu()
Dim cn as New ADODB.Connection
Dim rs as New ADODB.Recordset
Dim strSql as String

'ODBCでサーバーに接続
cn.ConnectionString = "ODBCでMySQLに..."
...
strSql = "SELECT * FROM ..."
rs.Open strSql, cn

'ここに[rs]を入れられたらと思っています
Me.Recordset = ""

End Sub

Aベストアンサー

Set rs = New ADODB.Recordset
rs.Open strSql, cn, adOpenKeyset, adLockReadOnly

'フォームへ抽出レコードセット セット
Set Forms!["このモジュールを実行しているフォーム名"].Form.Recordset = rs

これでは如何でしょうか?

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

こんにちは。

Access初心者です。

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

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

Aベストアンサー

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

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

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


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

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

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

Me.CurrentRecord

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

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でグローバル変数を宣言して定数を定義したい

Access97でグローバル変数を持ちたいと思ったのですが、
それらしきものが見つかりません。

Public変数というものがあるのですが、これはプロシージャ-単位で
しか定義できないようです。

ひとつのデータベース全体でグローバルに定義できる定数を持ちたいのです。
たとえば、データベース内で頻繁に読み込む必要があるファイルのPATH
"C:\Program Files\Netscape\Communicator\"を
固定で持っておきたい。

何か方法はないでしょうか?
よろしくお願いします。

Aベストアンサー

もし、定数でいいのであれば、
標準モジュールに、

Const DATAPATH = "C:\Program Files\Netscape\Communicator\"

のように書けば、どこからでもDATAPATHと言う名前で参照することができます。

変数である必要があるのなら、同じく標準モジュールに、

Global glbDataPath as String

Public Sub PathSet()

glbDataPath = "C:\Program Files\Netscape\Communicator\"

Exit

と書いておき、AutoExecマクロのモジュールを開くでPathSetサブルーチンを呼び出せばよいと思います。

Q親フォームからサブフォームのレコードソースを設定

親フォームからサブフォームのレコードソースを設定するには?
フォーム1にテーブル1をドロップアンドドラッグして、「テーブル1のサブフォーム」を作成しました。

フォーム1にあるコマンドボタンから「テーブル1のサブフォーム」のRecordSourceを設定する方法を教えてください。

「テーブル1のサブフォーム」からなら
Private Sub Form_Load()
Me.RecordSource = ""
End Sub

とできるのですが、
やりたいことはフォーム1からのイベントなので
「テーブル1のサブフォーム」からのイベントは使えません。

だからってフォーム1の
Private Sub コマンド2_Click()
Me.テーブル1のサブフォーム.RecordSource = "テーブル1のサブフォーム"
End Sub

とするとコンパイルエラーになります。

良い方法があれば教えてください。アドバイスよろしくお願いします。

Aベストアンサー

No2です。説明もれがあったので追加しておきます。
No2のところで、

>このとき、「テーブル1のサブフォーム」
>のフィールドには「#Name?」のような表示がされていると
>思います。すなわちこときはサブフォームにはレコードソースが
>設定されていないからです。

としていますが、「#Name?」と表示される理由はフィールドの
コントロールソースが設定されているために、「#Name?」のような
表示が出てきます。


ここからは蛇足ではありますが、コントロールソースが設定されていなければ
こうした表示はでませんが、もしコントロールソースも取り除いて
いるならば、コマンド1でもコマンド2のクリックイベントでもどちらでも
かまいませんが、たとえば「テーブル1のサブフォーム」の
フィールドのコントロールソースをすべて取り除いておいて、
コマンド2のクリックイベントで設定するとすれば、一応
「テーブル1のサブフォーム」のフィールドの名前をID、名前、住所として
テーブル1のフィールド名を同じくID、名前、住所とするならば、

Private Sub コマンド2_Click()
Me.テーブル1のサブフォーム.Form.RecordSource = "テーブル1"
Me.テーブル1のサブフォーム.Form.Controls("ID").ControlSource = "ID"
Me.テーブル1のサブフォーム.Form.Controls("名前").ControlSource = "名前"
Me.テーブル1のサブフォーム.Form.Controls("住所").ControlSource = "住所"
End Sub

として、レコードソース、コントロールソースを設定します。

No2です。説明もれがあったので追加しておきます。
No2のところで、

>このとき、「テーブル1のサブフォーム」
>のフィールドには「#Name?」のような表示がされていると
>思います。すなわちこときはサブフォームにはレコードソースが
>設定されていないからです。

としていますが、「#Name?」と表示される理由はフィールドの
コントロールソースが設定されているために、「#Name?」のような
表示が出てきます。


ここからは蛇足ではありますが、コントロールソースが設定されていなければ
こうした表示はで...続きを読む


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

人気Q&Aランキング