かなり強烈に意味不明なものがあるのでオリジナルと並べておきます。
比べるとイベントの意味や発生するタイミングが見当つけられます。
record が動詞と名詞でこんがらがってるようです。翻訳する人たちも大変だなぁ。
| 日本語 | 英語 |
|---|---|
![]() |
![]() |
| 日本語 | 英語 |
|---|---|
![]() |
![]() |
| 日本語 | 英語 |
|---|---|
|
|
| 日本語 | 英語 |
|---|---|
![]() |
![]() |
| 日本語 | 英語 |
|---|---|
![]() |
![]() |
| 日本語 | 英語 |
|---|---|
|
|
OOo のデータベースフォームで、フォームのフィルタ(たぶんRowSetのフィルタ)を
設定すると最後の1個のフィルタが無視される。1個だけ設定した場合はその1個が
無視される。
いまのところ調べたのは OR でつないだ場合だけ、AND とかもっとややこしい条件を
指定した場合はしらん。知りたくも無い。
も少し詳細に気がついたので補記
- リストボックスも同様 (つうかこっちメイン)
- (NG) SELECT "NAME","CODE" FORM "TABLE" ORDER BY "KANA" ASC
- (NG) SELECT "NAME","CODE" FORM "TABLE" WHERE "COND"='A' ORDER BY "KANA" ASC
- (OK) SELECT "NAME","CODE" FROM "TABLE" WHERE "COND"='A'
- (OK) SELECT "NAME","CODE" FROM "TABLE" WHERE "COND"='A' OR "COND"='dummy ' ORDER BY "KANA" ASC
WHERE句 無しの ORDER 有りが NG
WHERE句 有りの ORDER 無しが OK
WHERE句 有りの ORDER 有りで Where条件が1件ならNG
WHERE句 有りの ORDER 有りで Where条件が複数なら最後の OR 条件以外で OK
対策
ORDER を こいつらのフィルターに記述しない。
OpenOffice.org 2.4 の BASE で(さらに)見つけたバグ二点
その1
MySQL のリレーションを扱えるようになったみたいだが、リレーションシップ(リレーションデザイン)のウィンドウではテーブル間にリレーションの線が引かれない。だから線を右クリックしてコンテキストメニューで編集ができない。作ることはできても確認、変更は不可能。
その2
内部のDBMSでリレーションを変更しても Modified がセットされないので保存ができない。 Modified をセットするためには、関係ないテーブルを追加したり削除したりする必要がある。
OpenOffice.org の BASE で組み込みの(HSQLDB) テーブルを MySQL に移すときに、
プライマリキーなどに 自動インクリメントの INTEGER を使っているときは注意が必要。
組み込みのDB はインデックスの初期値が 0 に対して MySQL では 1 から始まる。
したがって、
| レコード | HSQLDBのインデックス | MySQLの自動インデックス | 結果 |
|---|---|---|---|
| 1 | 0 | 自動で 1 | 成功 |
| 2 | 1 | 元のデータから 1 | 重複キーで失敗 |
| 3 | 2 | 素直に 2 | 成功 |
以上、ぱっと見た目の症状のメモ
global POSSIZE_INDEX as integer Sub CyclicResizeWindow dim window as object window = StarDesktop.CurrentComponent.CurrentController.Frame.ContainerWindow ' window = thisComponent.CurrentController.Frame.ContainerWindow dim size() as integer size = array( _ array(640,480), _ array(800,600), _ array(1024,768), _ array(1280,960), _ array(1400,1050)) dim possize as object: possize = window.getPosSize dim wh() as integer dim i as integer for i=0 to UBound(size) wh = size(i) if (wh(0)>possize.Width(0) OR wh(1)>possize.Height) then exit for next if (i>UBound(size)) then i = POSSIZE_INDEX POSSIZE_INDEX = POSSIZE_INDEX + 1 if (POSSIZE_INDEX > UBound(size)) then POSSIZE_INDEX = 0 end if wh = size(i) window.setPosSize(0,0, wh(0),wh(1), 15) End Sub
REM ***** BASIC *****
Sub Main
MaximizeFrame(starDesktop.ActiveFrame)
MaximizeFrame(starDesktop.CurrentFrame)
End Sub
'
' use the MS Winows API
'
' Add this section to the beginning of
' the basic module where you add
' the actual work procedures
'
Declare Function ShowWindow Lib "user32" (ByVal lHwnd As Long, ByVal lCmdShow As Long) As Boolean
'
' This is procedure that does the actual work
'
sub MaximizeFrame( aFrame as object )
dim window
dim handle
window = aframe.getContainerWindow()
handle = window.getWindowHandle(dimarray(), 1) REM 1=WIN32
ShowWindow( handle, 3 )
end sub
フレームウィンドウのサイズを変えるマクロ。 フレームサイズは画面サイズより大きい値を指定してもエラーにはならない。 最後の引数の flags は以下のURLを参照。 http://api.openoffice.org/docs/common/ref/com/sun/star/awt/PosSize.html
' ------------------------------------------------------------ ' ウィンドウサイズの変更 ' flags ' X 1 flags the x-coordinate. ' Y 2 flags the y-coordinate. ' WIDTH 4 flags the width. ' HEIGHT 8 flags the height. ' POS 3 flags the x- and y-coordinate. ' SIZE 12 flags the width and height. ' POSSIZE 15 flags the x- and y-coordinate, width and height. ' sub SetPosSize(x as long, y as long, w as long, h as long, optional flags as integer) if isMissing(flags) then flags = 15 thisComponent.CurrentController.Frame.ContainerWindow.setPosSize(x, y, w, h, flags) end sub ' ------------------------------------------------------------ ' ウィンドウ外枠の取得 ' function GetPosSize() as object GetPosSize = thisComponent.CurrentController.Frame.ContainerWindow.getPosSize() end function
sub OnMouseInside(arg as valiant)
dim Pointeras object
Pointer= CreateUnoService("com.sun.star.awt.Pointer")
Pointer.setType(29) ' = PEN - constants group SystemPointer
arg.Source.Peer.setPointer(Pointer)
end sub