Top > OOobbs3 > 44

OOobbs3/44 Edit

  • サマリ: Baseの新規作成Formの編集について
  • 環境: Basic
  • 状態: 解決
  • 投稿者: new_OOo3?
  • 投稿日: 2011-01-10 (月) 16:11:01

質問 Edit

お世話になります。

下記URL Pageを参考に新規Tableと新規Formを含むBase Documentを作成するmacroを下記Code1を作成しました。

URL : http://hermione.s41.xrea.com/pukiwiki/index.php?OOoBasic/Base/Forms#y214d372

***********  [  Code1  ]  ***************
Sub oFormCreate
	On Error Goto oBad
	'Create New Base Document 
		Dim oDoc
		Dim Dummy()
		Dim oAns
			oDoc = StarDesktop.loadComponentFromURL("private:factory/sdatabase","_blank", 0, Dummy())
			oDataSource = oDoc.DataSource
		'
		' set to use hsqldb
			oDataSource.URL = "sdbc:embedded:hsqldb"
			oTempName = ConvertToUrl("c:\temp\oBaseMacroTest.odb")
			if FileExists(oTempName) then
				oAns = msgbox("同名fileがあります。削除しますか?", 4,"既存fileの削除確認")
				if oAns = 6 then
					Kill(oTempName)
				Else
					MsgBox("中断します。")
					Exit Sub
				End if 				
			end if
			oDoc.StoreAsURL(oTempName,Dummy())			
		'
		' Load the Tools library
				If NOT GlobalScope.BasicLibraries.isLibraryLoaded("Tools") Then
					GlobalScope.BasicLibraries.LoadLibrary("Tools")
				End If		
		'
		' Connect DB
			Dim oBaseContent
			Dim oDB
			Dim oCon	
				oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
 				oDB = oBaseContext.getByName(oTempName)
 				oCon = oDB.getConnection("", "")
 		'
 		'Create New Table
			Dim oTables
			Dim oTableName
			Dim oTableDescriptor
 				' Access Tables in Connecting DB
 					oTables = oCon.getTables() 
 				' Define the Table Property
 					oTableDescriptor = oTables.createDataDescriptor()
 					oTableName = "MACROTESTTABLE"
 						oTableDescriptor.Name = oTableName
 				' Define the Datas to table Columns(	最低一項目は設定が必要		)
   				oCols = oTableDescriptor.getColumns()
   					oCol = oCols.createDataDescriptor()
   					oCol.Name = "ID"
   					oCol.Type = com.sun.star.sdbc.DataType.INTEGER
   					oCol.IsNullable = com.sun.star.sdbc.ColumnValue.NO_NULLS
   					oCol.IsAutoIncrement = True
   					oCol.Precision = 10
   					oCol.Description = "Primary Key"
   				oCols.appendByDescriptor(oCol)
   			'
   			' Create Table	but not to be able to look the table, because it needs to store Base Document.	
   				oTables.appendByDescriptor(oTableDescriptor)
   			'
   			'Base Document Save	
   			oDB.DatabaseDocument.store()
   	'
   	' 新規Form作成
   			oFormDocuments = oDoc.getFormDocuments()
				oForm = oFormDocuments.createInstance("com.sun.star.sdb.DocumentDefinition")
				oFormDocuments.insertByName("oNewForm", oForm)
 		'
 		' DisConnect
 			 oCon.close
 			 oCon.dispose
 		' 
 REM		wait 1000
 		'
 REM		Dim oArgs(0) As new com.sun.star.beans.PropertyValue
 REM			oArgs(0).Name = "Overwrite"
 REM			oArgs(0).Value = true
 REM			oDoc.storeToURL(oTempName,oArgs)		
  		' Display
 		msgbox "Success"
 	Exit Sub
	oBad:
		Dim oErLine As Integer
		Dim oErNum As Integer
		Dim oErMsg As String
			oErLine = Erl
			oErNum = Err
			oErMsg = Error
		Msgbox("Error Line No. " & Chr$(9) & " : " & oErLine & Chr$(10) _
			& "Error Number " & Chr$(9) & " : " & oErNum &Chr$(10 ) _
			& "Error Message" & Chr$(9) & " : " & oErMsg , 0,"Error Message")
End Sub
*****************************************

macro自体は最終Message(Sccess)まで表示して完了しますが、そのまま作成したFormを編集しようとすると下図のError Messageが表示されます。

BaseError0.png

作成したFileを一旦終了(「変更を保存する」を選択)した後に、再度作成したFileを起動してからFormの編集を選択すると問題無く編集画面が表示されます。

そこで、上記Code1中の「REM」にてComment文にしている5行を追加して、macro中で保存させようとすると下図Errorとなります。

BaseError.png

つきましては、上記Macro終了後に一旦Fileを終了させずにFormを編集出来るようにする方策をご教示頂けます様お願いします。

蛇足ながら、当方の最終目的を以下に記します。

目的 :Table, Formを含むBase Documentの作成

Step1 : 新規Tableを含む新規Base Documentの作成 => 済み

Step2 : 新規Table、新規Form(Form項目無し)を含む新規Base Documentの作成 => 済み

Step3 : 新規Table、新規Formに各種入力Form(Text Box, Radio Box, ListBox 等)を追加した新規Base Documentの作成

現在、Step3を行う為に作成したFormを編集Modeで開くところで躓いております。

宜しくご教示頂けます様お願いします。

回答 Edit

  • 試してみていませんが、hsqldb は保存されたベースドキュメントが必要ですから、保存した後に閉じて、また開く必要があるかもしれません。 -- はにゃ? 2011-01-11 (火) 23:02:28

感想,コメント,メモ Edit

  • ご回答ありがとうございます。 投稿後に試行錯誤した結果、「Form」Documentが保存されていない事が原因の様です。(表示されているだけで実体が無い状態) 「Form」Documentの保存につきましては、もう少し粘ってから再質問させて頂きたいと思います。 本質問はこれで完了とさせて頂きたいと思います。 -- new_OOo3 2011-01-12 (水) 18:02:28
  • GUIからbaseドキュメントを作成するときも先に保存させられることを考えると、保存された状態でないと動かなくてもしかたない・・・と思います。 -- はにゃ? 2011-01-13 (木) 02:20:40


Attach file: fileBaseError.png 661 download [Information] fileBaseError0.png 631 download [Information]

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes