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

Q&A集[?]

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

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

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

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:1742
現在:7


パラメータクエリで並べ替えた後行番号を表示するには

ページOpenOffice.org FAQの登録ページ
投稿者GAKU
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-04-29 09:12:39 (木)
OSWindows XP
依存するページfaq/5/172
バージョン
edit/refer

メッセージ

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

いつもお世話になっております。

faq/5/172「クエリで並べ替えた後行番号を表示するには」と同様の方法を、パラメータクエリでトライしたところ、1から1ずつ増える行番号にはならず、飛び飛びの番号がつきます。
正しく、1から順番につけることは可能でしょうか?

添付したsample2.odbでは、イベントの参加者をBaseで管理しています。
年度別データ抽出クエリはパラメータクエリで、開催年度を入力すると、その年度に参加履歴のある参加者だけを抽出し、ふりがなの50音順に並べ替えます。
例えば、"2008"と入力すれば、2008年度に参加した人のデータだけを抽出しますが、faq /5/172にならって追加したNOフィールドは、1から始まり1ずつ増えていく行番号にはならず、飛び飛びで番号が入ってしまいます。

よろしくお願いします。


パラメータクエリーが絡むと難しい

M.Kamataki (2010-04-29 18:26:33 (木))

添付していただいたサンプルを基にクエリーを作成してみました。下記です。

filefaq5_348sample3.odb

意図どおり、作成できたのは、q_test2クエリーです。開催年度を「2008」で絞り込むq_2クエリーをサブクエリーとして利用して、番号付けしてみました。

クエリーには実行順があるようで、添付された sample2.odb のクエリーでは、番号付けのNOフィールドを作成した後、パラメータの内容で絞り込まれているようです。したがって番号が飛び飛びになってしまっているのではと思います。わたしのサンプルでは、予め絞り込まれたq_2クエリーの結果を利用して、番号付けを実行したので、通し番号になっています。

ただし、同じ理屈でパラメータクエリーを利用したq_1クエリーを作成し、そのクエリーを基にしたq_test1クエリーではうまくいきませんでした。

参考にされた過去の質問ページ、faq/5/172でも紹介されていますが、マクロを使って番号付けしたクエリーを作成する方法が、今回の目的には適しているのかな、と思いました。faq/5/332でも触れましたが、マクロではパラメータクエリーは利用できないので、InputBox 関数などを使って値を得るようにしてください。

フォームからクエリの書き換え

ike@九州 (2010-04-30 09:58:00 (金))

Kamataki さんのサンプルから q_2 クエリの内容を書き換えればよいので
フォーム上に配置したリストボックスから申込年度を選択すると q_2 クエリの SQL 文の右4文字を書き換えてフォームをリロードするようにしてみました

回答ありがとうございます。

GAKU (2010-04-30 19:50:04 (金))

M.Kamatakiさま、ike@九州さま

確認が遅くなり、申し訳ありません。
回答ありがとうございます。
マクロではパラメータクエリが使えないのですね。
開催年度を指定し抽出した結果に、1から順番をつけて、最終的にはCSVファイルにエクスポートすることを実現したいと考えています。
Input関数などを使う方法を検討していくのが良いのでしょうか?

ikeさんに作っていただいたフォームでは、確かに開催年度毎に1から順番がつけられています。
こちらを利用して最終的にCSVファイルへエクスポートすることも可能でしょうか?

CSVファイルにエクスポート

M.Kamataki (2010-04-30 20:57:23 (金))

自動化するなら、マクロを使うしかないですね。

CSVファイルにエクスポートする方法は、faq/4/1812「マクロからodbファイル内のテーブルを別のodbファイルにコピーするには?」で紹介されています。マクロ例も紹介されています。

クエリのCSVエクスポート

ike@九州 (2010-05-02 11:18:28 (日))

Calc へ書き出しCSVへエクスポートの手順で試作です
フォーム上にボタンを配置し以下のマクロを割り当てます
(データベースの登録が必要です)

Sub MakeCSV(oEvent)
 Dim args(0) As New com.sun.star.beans.PropertyValue
 Dim args1(2) As New com.sun.star.beans.PropertyValue
 Dim args2(1) As New com.sun.star.beans.PropertyValue

 'データベース登録した名前
 sDBName = "faq5_348sample4"

 '作成したいCSVファイルURL
 sFileName = "D:\text.csv"

 'Calcを新規に非表示で開く
 On Error Goto ErrorHandler
 args(0).Name = "Hidden"
 args(0).Value = True  
 oCalcDoc = StarDesktop.loadComponentFromURL("private:factory/scalc","_blank",0,args)
 
 'Calcにフォームのソース元のクエリを書き出し(上限65536行)
 oForm = oEvent.Source.getModel().getParent()  
 TargetSheet = oCalcDoc.getSheets().getByIndex(0)   
 oImportRange = TargetSheet.getCellRangeByName("A1")
 args1(0).Name = "DatabaseName"
 args1(0).Value = sDBName
 args1(1).Name = "SourceType"
 Select case oForm.CommandType
  case 0
  args1(1).Value = com.sun.star.sheet.DataImportMode.TABLE
  case 1
  args1(1).Value = com.sun.star.sheet.DataImportMode.QUERY
  case 2
  args1(1).Value = com.sun.star.sheet.DataImportMode.SQL
 End Select
 args1(2).Name = "SourceObject"
 args1(2).Value = oForm.Command
 oImportRange.doImport(args1)
 
 'CSVのエクスポート(既存CSVは上書きされる)
 args2(0).Name = "FilterName"
 args2(0).Value = "Text - txt - csv (StarCalc)"
 args2(1).Name = "FilterOptions"
 args2(1).Value = "44,0,60,1"
 oCalcDoc.storeToURL(ConvertToUrl(sFileName),args2)
 
 MsgBox(sFileName & " 作成しました")
 ErrorHandler:
 oCalcDoc.close(True)
End sub


但し、件数が多いとフォーム参照クエリの実行に時間が掛かります。
実用に耐えられない時間の場合は faq/5/172 のようにシーケンスクエリの作成マクロの応用&CSV作成になりますね。

又は以下をマクロで
・q_2クエリをCalcに書き出し
・列挿入
・番号付け
・CSVエクスポート

#汎用的な記述に修正

ありがとうございます。

GAKU (2010-05-03 07:39:06 (月))

M.Kamatakiさま、ike@九州さま

回答ありがとうございます。
確認が遅くなり、申し訳ありませんでした。
ikeさんに作っていただいたマクロで、意図するCSV作成ができることを確認しました。
これを元に、本番データベースのフォームを作らせていただきます。
本当に、ありがとうございます。

完了とさせていただきます。

お名前:
題名:


添付ファイル: filefaq5_348sample4.odb 1150件 [詳細] filefaq5_348sample3.odb 1102件 [詳細] filesample2.odb 618件 [詳細]