OOobbs3/103
質問
はじめて質問させていただきます、nariと申します。 よろしくおねがいいたします。 質問の内容は、「フォームのデータソースの値をBasicで動的に設定したい」ということです。 【デザインモード】 ウィンドウ【フォームの属性】 ↓ タブ【データ】 ↓ 項目【データソース】←この値をマクロで設定したい! http://blog.tokachi-lab.com/archives/2006/03/openofficeorg_b.html ↓の『DataSourceName』というプロパティがまさにこの件で設定したい値なのですが、 このプロパティを持つオブジェクトの取得方法などがわかりません。 http://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Database_Forms なぜこのようにしたいかと申しますと、 下記のようなディレクトリ構造を持つファイル群を設けます。 [あるディレクトリ] └①起動ファイル.odt └bin[フォルダ] └②データベースファイル.odb └forms[フォルダ] └③様々なフォーム.odt └backup[フォルダ] └④データベースファイルのコピー.odb ①には、
これらのファイルは、複数台のWindowsやMacで使われる可能性があり、 データソースのファイルパスが限定できないため、 ①のカレントディレクトリを元にデータソースのファイルパスを指定したいと考えております。 よろしくお願いいたします。 回答
Sub DataSourceName oDrawPage = ThisComponent.getDrawPage() oForms = oDrawPage.getForms() oForm = oForms.getByName("MainForm") oForm.DataSourceName = ConvertToURL("file_path") End Sub 各オブジェクトのプロパティやメソッドを知るには、拡張機能などを試してみてください。http://extensions.services.openoffice.org/en/project/MRI 慣れるまでは分かりにくいですが、手順としては以下のような感じになります。
慣れれば、調べまわったり、質問して回答を待ったりする面倒も減ると思います。
oController = ThisComponent.getCurrentController() oController.setFormDesignMode(True) oObj1.DataSourceName = "file:///....odb" oController.setFormDesignMode(False)
上のコードの、 oForm.DataField = "出力" として、フィールド名を指定しようとしていたのが 一番大きな間違いの原因だったようです。 sub Main dbPath = getParentDirectory(CurrentDirectory()) & "bin/db" & ".odb" oDrawPage = ThisComponent.getDrawPage() oForms = oDrawPage.getForms() 'データベース接続 DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") DataSource = DatabaseContext.getByName(dbPath) Connection = DataSource.getConnection("", "") oController = ThisComponent.getCurrentController() 'デザインモードオン oController.setFormDesignMode(True) oForm = oForms.getByName("MainForm") 'フォーム名を指定 oForm.DataSourceName = dbPath 'DBのディレクトリを指定 oForm.CommandType = com.sun.star.sdb.CommandType.TABLE oForm.Command = "出力" 'テーブル名を指定 'デザインモードオフ oController.setFormDesignMode(False) end sub
感想,コメント,メモ
|