Access VBA質問箱 IV

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

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


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

【9096】クエリ作成後のフィールド表示書式 CHIKO 07/2/6(火) 16:52 質問[未読]
【9099】Re:クエリ作成後のフィールド表示書式 小僧 07/2/8(木) 11:01 回答[未読]
【9103】Re:クエリ作成後のフィールド表示書式 CHIKO 07/2/9(金) 10:01 質問[未読]
【9122】Re:クエリ作成後のフィールド表示書式 小僧 07/2/16(金) 11:25 発言[未読]
【9131】Re:クエリ作成後のフィールド表示書式 CHIKO 07/2/18(日) 13:34 お礼[未読]

【9096】クエリ作成後のフィールド表示書式
質問  CHIKO  - 07/2/6(火) 16:52 -

引用なし
パスワード
   いつも拝見させていただいています。
今回どうしても行きづまってしまい、お知恵を貸してください。

コード上で作成したクエリのフィールドのプロパティを変更したいのです。

以下のようなコード(実際はもっと複雑ですが集計クエリです)を書いて、
INQRYクエリを作成することができました。

'*********************************
Dim Cmd As New ADODB.Command
Dim SQLST as String

SQLST="SELECT A, Sum(B) AS 合計 FROM CTab GROUP BY A;"

'INQRYクエリーの作成
Cmd.CommandText = SQLST
Cat.Views.Append "INQRY", Cmd

'************************************

作成したクエリは、手ではデザインビューからプロパティを変更し、
表示書式を書式=”標準”、小数点以下=0 のように変更することができます。

なんとかコード上で合計フィールドの書式を設定できないでしょうか?
SQLST上でFormat関数を使用することも考えましたが、
なんとか値を切り捨てることなく、見た目の表示を変更したいのです。
よろしくお願いします。

【9099】Re:クエリ作成後のフィールド表示書式
回答  小僧  - 07/2/8(木) 11:01 -

引用なし
パスワード
   ▼CHIKO さん:
こんにちは。
ADO ならびに ADOX を色々見ていたのですが当方の知識ではできなさそうでした。
代わりに DAO を使ったコードを提示してみます。

Sub DAOを使って()
Const QName = "INQRY"
Dim SQLST As String
Dim DB As DAO.Database
Dim QD As DAO.QueryDef
Dim FLD As DAO.Field
Dim Prp As DAO.Property
  
  On Error Resume Next
    DoCmd.DeleteObject acQuery, QName
  On Error GoTo 0
  
  SQLST = "SELECT A, Sum(B) AS 合計 FROM CTab GROUP BY A;"
  
  Set DB = CurrentDb
  Set QD = DB.CreateQueryDef(QName, SQLST)
  Set FLD = QD.Fields("合計")
  
  Set Prp = FLD.CreateProperty("Format", 10, "Standard")
    FLD.Properties.Append Prp
  
  Set Prp = FLD.CreateProperty("DecimalPlaces", 2, 0)
    FLD.Properties.Append Prp
  
  Set Prp = Nothing
  Set FLD = Nothing
  QD.Close: Set QD = Nothing
  DB.Close: Set DB = Nothing
    
End Sub


さて、ここからが本題なのですが、
クエリに対して書式設定をする必要があるのでしょうか。

Accessにおいてテーブル(クエリ)はあくまでデータの入れ物であって
ユーザに見せるものではないですよね。

フォームやレポートの書式を設定してあげれば
テーブル 及び クエリ部に特別な事を行う必要はないと思うのですが…。

【9103】Re:クエリ作成後のフィールド表示書式
質問  CHIKO  - 07/2/9(金) 10:01 -

引用なし
パスワード
   小僧さま

まずはADOとADOXであることを、記述することを忘れて
いたことをお詫びいたします。
にもかかわらず、貴重な時間を割いてわざわざ調べて
いただいたとのこと、本当にありがとうございます。

そうですよね。DAOではできたはず!!
のことがADOでできないことが、納得できませんでした。

それからもっともなご指摘についてですが、

実は集計クエリはクロス集計で、合計と言っているフィールドは
クロス集計の列すべてに該当します。
クロス集計なので、列数は可変で列名も可変になるので、
いちいちフォームに渡す前にでそのフィールド数とフィールド名を
取得して、フォームのプロパティを設定?
それともクロス集計の列数、列名を無理やり固定?
なんてことがどうも、すっきりしないと感じたので、
サブフォームのソースオブジェクトに作成したクエリを指定して
埋め込んでしまえば、クエリをそのまま表示できて楽だと思い、
そのように作成しました。

その後、小数点以下の表示をなんとかしろと言われてしまい。
涙しています。

フォームを利用して人に見せることについては
まだまだ初心者で、ばかなことをしているのかもと、
自分でも思うのですが、列数列名可変のクロス集計の
フォームでの表示に、スマートなやり方はあるのでしょうか?

>さて、ここからが本題なのですが、
>クエリに対して書式設定をする必要があるのでしょうか。
>
>Accessにおいてテーブル(クエリ)はあくまでデータの入れ物であって
>ユーザに見せるものではないですよね。
>
>フォームやレポートの書式を設定してあげれば
>テーブル 及び クエリ部に特別な事を行う必要はないと思うのですが…。

【9122】Re:クエリ作成後のフィールド表示書式
発言  小僧  - 07/2/16(金) 11:25 -

引用なし
パスワード
   ▼CHIKO さん:
こんにちは。

>列数列名可変のクロス集計の
>フォームでの表示に、スマートなやり方はあるのでしょうか?

こちらに関しては当方も思いつきません。

以下はあくまでも当方の考えですので、
一般的な考え方とは異なるかもしれません。


…クエリをそのまま見せるのは確かに便利なのですが、
例えばユーザがデータを変更しようとした場合に

「このフィールドはxxxに直結されているため変更できません」

の様な使用ユーザには理解しづらいメッセージがでしまったり
色々な制御ができないため、私だったら使わないと思います。


列が可変という事ですが、最大列数が決まっているのであれば

あらかじめワークテーブルを設けておき、
ワークテーブルを基にフォームを作成し、書式などを設定。

クロス集計の結果をワークテーブルに書き出し

などの手段を取ると思います。

また帳票フォームですと、列数が少ない際に整形するのがとても手間が掛かるので、
メイン・サブ型式にし、サブフォームにデータシートビューを使い
表示する手法を取るかと思われます。

データシートビューは一見テーブルをそのまま表示しているようですが
フォームである事に変わりはないため
更新の許可や削除の許可、また列を非表示にしたりと細かい設定が可能です。

欠点としてデータシートビューはフォームヘッダ・フッターなどが使えないため、
サブフォームとして扱うのがおすすめだと思われます。


以上長くなりましたが、何かしらのご参考になりましたら幸いです。

【9131】Re:クエリ作成後のフィールド表示書式
お礼  CHIKO  - 07/2/18(日) 13:34 -

引用なし
パスワード
   小僧さま

ありがとうございました。
また何かありましたら、よろしくお願いします。

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