create a new page, using OOobbs3/103 as a template.
Front page
Search
掲示板
Reload
Help
Browse Log
掲示板の使い方
OOo 掲示板3
OOo 掲示板2
OOo 掲示板
掲示板
雑談掲示板
New
List of pages
Recent changes
Backup
簡単ヘルプ
整形ルール
Start:
** [[OOobbs3/103]] [#j41bb4ee]
-''サマリ'': 【BASE】フォームのデータソースの値をBasicで...
-''環境'': Basic
-''状態'': 解決
-''投稿者'': [[nari]]
-''投稿日'': 2013-02-24 (日) 14:56:07
*** 質問 [#pe023f49]
はじめて質問させていただきます、nariと申します。
よろしくおねがいいたします。
質問の内容は、「フォームのデータソースの値をBasicで動的に...
【デザインモード】
ウィンドウ【フォームの属性】
↓
タブ【データ】
↓
項目【データソース】←この値をマクロで設定したい!
http://blog.tokachi-lab.com/archives/2006/03/openofficeor...
↓の『DataSourceName』というプロパティがまさにこの件で設定...
このプロパティを持つオブジェクトの取得方法などがわかり...
http://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Gu...
なぜこのようにしたいかと申しますと、
下記のようなディレクトリ構造を持つファイル群を設けます。
[あるディレクトリ]
└①起動ファイル.odt
└bin[フォルダ]
└②データベースファイル.odb
└forms[フォルダ]
└③様々なフォーム.odt
└backup[フォルダ]
└④データベースファイルのコピー.odb
①には、
- ②を④にバックアップするマクロ
- ③を②と接続させ、③を起動させるためのマクロ
を埋め込みたいです。
これらのファイルは、複数台のWindowsやMacで使われる可能性...
データソースのファイルパスが限定できないため、
①のカレントディレクトリを元にデータソースのファイルパスを...
よろしくお願いいたします。
*** 回答 [#hc617339]
- 相対パスでは動きませんねぇ。以下のようにします。
Sub DataSourceName
oDrawPage = ThisComponent.getDrawPage()
oForms = oDrawPage.getForms()
oForm = oForms.getByName("MainForm")
oForm.DataSourceName = ConvertToURL("file_path")
End Sub
各オブジェクトのプロパティやメソッドを知るには、拡張機能...
使い方は [[OOoBasic/Macros/MRI/Documentation]] やオンライ...
慣れるまでは分かりにくいですが、手順としては以下のような...
+ サイトなどでオブジェクトを取得するコードを見る
+ MRI 拡張機能でそのオブジェクトを表示させる
+ プロパティ、メソッドなどを見る (UNO への理解が深まれば...
+ 該当するプロパティやメソッドについて、API リファレンス...
慣れれば、調べまわったり、質問して回答を待ったりする面倒...
-- はにゃ? &new{2013-02-24 (日) 16:19:38};
- はにゃさん、ありがとうございます。
sub Main
dbPath = getParentDirectory(CurrentDirectory()) & "b...
oDrawPage = ThisComponent.getDrawPage()
oForms = oDrawPage.getForms()
oForm = oForms.getByName("MainForm")
oForm.DataSourceName = dbPath
oForm.DataField = "出力"
end sub 'カレントディレクトリのパスを/なしで返す
Function CurrentDirectory()
oDoc = ThisComponent
sPath = ConvertFromURL(oDoc.getLocation())
sPath2 = left(sPath,instr(sPath,dir(sPath))-2)
CurrentDirectory = ConvertToURL(sPath2)
End Function
Function getParentDirectory(Path)
Dim Start As Integer
Start = 0
Res = 0
Flag = true
Do While Flag
Start = InStr(Start+1,Path,"/")
If Start <= 0 Then
Flag = false
Else
Res = Start
End If
Loop getParentDirectory = Left(Path,Res)
End Function
-- nari &new{2013-02-24 (日) 21:47:46};
- すみません、enter押したら送信されてしまいました。 -- na...
- 上記のコードで当面の問題は解決しましたが、DataSourceNam...
- フォームを再接続させる簡単な方法は、デザインモードを一...
oController = ThisComponent.getCurrentController()
oController.setFormDesignMode(True)
oObj1.DataSourceName = "file:///....odb"
oController.setFormDesignMode(False)
-- はにゃ? &new{2013-02-25 (月) 01:03:47};
- はにゃさん、ありがとうございます!僕の書いたコードに一...
- すみません、もう少々お待ち下さい -- nari &new{2013-03-0...
- 私は急いでいないのでごゆっくりどうぞ。 -- はにゃ? &new{...
- できたので、コード掲載します。
上のコードの、
oForm.DataField = "出力"
として、フィールド名を指定しようとしていたのが
一番大きな間違いの原因だったようです。
sub Main
dbPath = getParentDirectory(CurrentDirectory()) & "bin/d...
oDrawPage = ThisComponent.getDrawPage()
oForms = oDrawPage.getForms()
'データベース接続
DatabaseContext = createUnoService("com.sun.star.sdb.Dat...
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
-- nari &new{2013-03-20 (水) 18:58:22};
#comment
*** 感想,コメント,メモ [#ld157cdf]
#comment
End:
** [[OOobbs3/103]] [#j41bb4ee]
-''サマリ'': 【BASE】フォームのデータソースの値をBasicで...
-''環境'': Basic
-''状態'': 解決
-''投稿者'': [[nari]]
-''投稿日'': 2013-02-24 (日) 14:56:07
*** 質問 [#pe023f49]
はじめて質問させていただきます、nariと申します。
よろしくおねがいいたします。
質問の内容は、「フォームのデータソースの値をBasicで動的に...
【デザインモード】
ウィンドウ【フォームの属性】
↓
タブ【データ】
↓
項目【データソース】←この値をマクロで設定したい!
http://blog.tokachi-lab.com/archives/2006/03/openofficeor...
↓の『DataSourceName』というプロパティがまさにこの件で設定...
このプロパティを持つオブジェクトの取得方法などがわかり...
http://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Gu...
なぜこのようにしたいかと申しますと、
下記のようなディレクトリ構造を持つファイル群を設けます。
[あるディレクトリ]
└①起動ファイル.odt
└bin[フォルダ]
└②データベースファイル.odb
└forms[フォルダ]
└③様々なフォーム.odt
└backup[フォルダ]
└④データベースファイルのコピー.odb
①には、
- ②を④にバックアップするマクロ
- ③を②と接続させ、③を起動させるためのマクロ
を埋め込みたいです。
これらのファイルは、複数台のWindowsやMacで使われる可能性...
データソースのファイルパスが限定できないため、
①のカレントディレクトリを元にデータソースのファイルパスを...
よろしくお願いいたします。
*** 回答 [#hc617339]
- 相対パスでは動きませんねぇ。以下のようにします。
Sub DataSourceName
oDrawPage = ThisComponent.getDrawPage()
oForms = oDrawPage.getForms()
oForm = oForms.getByName("MainForm")
oForm.DataSourceName = ConvertToURL("file_path")
End Sub
各オブジェクトのプロパティやメソッドを知るには、拡張機能...
使い方は [[OOoBasic/Macros/MRI/Documentation]] やオンライ...
慣れるまでは分かりにくいですが、手順としては以下のような...
+ サイトなどでオブジェクトを取得するコードを見る
+ MRI 拡張機能でそのオブジェクトを表示させる
+ プロパティ、メソッドなどを見る (UNO への理解が深まれば...
+ 該当するプロパティやメソッドについて、API リファレンス...
慣れれば、調べまわったり、質問して回答を待ったりする面倒...
-- はにゃ? &new{2013-02-24 (日) 16:19:38};
- はにゃさん、ありがとうございます。
sub Main
dbPath = getParentDirectory(CurrentDirectory()) & "b...
oDrawPage = ThisComponent.getDrawPage()
oForms = oDrawPage.getForms()
oForm = oForms.getByName("MainForm")
oForm.DataSourceName = dbPath
oForm.DataField = "出力"
end sub 'カレントディレクトリのパスを/なしで返す
Function CurrentDirectory()
oDoc = ThisComponent
sPath = ConvertFromURL(oDoc.getLocation())
sPath2 = left(sPath,instr(sPath,dir(sPath))-2)
CurrentDirectory = ConvertToURL(sPath2)
End Function
Function getParentDirectory(Path)
Dim Start As Integer
Start = 0
Res = 0
Flag = true
Do While Flag
Start = InStr(Start+1,Path,"/")
If Start <= 0 Then
Flag = false
Else
Res = Start
End If
Loop getParentDirectory = Left(Path,Res)
End Function
-- nari &new{2013-02-24 (日) 21:47:46};
- すみません、enter押したら送信されてしまいました。 -- na...
- 上記のコードで当面の問題は解決しましたが、DataSourceNam...
- フォームを再接続させる簡単な方法は、デザインモードを一...
oController = ThisComponent.getCurrentController()
oController.setFormDesignMode(True)
oObj1.DataSourceName = "file:///....odb"
oController.setFormDesignMode(False)
-- はにゃ? &new{2013-02-25 (月) 01:03:47};
- はにゃさん、ありがとうございます!僕の書いたコードに一...
- すみません、もう少々お待ち下さい -- nari &new{2013-03-0...
- 私は急いでいないのでごゆっくりどうぞ。 -- はにゃ? &new{...
- できたので、コード掲載します。
上のコードの、
oForm.DataField = "出力"
として、フィールド名を指定しようとしていたのが
一番大きな間違いの原因だったようです。
sub Main
dbPath = getParentDirectory(CurrentDirectory()) & "bin/d...
oDrawPage = ThisComponent.getDrawPage()
oForms = oDrawPage.getForms()
'データベース接続
DatabaseContext = createUnoService("com.sun.star.sdb.Dat...
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
-- nari &new{2013-03-20 (水) 18:58:22};
#comment
*** 感想,コメント,メモ [#ld157cdf]
#comment
Page: