Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


899 / 2272 ツリー ←次へ | 前へ→

【9600】目次作成時にレポートのページ数を取得したい ゆずぽん 07/6/21(木) 21:02 質問[未読]
【9601】Re:目次作成時にレポートのページ数を取得し... hatena 07/6/22(金) 9:57 回答[未読]
【9605】Re:目次作成時にレポートのページ数を取得し... ゆずぽん 07/6/23(土) 0:04 質問[未読]
【9606】Re:目次作成時にレポートのページ数を取得し... hatena 07/6/23(土) 0:19 回答[未読]
【9607】Re:目次作成時にレポートのページ数を取得し... ゆずぽん 07/6/23(土) 0:33 お礼[未読]

【9600】目次作成時にレポートのページ数を取得し...
質問  ゆずぽん  - 07/6/21(木) 21:02 -

引用なし
パスワード
   教えてください。XPでaccess2000を使用中です。
商品のデータベースで在庫の一覧表(レポート)を作成中です。
一覧表は分類順(菓子・パンなど)の為、カナ順の目次(レポート)
を作成したいのですが、各商品が載っているページの番号が取得できません。
ちなみにレポート1ページ中に表示されるデータ数はページごとに
異なります。

試した内容。
商品テーブルにページを保存するフィールド「目次用ページ」を作成

レポートの詳細部分に非連結のテキスト1.を作成。

ページフッターのページを表示するテキスト2.を作成
(コントロールソース=[page])

テキスト1.のコントロールソースに(=テキスト2.)と入力

レポートを開いた状態でテーブルの「目次用ページ」にテキスト1.
が入力されるよう更新クエリを実行

という手順でやってみました。するとテキスト1.にはきちんとテキスト2.
と同じページが表示されているのにテーブルの「目次用ページ」は全て
”1”になってしまいます。試しに更新クエリでテキスト2.を入力しても
全て”1”でした。
想像ではこれで商品のレコードにページ数が保存され後はクエリで
カナ順に並べ替えれば大成功!と思ったのですが…。

解決策はありますでしょうか?

【9601】Re:目次作成時にレポートのページ数を取得...
回答  hatena  - 07/6/22(金) 9:57 -

引用なし
パスワード
   >試した内容。
>商品テーブルにページを保存するフィールド「目次用ページ」を作成
>↓
>レポートの詳細部分に非連結のテキスト1.を作成。
>↓
>ページフッターのページを表示するテキスト2.を作成
>(コントロールソース=[page])
>↓
>テキスト1.のコントロールソースに(=テキスト2.)と入力
>↓
>レポートを開いた状態でテーブルの「目次用ページ」にテキスト1.
>が入力されるよう更新クエリを実行
>
>という手順でやってみました。するとテキスト1.にはきちんとテキスト2.
>と同じページが表示されているのにテーブルの「目次用ページ」は全て
>”1”になってしまいます。試しに更新クエリでテキスト2.を入力しても
>全て”1”でした。

どのイベントで、どのような更新クエリを実行したのでしょうか。

実際に確認はしてませんが、
下記のようにすればうまくいくと思います。

レポート上にコントロールソース =[Pages] のテキストボックスを配置
(可視は「いいえ」でも可)
レポートの詳細セクションのフォーマット時のイベントプロシージャで、

If Me.Pages = 0 And FormatCount = 1 Then
  CurrentDB.Excecute _
    "UPDATE 商品テーブル SET 目次用ページ = " & Me.Page & _
    " WHERE 商品コード=" & Me.商品コード & ";"
End If


これで、レポートをプレビューまたは、印刷すると、商品テーブルに目次用ページが
書き込まれると思います。

商品テーブルの主キーは商品コードで、数値型との前提でコーディングしてます。

【9605】Re:目次作成時にレポートのページ数を取得...
質問  ゆずぽん  - 07/6/23(土) 0:04 -

引用なし
パスワード
   ▼hatena さん:
回答ありがとうございます。
>
>If Me.Pages = 0 And FormatCount = 1 Then
>  CurrentDB.Excecute _
>    "UPDATE 商品テーブル SET 目次用ページ = " & Me.Page & _
>    " WHERE 商品コード=" & Me.商品コード & ";"
>End If
>
>これで、レポートをプレビューまたは、印刷すると、商品テーブルに目次用ページが
>書き込まれると思います。

CurrentDb.Execute _
"UPDATE 商品テーブル SET 目次用ページ =" & Me.Page & _
"WHERE 管理番号 =" & Me.管理番号 & ";"

と入力いたしましたがエラーが出ます。

実行時エラー3075
クエリ式'1WHERE 管理番号 = 7343'の構文エラー:演算子がありません

という内容です。
自分なりにエラーの内容を本などで調べてみましたが良く分かりません。
ちなみにExecuteメソッドであってますよね?

>
>商品テーブルの主キーは商品コードで、数値型との前提でコーディングしてます。

管理番号(商品番号)は私のテーブルにはなかったので新しく作成いたしました。
ちなみにテキスト型を用いるとこの構文は変わるのでしょうか?
テキスト型のフィールドを試しに入れてみましたが同じエラーが出ました。

VBAは苦手なもので返信が遅くなりスミマセンでした。

【9606】Re:目次作成時にレポートのページ数を取得...
回答  hatena  - 07/6/23(土) 0:19 -

引用なし
パスワード
   >CurrentDb.Execute _
>"UPDATE 商品テーブル SET 目次用ページ =" & Me.Page & _
>"WHERE 管理番号 =" & Me.管理番号 & ";"

WHERE の前の半角空白が抜けてます。

" WHERE 管理番号 =" & Me.管理番号 & ";"

SQLでは半角空白も大きな意味を持ちますので、
おろそかにはできません。

>管理番号(商品番号)は私のテーブルにはなかったので新しく作成いたしました。
>ちなみにテキスト型を用いるとこの構文は変わるのでしょうか?
>テキスト型のフィールドを試しに入れてみましたが同じエラーが出ました。

テキスト型の場合は、'' で囲みます。

" WHERE 商品名 ='" & Me.商品名 & "';"

【9607】Re:目次作成時にレポートのページ数を取得...
お礼  ゆずぽん  - 07/6/23(土) 0:33 -

引用なし
パスワード
   ▼hatena さん

深夜に早速の回答ありがとうございます
スペースを入れたら上手くできました。

>SQLでは半角空白も大きな意味を持ちますので、
>おろそかにはできません。

VBAで適当に入力してもスペースが自動で開いていたので
あまりスペースを気にしたことがなかったのですが、
スペースって大事なんですね!

>テキスト型の場合は、'' で囲みます。
>" WHERE 商品名 ='" & Me.商品名 & "';"

テキストのフィールドでもうまくいきました!

本当にありがとうございます。

899 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free