Baseへの接続方法について

データベース (Base) について
返信する
KsBookshelf
記事: 4
登録日時: 3月 27, 2009, 11:04 am

Baseへの接続方法について

投稿記事 by KsBookshelf »

はじめまして。
早速ですが、Excel2007からBaseへ接続する方法を調べております。

1.そもそもExcel2007からBaseへの読み書きが可能でしょうか
2.可能である場合、プロバイダには何を使えば良いでしょうか

今回Baseを始めて使うことになり、いろいろと調べてみましたが、分かりませんでした。
ご存知でしたら、是非ご教示をいただきますよう、お願いいたしますま。
seagull
記事: 24
登録日時: 1月 25, 2009, 11:31 am

Re: Baseへの接続方法について

投稿記事 by seagull »

KsBookshelf さんが書きました:はじめまして。
早速ですが、Excel2007からBaseへ接続する方法を調べております。
接続とのことですが、データの移植でしょうか。エクセルをテーブルに見立てたBaseの構築でしょうか。前者なら、コピペでできます。ヘルプも参照してみて下さい。
KsBookshelf さんが書きました: 1.そもそもExcel2007からBaseへの読み書きが可能でしょうか
2.可能である場合、プロバイダには何を使えば良いでしょうか
1,データのやり取りは可能です。
2,プロバイダは関係ありません。全てはローカルのHD上での作業です。
KsBookshelf
記事: 4
登録日時: 3月 27, 2009, 11:04 am

Re: Baseへの接続方法について

投稿記事 by KsBookshelf »

seagull様、早速のご返答をありがとうございました。
この度は質問が曖昧で申し訳ございませんでした。

実は、以下のようなことを考えております。

EXCELで以下のようなを表を作成しております。
氏名|住所
田中|東京都
鈴木|埼玉県
佐藤|神奈川県
 :
 :
このデータをBaseの「住所録」というーブルに書き込みたいということが一つです。

更に、別のEXCELで氏名を入力し、以下のようなSQLで住所(埼玉県)を参照しようとしています。
select 住所 from 住所録 where 氏名 = '鈴木'

このような説明でご理解いただけるでしょうか。
seagull
記事: 24
登録日時: 1月 25, 2009, 11:31 am

Re: Baseへの接続方法について

投稿記事 by seagull »

KsBookshelf様、

Baseを立ち上げ、ヘルプを開いてみてください。

Base でのデータのインポート/エクスポート

と書かれているリンクを探してクリックしてみてください。基本的にはそこに書かれている通りです。



1、エクセルのシートでBaseに持っていきたいデータの部分を選択・コピーする。
2、Baseで、「住所録」テーブルのアイコンで右クリック、貼り付けを選択
3、ダイアログボックスが出てきたりしますが、あとは画面の指示に従って進めて行く・・・

こんな感じでできたりしますが、如何でしょうか。
tani
記事: 60
登録日時: 6月 13, 2008, 10:12 am

Re: Baseへの接続方法について

投稿記事 by tani »

BaseのバックエンドのDBはhsqldbなので対応しているjdbcなりodbcなりのドライバをインストールして
うまいこと設定すれば、Excelのデータソースとして利用できるようになる気がしますが、やり方がよく
わからないので別の方法を。

VBAから以下のようなコードで特に設定無しでいけました。(Excel2003で確認)

コード: 全て選択

Sub Main()

' OOoに接続
Set objServiceManager = CreateObject("com.sun.star.ServiceManager")

'作成したBaseのデータベース名
sBaseFile = "aaaaa"
'Connection処理
Set oBaseContext = objServiceManager.CreateInstance("com.sun.star.sdb.DatabaseContext")
Set oDataSource = oBaseContext.getByName(sBaseFile)
Set oConnection = oDataSource.getConnection("", "")
Set oStatement = oConnection.CreateStatement()

' データベースからデータを取得
Set ResultSet = oStatement.executeQuery("SELECT * FROM table1")

j = 1
nFields = ResultSet.getMetaData().getColumnCount()

'フィールド名をシート上に展開する
For i = 1 To nFields
  Cells(1, j).Value = ResultSet.getMetaData().getColumnName(i)
  j = j + 1
Next i

'ここからデータをシート上に展開する処理
col = 1
Row = 2
While ResultSet.Next
  col = 1
  For i = 1 To nFields
    Cells(Row, col).Value = ResultSet.getString(i)
    col = col + 1
  Next i
  Row = Row + 1
Wend

End Sub
マシンにOOoがインストールされていること、Baseでaaaaa.odbというデータベースが作成
されていて中にtable1というテーブルが定義されていることが条件です。
InsertとかUpdateとかDeleteとかも似たようなコードで出来ると思います。

追記:
「ツール」->「オプション」->「OpenOffice.org Basic」->「データベース」で"aaaaa"が登録
されていることも前提条件です。もし登録されていないものを使用する場合は
'作成したBaseのデータベース名
sBaseFile = "file:///C:/tmp/aaaaa.odb"
こんな感じで指定します。

またInsertとかUpdateとかDeleteとかやるときはexecuteUpdateというメソッドを使用します。
http://api.openoffice.org/docs/common/r ... ement.html
KsBookshelf
記事: 4
登録日時: 3月 27, 2009, 11:04 am

Re: Baseへの接続方法について

投稿記事 by KsBookshelf »

seagull様、
このたびは何度もご丁寧にご返事をいただき、ありがとうございました。
「Base でのデータのインポート/エクスポート」を試みてみましたところ、上手くいきました。
予めテーブルをを作り、テーブルを開いてそこにデータ流し込む、ということが頭にあり、手間取ってしまいました。

tani様、
ご返答をありがとうございました。
早速、VBAソースをお借りしてテストをしてみました。
データベースへの接続までは上手くいきました。
テーブルデータの読み込みクエリexecuteQueryで、少し手こずっておりますが、ここまで教えていただきましたので、これ以降は自力で解決してみたいと思っております。

お二人には、何とお礼を申し上げてよいか分かりません。
本当にありがとうございました。
またお尋ねすることがあるかもしれませんが、その時はまたよろしくお願いいたします。
tani
記事: 60
登録日時: 6月 13, 2008, 10:12 am

Re: Baseへの接続方法について

投稿記事 by tani »

BaseのSQL文の仕様で、テーブル名とカラム名はダブルクォートでくくらないと
エラーが出たりすることがあった気がします。で、素のSQL文だけなら以下の
ような感じでいけると思いますが、

コード: 全て選択

Select * From "住所録";
Basic言語のソース中で記述するならさらにエスケープしないといけないので
以下のような感じで試してみるとどうしょうか。

コード: 全て選択

strSQL = "SELECT * FROM ""住所録"";"
KsBookshelf
記事: 4
登録日時: 3月 27, 2009, 11:04 am

Re: Baseへの接続方法について

投稿記事 by KsBookshelf »

tani様、

executeQueryで手こずっておりましたが、原因が分かりました。
strSQL = ""SELECT * FROM table1";"
と書いて実行しましたが、調べてみましたところ、テーブル名がTable1(頭文字が大文字)になっていました。
分かってみれば簡単なことでした。
ちなみにAccessやSQL Serverでは、テーブル名とカラム名いずれも大文字小文字の区別をしません。

SQL文は、以下の二つを試してみましたが、いずも正常に処理されました。
strSQL = "SELECT * FROM ""table1"";"
strSQL = "SELECT * FROM table1;"

たびたびのご丁寧なご教示に重ねてお礼を申し上げますと共に、結果をご報告を申し上げます。
返信する

“Base”に戻る