「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2314
現在:3


SQLサーバーにあるデータにアクセスしたい

ページOpenOffice.org FAQの登録ページ
投稿者質問
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-11-20 19:22:20 (土)
OSWin XP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

下記サンプルはike@九州様が作成して頂いた mdbファイルにアクセスして、テーブル名を取得し、カルクにデーターを抜き出すサンプルですがmdbファイルではなく、SQLサーバーにあるデータにアクセスしたいのですが単純に
oDataSource.URL = "sdbc:ado:access:PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & sMDBURL
の部分を
oDataSource.URL = "ODBC;Driver={SQL Server};Server=xxx\xxx;database=xxx;uid=xxx;pwd=xxx;" にしても oController.connect()の部分でエラーがでてしまいます。
『ODBC;Driver={SQL Server};Server=xxx\xxx;database=xxx;uid=xxx;pwd=xxx;』の部分は
エクセルVBAで使用しておりました部分を使っており、一部xxxにて変更させていただいております。

Sub CreateODBfromMDB
'Base 新規ドキュメントのURL
sFileURL = "E:\TESTmdb.odb"
oSimpleFileAccess = createUnoService( _
  "com.sun.star.ucb.SimpleFileAccess" )
'Baseドキュメントの既存確認
If oSimpleFileAccess.exists( sFileURL ) Then
 '既存のファイルを開く
 oDoc = StarDesktop.loadComponentFromURL( _
   ConvertToURL(sFileURL), "_blank", 0, Array())
 bRegister = False
Else
 'create new odb document
 oDoc = StarDesktop.loadComponentFromURL( _
   "private:factory/sdatabase", "_blank", 0, Array())
 bRegister = True  
End IF

sMDBURL = "E:\TEST.mdb"

If Not oSimpleFileAccess.exists( sMDBURL ) Then
 Msgbox(sMDBURL & " がありません")
 Exit Sub
End IF

' set to use mdb
oDataSource = oDoc.DataSource 
oDataSource.URL = "sdbc:ado:access:PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & sMDBURL
oDoc.storeAsURL(ConvertToURL(sFileURL), Array())

'OOo へのデータベースの登録
If bRegister Then 
 oDBCtx = CreateUnoService("com.sun.star.sdb.DatabaseContext")
 oDBCtx.registerObject("登録したいデータベース名",oDataSource)
End  If

' with controller
oController = oDoc.getCurrentController()
' connect to db and get connection
If NOT oController.isConnected() Then
 oController.connect()
End If
oCon = oController.ActiveConnection

'テーブルの取得
oTables = oCon.getTables()
If oTables.Count > 0 then
 For n = 0 to oTables.Count - 1
  MsgBox(oTables(n).Name)
 Next
 sQt = oCon.getMetaData().getIdentifierQuoteString()
 'クエリの実行
 oState = oCon.createstatement()
 'oState.executeUpdate("CREATE 〜")
 oResultSet= oState.executeQuery("Select * From " & sQt & oTables(0).Name & sQt)
 While oResultSet.next()
  '〜Calc 等への処理
 Wend 
End If
oDoc.close(true)
End Sub

ODBC接続なら

M.Kamataki (2010-11-20 22:15:07 (土))

ODBCのデータソースを作成すれば以下のように書けると思います。

sdbc:odbc:datasource name

ただし、実際にSQL Serverで検証したことはありませんので、お試しいただければと思います。

エラー発生しました

質問 (2010-11-21 09:55:48 (日))

有難う御座います。
早速試してみました

oDataSource.URL = "sdbc:odbc:Driver={SQL Server};Server=xxx\xxx;database=xxx;uid=xxx;pwd=xxx;"
に置き換え実行しましたが、

oController.connect()
『接続が確立できませんでした』とエラーがでました

記入方法がおかしいのでしょうか?
Server=xxx\xxx の¥があるのがおかしいのでしょうか?

ご存知の方おられましたら、教えてください。

ADO接続なら

ike@九州 (2010-11-21 10:19:28 (日))

ODBC のデータソースは予め手動作成登録して、そのデータソース名を使用します。

sdbc:odbc:作成したデータソース名

"ODBC 作成" で検索すればご理解出来ると思います。

ODBC 接続でなく ADO 接続の場合
http://takekazuo.fc2web.com/bkoff_19.htm

上記を参考にして
新規にBaseドキュメントを作成します
テーブル等が無事表示されたなら
そのドキュメント上から以下マクロを実行して下さい

Sub test
 inputbox("URL","URL",ThisComponent.DataSource.URL)
End sub

取得できた URL が
oDataSource.URL = 〜 の右辺になります

参考までに重要な部分は * でよいので
表示された URL を UP していただければ助かります。

上手く行きました

質問 (2010-11-21 11:25:46 (日))

有難う御座います。
Testのアドレスを割り当てれば、上手くできました
有難う御座いました

サマリを

M.Kamataki (2010-11-22 11:31:14 (月))

質問者さんにお願いします。このご質問が他の方にも役立つようにサマリ(まとめ)を書いてください。ike@九州さんのお願いにもあるように、testマクロで取得できたURLを書きこんでいただくだけでけっこうです。サマリが書かれたたら、当ページは完了にします。

接続文字列について

ike@九州 (2010-11-23 15:20:02 (火))

色々調べていましたらありました。

参考サイト
http://support.microsoft.com/kb/193332/ja

上記サイトの接続文字列を以下の右辺に使用すると OK のようです。
oDataSource.URL = "sdbc:ado:PROVIDER=〜"

確認したのは mdb ファイルだけですが
SQL Server でも OK だと推測されますね。

有難う御座いました

質問 (2010-11-30 16:22:37 (火))

oDataSource.URL = "sdbc:ado:PROVIDER=〜"
で上手く行きました。

お世話になりました。

お名前:
題名: