「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2563
現在:3


Baseでレコードの移動がうまくいかない。

ページOpenOffice.org FAQの登録ページ
投稿者O.K
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-10-23 09:55:04 (土)
OSWindows XP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

Baseのテーブル操作で、レコード位置を指定すると「ResoltSet was set to forward only」のエラーが出ます。使用したコードは

oDoc = ThisComponent
Connection = oDoc.getParent().DataSource.getConnection("","")
Statement = Connection.createStatement()
sql = "SELECT * FROM テストマスタ ORDER BY フリガナ ASC"
ResultSet = Statement.executeQuery(sql)
ResultSet.last()

3行目を Statement = Connection.createStatement(TYPE_SCROLL_INSENSITIVE)
にしても同じでした。ResultSet.nextは問題なく使用できます。
Base初心者で自力では限界です。どうかよろしくお願いします。


質問内容の確認

M.Kamataki (2010-10-23 11:02:13 (土))

タイトルでは「移動」となっていますが、マクロの意図はレコードの最終行のResultSetの取得ですよね。レコード行を指定して、その位置のResultSetを得たいということでよろしいですか。勘違いがありましたら、指摘してください。

説明不足でした

O.K (2010-10-23 12:00:45 (土))

ご指摘の通りです。目的はフォーム上に非連結?の10レコードの表示を、次ページ・前ページボタンで操作したかったからです。relative メソッド、absolute メソッドも同様の結果でしたので、lastメソッドを題材とさせていただきました。説明不足で申し訳ありません。

確認しました

M.Kamataki (2010-10-23 23:26:48 (土))

>「ResoltSet was set to forward only」のエラーが出ます。

確かに ResultSet.next 以外では、ResultSet.last()だけでなく、ResultSet.previous()とかでも同じエラーが出ます。

まだ調べきっていないのですが、Baseでは ResultSet.next 以外は動作しない感じですねぇ。Calcなどからデータソースを呼び出して組んだマクロでは動作したので、まったく利用できないわけではないようです。

>目的はフォーム上に非連結?の10レコードの表示を、次ページ・前ページボタンで操作したかったからです。

これは、マクロを組まないでも実現できるので、こちらの方法を試されたらどうでしょうか。

ボタンを非連結?のフォームの下のコントロールとして配置し、ボタンをダブルクリックして表示された属性ダイアログボックの全般タブにある「アクション」のドロップダウンリストを見てください。その中に「前のレコード」「次のレコード」などがあります。これらのアクションを選んであげれば、レコードを操作するボタンを簡単に作成できます。

unoコマンド (たびたび、よこやりでごめんなさい)

Wannwanno (2010-10-24 10:00:12 (日))

こんにちわ
unoコマンドを使うと、こんな感じです。

Sub PrevRecord
  oDoc = ThisComponent
  gotoRecord(oDoc, oDoc.DrawPage.Forms(0).Row - 10)
End Sub

Sub NextRecord
  oDoc = ThisComponent
  gotoRecord(oDoc, oDoc.DrawPage.Forms(0).Row + 10)
End Sub

Sub gotoRecord(oDoc As Object, nRec As Long)
  Dim aProp(0) As New com.sun.star.beans.PropertyValue
  aProp(0).Name = "Position"
  aProp(0).Value = nRec
  createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch( _
    oDoc.CurrentController.Frame, ".uno:AbsoluteRecord", "", 0, aProp)
End Sub

よこやりでごめんなさい

ike@九州 (2010-10-24 10:22:37 (日))

回答される方が増えるのは嬉しい限りです。
積極的にお願いいたします

私も調べてみました。
http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XConnection.html#createStatement

デフォルトでは forward-only type になるようです。
で、変更の方法を探すと
http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/Statement.html#ResultSetType
で変更するようです。

値は 1003 1004 1005
http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/ResultSetType.html

1004 or 1005 での内容の違いは把握できませんでした トホホ

〜
Statement = Connection.createStatement()
sql = "SELECT * FROM テストマスタ ORDER BY フリガナ ASC"
Statement.ResultSetType = 1004 'or 1005
ResultSet = Statement.executeQuery(sql)
ResultSet.relative(10)


com.sun.star.sdbc.RowSet サービスであれば無問題で操作できますね
http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FBase%2FRowSet

無題

Wannwanno (2010-10-24 15:27:02 (日))

こんにちわ
ResultSetType でさがしたら日本語のページも見つかりました。

OpenOffice.org BASIC プログラミングガイド/データベースアクセス
http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Database_Access

FORWARD_ONLY = 1003

ResultSet に対し順方向のナビゲーションのみを許可する。

SCROLL_INSENSITIVE = 1004

ResultSet にすべてのナビゲーションを許可するが、オリジナルデータへの変更は記録しない。

SCROLL_SENSITIVE = 1005

ResultSet にすべてのナビゲーションを許可し、オリジナルデータへの変更による ResultSet への影響を認める。

ResultSetType

M.Kamataki (2010-10-24 17:40:34 (日))

「OpenOffice.org BASIC プログラミングガイド」には、ResultSetTypeの紹介があるものの、今ひとつ使い方がわからなかったのですが、ike@九州さんのサンプルのように使うのですね。O.Kさんのご質問も、「OpenOffice.org BASIC プログラミングガイド」を参考にされた様子があります。

なお、「OpenOffice.org BASIC プログラミングガイド」はまとめたPDFファイルが以下にあります。

http://wiki.services.openoffice.org/w/images/f/f5/BasicGuide_OOo3.1.0jp.pdf

これはグッデイがPDF化したもので、以下のURLにあるCDイメージを入手されると、他に日本語化された「入門ガイド」「管理者ガイド」も入手できます。

OpenOffice.org 3.1.1 日本語拡張版 ダウンロードページ
http://ooopackages.good-day.net/ooo/

出来ました

O.K (2010-10-25 09:04:48 (月))

出来ました。皆さん有難うございます。
これで先に進めそうです。
今回初めて質問させて頂きましたが、皆さんの対応に感謝します。

お名前:
題名: