» 2010 » 9月のブログ記事

[AA-456-444]の様な文字列からハイフォンを取り除いて[AA3456444]の様にする。

具体的には[AA-456-444]と入力した物をAA3456444として検索したかった。
しかし、レポートには[AA-456-444]と表示したいので、入力はハイフォン有りでする必要があった。

で、フォームでフィールドAに[AA-456-444]と入力すると、自動的に同時でフィールドBに[AA3456444]という文字列も保存する。

つまり、フィールドAの更新後処理でReplace関数を用いて次の様にする。

Private Sub 番号_AfterUpdate()
  If IsNull(図面番号) Then
  Exit Sub
  End If
 [番号ハイフォンなし] = Replace([番号], "-", "")
End Sub

今回はハイフォンの除去だが、これで文字列の置換が出来る。


フォームのコントロールソースに、

=DSum("[小計]","Q_外注費明細","[Q_外注費明細]![見積親2ID]=[見積ID]")

としてデータがないNULLの時、0(ゼロ)と表示させるには、

=Nz(DSum("[小計]","Q_外注費明細","[Q_外注費明細]![見積親2ID]=[見積ID]"),0)

とする。


ブログをWordPressに変えてカウンターのプラグインを探してみたが、あまり多くは見つからなかった。

見つかったのはCounterize IIVisitor CounterCount per Dayだったが、Visitor Counterの方はドイツ語でよく分からなかったので、とりあえずCounterize IIを使ってみる事にした。

<日本語の対応>

日本語ファイル入手先→wppluginsj.sourceforge.jp/i18n-ja_jp/counterize-ii/
フォルダ内にある counterize-ja_UTF.mo と counterize-ja_UTF.po から「_UTF」 の部分を削除してcounterize-ja.mo 、 counterize-ja.po にリネームする。

<昨日の表示に対応させる>

下記のコードを「counterize.php」に追加。

/* IP重複なしのアクセスカウンター */
# Returns amount of unique hits yesterday
function counterize_getuniquehitsyesterday()
{
        $today = date("Y-m-d");
        $yesterday = date("Y-m-d", time()-86400);
        $sql = "SELECT count(DISTINCT ip) FROM ".counterize_logTable()." WHERE timestamp >= '$yesterday' AND timestamp < '$today'";
        $wpdb =& $GLOBALS['wpdb'];
        return $wpdb->get_var($sql);
}
/* IP重複ありのアクセスカウンター */
# Returns amount of hits yesterday.
function counterize_gethitsyesterday()
{
        $today = date("Y-m-d");
        $yesterday = date("Y-m-d",strtotime("-1 day"));
        $sql = "SELECT COUNT(1) FROM ".counterize_logTable()." WHERE timestamp >= '$yesterday' AND timestamp < '$today' ";
        $wpdb =& $GLOBALS['wpdb'];
        return $wpdb->get_var($sql);
}

<カウンターの設置>

<!--IP重複なしのユニークアクセスカウンター -->
<ul>
<li>Total : <?php echo counterize_getuniqueamount(); ?></li>
<li>Today : <?php echo counterize_getuniquehitstoday(); ?></li>
<li>Yesterday : <?php echo counterize_getuniquehitsyesterday(); ?></li>
<li>7days : <?php echo counterize_getuniquelatest7days(); ?></li>
<li>now : <?php echo counterize_get_online_users(); ?></li>
</ul>
<!--IP重複ありのヴューカウントカウンター-->
<ul>
<li>Total  :  <?php echo counterize_getamount(); ?></li>
<li>Today  :  <?php echo counterize_gethitstoday(); ?></li>
<li>Yesterday  :  <?php echo counterize_gethitsyesterday(); ?></li>
<li>7days : <?php echo counterize_getlatest7days(); ?></li>
<li>now : <?php echo counterize_get_online_users(); ?></li>
</ul>

<時差の補正>

当日24時を過ぎてもカウンターがクリアーされず、昨日のままだった。

管理ページの「一般設定のタイムゾーン」を「UTC+9」にしているのになぜかダメだ。

解決策として、
WordPressのトップにある「wp-settings.php」の35行目付近の記述を次のように変更した。

変更前

// Set default timezone in PHP 5.
if ( function_exists( 'date_default_timezone_set' ) )
	date_default_timezone_set( 'UTC' );

変更後

// Set default timezone in PHP 5.
if ( function_exists( 'date_default_timezone_set' ) )
	date_default_timezone_set( 'UTC+9' );
 

しかし、この設定変更は、Wordpresのバージョンアップを行った場合、再度同じ書き換えが必要。


フォームA(単票)にサブフォームB(データシート)をつけている。
サブフォームBにデーターを入力し、その数値の合計の計算結果をフォームAのテキストボックスに表示する。

この場合、その結果を反映させるためには、フォームAを再クエリする必要がある。

キーボードからなら、[Ctrl]+[F9]であるが、これを自動で行うために、サブフォームBのプロパティー「挿入後処理」「更新後処理」「削除確認」で、次の様なイベントプロシージャを呼び出す。

 Me.Parent.Requery

これで更新は当然うまくいった。

しかし、その後フォーカス(カーソル)が最初のレコードのトップに移動してしまう。
フォームAは単票式なので、5ページ目とか10ページ目かを更新しても必ず1ページ目の最初のテキストボックス(フィールド)に移動してしまう。

なぜかはわからないが、これでは使い勝手が悪すぎるので対策をする必要がある。
で、

Private Sub Form_AfterInsert()
    Dim RecNum As Integer
    RecNum = Me.Parent.CurrentRecord

    Me.Parent.Requery

    Me.Parent.SetFocus
    DoCmd.GoToRecord , , acGoTo, RecNum
    Me.Parent.次のテキストボックス.SetFocus
End Sub

これでうまく行った。

「更新後処理」「削除確認」も同様でOK。(^_^)v


KUAMOのPC備考録はこちらにpc.kumao.net/に引っ越してきました。

以前のサイトkumao.net/pc/も残していましが、今後はこちらのみを更新させて戴きます。
引き続きKUMAOのPC備考録、KUMAOの押入をどうぞよろしくお願い致します。

ブログシステムもMovable TypeからWordpressに乗り換えました。


KUMAOの押入TOP

  • Total : 85637
  • Today :78
  • Yesterday : 194
  • 7days:1401
  • now:0

カレンダー

2010年9月
« 6月   10月 »
 12345
6789101112
13141516171819
20212223242526
27282930  

カテゴリー

最近のコメント

アーカイブ

年間アーカイブ

Twitter

Get Adobe Flash player