Top > OOobbs2 > 68

OOobbs2/68 Edit

  • サマリ: テキストボックスに結合されたフィールドの内容が更新されない
  • 環境: Basic
  • 状態: 未解決
  • 投稿者: 牛若?
  • 投稿日: 2007-09-14 (金) 22:34:46

質問 Edit

OOO Base のフォームを作っています。フォーム上のテキストボックスはデータソースのフィールドと結合しています。 直接キー入力するのではなく、TextBox.text="Test"のようにテキストボックスの値の書き換えをするとフィールドデータが更新されません。解決方法がありましたら、教えてください。よろしくお願いします。

回答 Edit

  • データベースの利用はよくわかりませんが、Developer's Guide のフォームの章にある「結合コンポーネントとしてのコントロールモデル」セクション付近から記載があるかもしれません。Dev Guide Committing_Controls

(Dev Guide の .xhtml ファイルは IE だと見られないかも)

  • はにゃ?? 2007-09-15 (土) 01:00:00
  • Developer's Guide を今読んでいます。内容が理解できて解決策を発見できたら書き込ませてもらいます。 -- 牛若? 2007-09-16 (日) 14:26:23

回答2 Edit

  • 結合されているフィールドへ表示されているデータの行( resultset )は、データの整合性を保つためにロックされているため、マクロによる書き換えができませんでした。とりあえず"フォームの属性" − "イベント" − "レコード置換前"と"レコード置換後"にマクロを登録してデータの更新をしてみました。
Private dumyid as string
"レコード置換前"のマクロ
Doc = ThisComponent
Form = Doc.DrawPage.Forms.GetByIndex(0)
Ctl = Form.getByName("TextBox1")
'表示中のデータ行の主キーの値取り出し
dumyid = Ctl.text  
"レコード置換後"のマクロ
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("test")
If Not DataSource.IsPasswordRequired Then
	Connection = DataSource.GetConnection("","")
Else
	InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
	Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If
Statement = Connection.createStatement()
Statement.ResultSetConcurrency = 1008
Sqlstrng = "UPDATE ""table1"" SET  ""field1""='" & strng1 & "' WHERE  ""ID""=" &  dumyid
ResultSet = Statement.executeQuery(Sqlstrng)
  • この方法ではレコード置換が起こるたびにマクロが実行されるので、必要に応じてフラグを立ててデータを書き換えないようにしないといけません。
    • 一応このマクロを使っているのですが、ここがまずいよって言うところがあったらコメントお願いします。 -- 牛若? 2007-09-28 (金) 23:06:56

感想,コメント,メモ Edit

  • Basic + Database ではこのドキュメントもいいようです。 http://www.pitonyak.org/database/AndrewBase.pdf -- はにゃ?? 2007-09-28 (金) 23:10:00
  • コメントありがとうございます。早速、 AndrewBase.pdf をダウンロードしてきました。 base のマクロを組むときの参考にとてもよい資料になりそうです。 -- 牛若? 2007-10-03 (水) 23:17:49
    • 以下、ドキュメントを斜め読みした感想です。「 Base でマクロを使うときは、フォームやコントロールにテーブルやフィールドを結合させない。その代わり、マクロで直接各コントロールの値を読み書きしながらデータベースを操作する。」という考え方のほうが良いようですね。 -- 牛若? 2007-10-09 (火) 23:27:31
    • なるほど。でも GridControl をフォームに結合させずにただのコントロールとして使おうとしたところ、うまくいきませんでしたけどねぇ・・・。Grid 以外ならありかと思います。以下、ある本のデータベースの章サンプルへのリンク http://www.packtpub.com/files/SampleChapter-Learn%20OpenOffice.pdf -- はにゃ?? 2007-10-09 (火) 23:54:17


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