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

Q&A集[?]

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

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

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

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:3035
現在:4


マクロで日付けフィールドに今日の日付けを書込みたい

ページOpenOffice.org FAQの登録ページ
投稿者yuki
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2009-02-12 18:24:09 (木)
OSWindows XP
依存するページfaq/4/1208
バージョン
edit/refer

メッセージ

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

マクロを勉強中の yuki です。お忙しいところ申し訳ありませんが、宜しくお願いします。

マクロで日付けフィールドに今日の日付けを書込みたいのですが、今日の日付けをどの様にして渡したら良いのでしょうか?
現在、以下のコードで書込もうとしているのですが、うまく行きません。

oRowSet.updateDate( oRowSet.findColumn( "日付" ), 今日の日付け )

文字列や数値は同様の方法で書けているので、大きくは間違っていないと思うのですが。
ここのところ、マクロで頭がフラフラの状態です。
申し訳ありませんが、宜しくお願い致します。


無題

tani (2009-02-12 20:56:32 (木))

多分、カラムの型が受け入れる書式と'今日の日付け'のところの書式があってないのだと思います。
とりあえず普通のUpdate文全文をマクロで生成するようにしておいて、それを実行するようにしたらどうでしょうか。そんでもしうまくUpdateされないときはそのUpdate文が素の状態でもDBに通るかどうかを(この場合だとBaseのSQL実行とかで)試すのが常道だと思います。

無題

tani (2009-02-12 23:51:21 (木))

ちなみにここで言ってる普通のUpdate文ってのは
UPDATE testtable SET testcolumn1 = 'マクロで生成した文字列' WHERE testcolumn2 = 'ひょっとしたらここもマクロで生成した文字列';
みたいな感じのちゃんとしたSQL文のことです。

確かUPDATE文とかINSERT文とかDELETE文を実行するためのメソッドはSELECT文を実行するためのメソッドとは別にDBのコネクションオブジェクトに用意されていたと思いますので、それを使って生成されたSQL文をマクロから実行してみてください。うまくいかなかったときはそのSQL文を直接BaseのUIから流し込んでみてうまくいくかどうか確かめてみると良いと思います。

横からすみません

ike@九州 (2009-02-13 08:44:29 (金))

過去作成したサンプルでは以下でOKでした
yuki さんの環境でもOKかは分かりません

oRowSet.updateString(oRowSet.findColumn("日付"),format(now(),"YYYY-MM-DD")

幾つか記述して結果から導いたもので正式な記述ではないかもしれませんが…
today() ではダメでした(多分何か基準関連を考慮しないとダメそう)
Base側で正しく判断されDate型で格納されてました

Form上では日付フィールドで表示するよりも書式設定されたフィールドで表示した方が日付書式の自由度がアップします(和暦表示など)

フィールドの書式が日付フィールドのため 2/12/02 と表示

yuki (2009-02-13 09:16:11 (金))

ご回答頂きまして有難うございます。

ike@九州さんのコードが、自分のコードと近いため試してみたのですが、
テーブルのフィールドの書式が日付のためか、正しく書き込まれません。

書式を日付フィールドのままで行う方法はないでしょうか。

taniさんご回答ありがとうございます。
内容が、マクロ勉強中の私には難しく、少し時間をかけて試してみたいと思います。

すみません間違えました。

yuki (2009-02-13 09:28:36 (金))

oRowSet.updateString を oRowSet.updateInt としてしまったため値が化けてしまったようです。
oRowSet.updateString とすることにより、今日の日付けが正しく書き込まれました。

お忙しいところ有難うございました。また何か有りましたらば、宜しくお願い致します。
完了にしてください。

補足

ike@九州 (2009-02-13 11:57:29 (金))

検証有難うございます
他の設計でも動作する事が確認できました

テーブルで日付型なので updateDate を必ず使用しなければならないと、当初私も思ってました。
実際は updateString で適切に内部処理してくれるようです
但し、渡す場合 YYYY-MM-DD の形式がベストでした

例 6月分抽出の SQL 文生成時も

SELECT * FROM テーブル名 WHERE "日付" LIKE {D '2008-06-%' }

で OK。">"、"<" など使う必要ありませんでした

これをどこに書き込めばいいですか?

saiki (2009-02-14 01:28:43 (土))

アクセスの感覚で要素のプロパティに書き込むことができず困っています。
マクロの記録で最新のデータを表示するマクロを使っているのですが、
そこに単純に追加したのではオブジェクトが宣言されていないというエラーがでます。どこに書き込んでいるのか教えてほしいです。

Re: これをどこに書き込めばいいですか?

M.Kamataki (2009-02-14 14:40:56 (土))

>マクロの記録で最新のデータを表示するマクロを使っているのですが、

こちらの内容がわからないので、回答しにくいです。

マクロによる日付入力に関しては、ike@九州さんが「日付」ボタンをクリックすると今日の日付を入力するサンプルデータベースを公開しているので、そのサンプルを見るとわかりやすいと思います。

サンプルは、faq/4/1208「フォームの検索結果をレポート化し印刷したい」のbusiness_sample3.odbです。フォームの「T_売上入力&検索」に含まれるマクロ「kyou」に当ページで触れられたコード「oRowSet.updateString」が使われています。

Re2:これをどこに書き込めばいいですか?

yuki (2009-02-16 12:53:42 (月))

saiki さん。
完了をしてもらったQAに、再度、QAがあったのを見逃していました。
ところで、この件は、私が答えるべきなのかどうかはわかりませんが?
今回作成しましたマクロを参考までに添付させて頂きます。

'■ 主番号と枝番号を指定して新規レコードを作成するマクロです。
'  mainNumber  主番号を設定します。
'  subNumber   枝番号を設定します。
Sub MakeNewRecord( mainNumber As Integer, subNumber As Integer )
  Dim oDatabaseContext as Object
  Dim oDataSource as Object
  Dim oDBConnection as Object
  Dim oRowSet as Object
  Dim oDoc as Object
  Dim mainForm as Object

    On Local Error Goto 0
    On Local Error Goto ERR:

      '  データベースの接続  

      oDatabaseContext = createUnoService( "com.sun.star.sdb.DatabaseContext" ) 
      oDataSource = oDatabaseContext.getByName( "技術情報収集Box" ) 
      oDBConnection = oDataSource.GetConnection( "", "" )

      '	行セットの接続

      oRowSet = createUnoService( "com.sun.star.sdbc.RowSet" )
      oRowSet.ActiveConnection = oDBConnection

      '  テーブルの取得

      oRowSet.CommandType = com.sun.star.sdb.CommandType.COMMAND
      oRowSet.Command = "Select * From 技術情報テーブルV2"
      oRowSet.execute( )

      '  レコードの追加と初期化
	
      oRowSet.moveToInsertRow( )
      oRowSet.updateInt( oRowSet.findColumn( "主番号" ), mainNumber )
      oRowSet.updateInt( oRowSet.findColumn( "枝番号" ), subNumber )
      oRowSet.updateString( oRowSet.findColumn( "分類" ), "----" )
      oRowSet.updateString( oRowSet.findColumn( "主題" ), "----" )
      oRowSet.updateString( oRowSet.findColumn( "副題" ), "----" )
      oRowSet.updateString( oRowSet.findColumn( "対象" ), "----" )
      oRowSet.updateString( oRowSet.findColumn( "名称" ), "----" )
      oRowSet.updateString( oRowSet.findColumn( "日付" ), format( now( ), "YYYY-MM-DD" ) )
      oRowSet.updateString( oRowSet.findColumn( "顧客" ),"----" )
      oRowSet.updateString( oRowSet.findColumn( "顧客詳細" ), "----" )
      oRowSet.updateBoolean( oRowSet.findColumn( "完了" ), false )
      oRowSet.updateString( oRowSet.findColumn( "作業処理" ),"未着手" )
      oRowSet.updateString( oRowSet.findColumn( "優先順位" ),"中" )
      oRowSet.updateInt( oRowSet.findColumn( "表示順" ), 0 )
      oRowSet.insertRow( )

      '  データベースの切断

      oDBConnection.close( )

    '  メインフォームを更新

    oDoc = ThisComponent
    mainForm = oDoc.getDrawPage( ).getForms( ).getByName( "MainForm" )
    mainForm.reload( )
  Exit Sub
ERR:
  Error Clear
  Msgbox( "MakeNewRecord で、エラーが発生しました。" )
End Sub

内容としましては、フォーム上のボタンが押されることにより
 /卦のレコードを作成します。
 ⊆臠峭罅∋淅峭罎謀切な値、及び他のフィールドにも初期値を設定します。
 フォームを更新します。
マクロ自体は、色々調べ組み合わせたもので、適切ではないかも知れませんが、取り合えず予定した動作を行っています。

コードの表示について

M.Kamataki (2009-02-16 14:14:52 (月))

yukiさん、コードの公開ありがとうございます。コード部分は見やすいよう修正しました。

Wikiの記法では、マクロのコードすべて(空行も含む)の行頭に半角スペースを入れると、preタグに囲まれ、結果的に上記のような青い地の表示になります。もし、コードを当サイトで公開される場合は、お手数ですが、このWikiの記法で書いてください。

2009/02/16 16時30分頃「(空行も含む)」を追記。

Re:コードの表記について

yuki (2009-02-16 14:24:06 (月))

コードを修正して頂きまして有難うございます。
私も、投稿した後に修正を試みたのですが旨く行かずに諦めてしまいました。

今後は、自分で修正を行いたいと思います。有難うございました。

updateDate の記述

ike@九州 (2009-02-17 11:00:24 (火))

後日調べて探したコードです

〜
Dim oDate As New com.sun.star.util.Date
oDate.Year = Year(now())
oDate.Month = Month(now())
oDate.Day = Day(now())
oRowSet.updateDate( oRowSet.findColumn( "日付" ), oDate)

ありがとうございます。 

saiki (2009-02-17 13:12:48 (火))

今、遊び感覚でおこずかい帳を作っていたのですが、
ちょっと壁にぶつかりやる気が失われていたのですが、元気が出ました。
終了にレスつけたらいけなかったのでしょうか?教えてください。
http://yumisaiki.blogspot.com/2009/01/open-office.html

format( now( ), "YYYY-MM-DD" )

yuki (2009-02-17 14:01:34 (火))

ike@九州さん。
先に教えて頂きました、format( now( ), "YYYY-MM-DD" )と、今回のサンプルとでは、どちらが良いのでしょうか?
日付型なので、やはり updateDate( ・・・・・・・ ) が良いですかね?

saikiさん。
私は良いと思うのですが、如何なのでしょうか?

雑談

M.Kamataki (2009-02-17 15:06:46 (火))

saikiさん>
>終了にレスつけたらいけなかったのでしょうか?教えてください。
かまいません。ただ、せっかくの質問が目立たなくなります。新しく質問をする際、依存するページに関連質問のページ(今回ならfaq/4/1525)を書いていただければ、関連質問とわかります。このような質問方法もあります。

ただ、今回はこのページの質問タイトル「マクロで日付けフィールドに今日の日付けを書込みたい」に沿った内容です。このタイトルなら、当サイトの検索でも当ページにたどり着きやすいです。一ヶ所にまとまっているほうが、同じ問題で悩んでいる方には良いのではないのでしょうか。

おこづかい帳も拝見しました。画像をテーブルに格納するのは、おこづかい帳とは全然関係ないはずですが、こんな遊びがあるとデータベースを使いたくなりますね。

また、「オープンガイドブック OpenOffice.org 2.0」PDF版をダウンロードいただき、ありがとうございます。3.0に対応した書籍版が3月中には出版される予定です。Baseについては前書より多い80ページになる原稿を書きました。残念ながら、Base+マクロまでは盛り込めませんでしたが。

なお、関西方面では以下のようなコミュニティがあり、OpenOffice.orgの勉強会を定期的に開催しています。

関西OpenOffice.org勉強会
http://kansai-ooo.sourceforge.jp/w/

当ページにインデックスを付けてみました。Wikiなので、このようなこともできます。トピックが増えてくると、こういう工夫もしています。

関西勉強会にぜひ参加したいと思います

saiki (2009-02-18 18:42:36 (水))

3月にあるとかとても楽しみです。本も買います。
ありがとうございました。wikiって便利ですね。 

お名前:
題名: