Access VBA質問箱 IV

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

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


40 / 500 ページ ←次へ | 前へ→

【12522】検索について
質問  yoshi  - 14/4/24(木) 22:39 -

引用なし
パスワード
   アクセス2010を使用しています。
フォームにあるコンボボックスでテーブルを元に会員名で検索したデータを同じフォームに表示させるようにしているのですが、再クエリをすることによって「カレントレコード」をリセットされてしまい先頭のデータがフォームに表示されてしまいます。
検索したデータを維持したままフォームに表示するにはどうすればよろしいのでしょうか。
よろしくお願いします。
・ツリー全体表示

【12521】Re:クエリの抽出条件について
発言  イルカ  - 14/4/24(木) 12:31 -

引用なし
パスワード
   かるびのさま

すいません。追加クエリで、商品名と色はどのテーブルに追加するのでしょうか?
リレーションシップの図をみて考え込んでしまいました。明細IDにつながる新しいテーブルが必要でしょうか?

もしかしたらちゃんと理解できていないかもしれません。
お手数をおかけします。
よろしくお願いします。


>>は、追加クエリをつかう場面でテーブルAではなくテーブルBに追加するという意味でしょうか?
> いいえ、違います。テーブルAのフィールドを
>   明細ID  (主キー)
>   受注番号 
>   商品ID
>   数量
>というようにするべきだということです。
・ツリー全体表示

【12520】Re:表示・非表示について
質問  もんた  - 14/4/24(木) 11:44 -

引用なし
パスワード
   お礼が遅れてしまいすいません。
回答して頂きありがとうございます。

                    1頁
-----------------詳細---------------------------
あいうえお   ああああ   *
かきくけこ   いいいい   空白
------------------------------------------------
-----------------フッター-----------------------
             あいうえお

                    2頁
-----------------詳細---------------------------
あいうえお   ああああ   空白
かきくけこ   いいいい   空白
------------------------------------------------
-----------------フッター-----------------------


ページフッタに表示させたいのでVBAになりそうですね・・・
まったく見当がつかないのですが教えて頂けないでしょうか。


▼hatena さん:
>「ヘッター」というのが「グループヘッダー」あるいは「グループフッター」のことなら、
>テキストボックスのコントロールソースを
>
>=IIf(Min([フィールド名]="*")=True,"あいうえお","")
>
>「ページヘッダー」または「ページフッター」のことなら、VBAが必要になります。
>特に「ページヘッダー」の場合は難易度が高くなります。
・ツリー全体表示

【12519】Re:クエリの抽出条件について
お礼  イルカ  - 14/4/24(木) 10:22 -

引用なし
パスワード
   かるびのさま

丁寧なご説明有難うございます。データベースのことが少し詳しくなりました。

アドバイスの通りにやってみます。
いじる所が結構ありそうなので、少しお時間を頂きたいと思います。

また、よろしくお願いします。
有難うございました。
・ツリー全体表示

【12518】Re:クエリの抽出条件について
回答  かるびの  - 14/4/24(木) 2:46 -

引用なし
パスワード
   >カメとウサギのフィールドの値はNullと長さ0の文字列の判別の仕方が分かりません。どこをみたら判別できますか?
 見た目で長さ0の文字列とNull値とを区別することはできません。

 どうしてもそれを区別したい場合は、
テーブルの場合は、テーブルのデザインビューで
「書式」プロパティに書式を設定することになります。
 そのフィールドがテキスト型の場合、書式プロパティに「;Null」と設定すると、
Null値の場合に「Null」と表示されます。
ちなみに、「;ナル」と設定すると、Null値の場合「ナル」と表示されます。

 別の方法として、選択クエリを作り、演算フィールドを設け、
演算フィールドにNz関数を設定してやる方法もあります。
具体的には、選択クエリに新たなフィールドを設け、
そこに「式1:Nz(色,"なる")」と設定して、そのクエリを開くと、
色フィールドがNull値の場合、式1フィールドに「なる」と表示されます。


>ちなみに、クエリデザインビューで色の結合線を外し、商品名だけの結合で、色の抽出条件に「Is null」といれて表示させると、色フィールドに何も入っていない商品だけが抽出されます。また、当初のように商品名と色の両方を結合し、同じように色の抽出条件に「Is null」といれて表示させると何も抽出されません。(この時エラーメッセージが出るわけではありません。)これは、値がnullといことですか?
 そのとおりです。


 フィールドにNull値を持たせたくない場合、テーブルのデザインビューを開き、
フィールドの「既定値」プロパティに「""」と設定しておくと、
未入力の場合に長さ0の文字列が当該フィールドに格納されるので、
Null値が格納されることを防止できます。


>>>クエリ作成の際に2つのテーブルを商品名どうしと色どうしで結合して表示すると色に項目が入っていないカメとウサギが抽出されません。
 これは、色フィールドにNull値が格納されているからです。
 Null値は特殊な値なので、「Null = Null」という式が成り立ちません。
 言い換えると、Null値とNull値は比較できないのです。
 そのため、Null値とNull値を比べても、コンピュータはそれらが同じ値だと判定してくれません。
 だから、商品名フィールドと色フィールドを結合フィールドとした場合、
Null同士のレコードを結合してくれないのです。


 ところで、テーブルの役割ですが、
テーブルCが受注情報を格納するテーブル、
テーブルAが受注明細を格納するテーブル、
テーブルBが商品マスタのテーブルということですね。
 そうであれば、テーブルAには、商品名フィールドや色フィールドを
持たせてはいけません。
テーブルAには商品IDフィールドを設ければ、それで十分です。
 もし、受注明細テーブルの情報(例えば数量)と
商品マスタの情報(商品名と色)とを一目で見たいというなら、
受注IDフィールドを結合フィールドとして、両テーブルを結合する選択クエリを
作ります。
 結局、前回の私の回答の「最もデータベースらしい解決」ということです。


>ご説明頂いた、
>
>>テーブルBに主キー(例えば商品ID)を持たせ、
>>テーブルAの商品名フィールドと色フィールドは削除して、
>
>は、追加クエリをつかう場面でテーブルAではなくテーブルBに追加するという意味でしょうか?
 いいえ、違います。テーブルAのフィールドを
   明細ID  (主キー)
   受注番号 
   商品ID
   数量
というようにするべきだということです。
・ツリー全体表示

【12517】Re:クエリの抽出条件について
発言  いるか  - 14/4/23(水) 12:14 -

引用なし
パスワード
   かるびのさま

丁寧なご説明有難うございます。また、こちらの説明不足ですいません

カメとウサギのフィールドの値はNullと長さ0の文字列の判別の仕方が分かりません。どこをみたら判別できますか?商品名・色、共にデータ型はどちらのテーブルも「短いテキスト」です。

ちなみに、クエリデザインビューで色の結合線を外し、商品名だけの結合で、色の抽出条件に「Is null」といれて表示させると、色フィールドに何も入っていない商品だけが抽出されます。また、当初のように商品名と色の両方を結合し、同じように色の抽出条件に「Is null」といれて表示させると何も抽出されません。(この時エラーメッセージが出るわけではありません。)これは、値がnullということですか?

テーブルBには「商品ID」フィールドがあり主キーになっています。
テーブルAには受注番号フィールドがあり、別のテーブルCの受注番号(主キー)と1(テーブルC)対多(テーブルA)で紐づいています。

テーブルCがメインのテーブルで、住所などの注文情報が入っており、ひとつの受注番号に複数の商品の注文があることから、テーブルを分けるべきと考え、テーブルAというのを作りました。

前提説明がなくてすいませんでした。全体の処理の流れは、外部CSVを取り込み、追加クエリで各情報をテーブルC、テーブルAに追加します。テーブルCをもとに一覧表を作り、さらにその一覧表の各レコードから明細表を作ります。この時、テーブルAを使って明細表を作っています。これまでは紙に書いたタグの対応表をテーブルAをもとにつくった明細表とつきあわせながら発送の準備しておりましたが、商品数が増えて複雑になったため、明細表に表示させる必要が出てきました。この対応表の役割をテーブルBにしてもらいたいと思い今回の質問をさせて頂きました。


ご説明頂いた、

>テーブルBに主キー(例えば商品ID)を持たせ、
>テーブルAの商品名フィールドと色フィールドは削除して、

は、追加クエリをつかう場面でテーブルAではなくテーブルBに追加するという意味でしょうか?


クエリのデザインビューに簡単な抽出条件を記述するだけかなと、簡単に考えておりました。
初心者に毛が生えた程度の知識です。

よろしくお願いします。
・ツリー全体表示

【12516】Re:クエリの抽出条件について
回答  かるびの  - 14/4/23(水) 0:55 -

引用なし
パスワード
    いくつか疑問点があります。
 テーブルAとテーブルBの各主キーは、何なのでしょうか。
 テーブルAのカメとウサギの各レコードの色フィールドの値は、Nullですか、
それとも長さ0の文字列ですか。
 テーブルBのカメとウサギの各レコードの色フィールドの値は、Nullですか、
それとも長さ0の文字列ですか。

 これらの質問がヒントになると思うのですが、念のため、補足しておきます。 

 最もデータベースらしい解決は、
テーブルBに主キー(例えば商品ID)を持たせ、
テーブルAの商品名フィールドと色フィールドは削除して、
テーブルAに外部キーとして商品IDフィールドを設け、
テーブルAの商品IDフィールドとテーブルBの商品IDフィールドを結合フィールドとする
という方法です。
 
 商品名と色の各フィールドを2つのテーブルに持つのは、
データベースにおける一事実一箇所の原則に反します。


 他の方法としては、
 両テーブルの色フィールドについて「何も入らない」を
長さ0の文字列で表現するという方法があり得ます。
 Null値同士は紐付けできないのですが、長さ0の文字列であれば紐付け可能です。

 さらに別の方法として、
色フィールドについて「何も入らない」をNullで示すことを前提とするなら、
結合条件を
   Nz(テーブルA.色,"") = Nz(テーブルB.色,"")
とするという方法も考えられます。
なお、このクエリは、クエリのデザインビューでは作れません。
SQLビューで作る必要があります。
また、結合条件の中でNz関数を使うので、速度的に不利です。
・ツリー全体表示

【12515】クエリの抽出条件について
質問  イルカ  - 14/4/22(火) 18:20 -

引用なし
パスワード
   イルカともうします。

クエリの抽出条件について質問があります。アクセス2013を使っています。

テーブルAとテーブルBからクエリで以下の結果を出したいのです。

テーブルA
========
商品名 色 数量
========
イルカ 青 1
イルカ 赤 2
カメ    1
ウサギ   2


テーブルB
========
商品名 色 タグ
========
イルカ 青 xxx
イルカ 赤 zzz
カメ    yyy
ウサギ


カメとウサギは色の項目に何も入りません。

クエリで以下のような結果を表示させたいです。

商品名 色 数量 タグ
===========
イルカ 青  1 xxx
イルカ 赤  2 zzz
カメ     1 yyy
ウサギ    2
===========

クエリ作成の際に2つのテーブルを商品名どうしと色どうしで結合して表示すると色に項目が入っていないカメとウサギが抽出されません。カメとウサギも一緒に抽出する条件はどのように設定したらよいでしょうか?

テーブルAは売上が入ってきます。テーブルBでタグを参照して上記クエリのように作業票に表示させたいと思っています。

よろしくお願いします。
・ツリー全体表示

【12514】Re:テーブルにフィールドを追加する(DA...
お礼    - 14/4/22(火) 10:11 -

引用なし
パスワード
   返事遅れて申し訳ございません

何とかできました。ありがとうございました。
・ツリー全体表示

【12513】Re:複数日時から、SQLクエリ作成、#の付...
お礼  神田龍一  - 14/4/21(月) 14:11 -

引用なし
パスワード
   hatena様
ご指示通り変更したら、うまくいきました。
助かりました。
ありがとうございました。

>AAA = AAA & ",#" & ctl.ItemData(varItm) & "#"
・ツリー全体表示

【12512】Re:連番の入力
お礼  くやっち  - 14/4/21(月) 10:04 -

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

ありがとうございます。

一応、「件名」という項目は絶対入れる項目なので、連番抜けが起きることはないと考えています。

また、レコードの登録は同じフォームに「登録」ボタンを配置し、
DoCmd.GoToRecord , , acNext
を実行しています。

また、レコードの取り消しも「クリア」ボタンを配置して、
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
を実行するようにしています。

今の所思い通りに動作しているようです。

今後、不都合が出てきた場合に参考にさせて頂きます。
大変ありがとうございました。
・ツリー全体表示

【12511】Re:担当別で空白行に罫線を引きたい
お礼  AAA  - 14/4/21(月) 8:55 -

引用なし
パスワード
   hatena様

ご返事遅くなってすいませんでした。
ようやくうまくいきました。
下記サイトの通りにやってたんですが、改ページの位置が悪かったので
苦戦していました・・・

ありがとうございました。
思ったとおりに出来てよかったです!!


▼hatena さん:
>担当者でグループ化してグループフッターを表示させて、現状のレポートフッターのコントロールとコードをすべてグループフッターに移動させればいいでしいう。
>
>下記のページに同様のロジックを利用したサンプルがあるのでご参考に。
>
>レコードがない場合も用紙の最後まで罫線を出力する NextRecord版 - hatena chips
>hatenachips.blog34.fc2.com/blog-entry-91.html
・ツリー全体表示

【12510】Re:複数日時から、SQLクエリ作成、#の付...
回答  hatena  - 14/4/20(日) 18:20 -

引用なし
パスワード
   >Set ctl = Me!日時
>For Each varItm In ctl.ItemsSelected
>AAA = AAA & "," & ctl.ItemData(varItm) & ""

上の1行を下記に修正したらどうでしょうか。

AAA = AAA & ",#" & ctl.ItemData(varItm) & "#"
・ツリー全体表示

【12509】複数日時から、SQLクエリ作成、#の付け方
質問  神田龍一  - 14/4/18(金) 22:11 -

引用なし
パスワード
   こんにちは。初心者です。
過去ログを見たのですが、同じような質問が見当たりませんでしたので、質問します。
1.受注テーブルがあります。
受注日時、品番、数量、顧客名、
受注日時は、日付日時型です。
2.受注テーブルのデータの一部を、受注日時でひとつ又は複数選択し、SQLクエリを作成したいです。(最終的にはSQLクエリを元に印刷したいです)
3.受注日選択フォームにリストボックスを作り、受注テーブルのデータを並べ、ひとつ又は複数選択し、フォーム上のボタンを押して、SQLクエリを作成したいです。
リストボックスのコントロール名は"日時"です。
4.ボタンのイベントプロシージャの内容は下記です。
Dim db As Database
Dim QQQ As QueryDef
Set db = CurrentDb
Dim ctl As Control
Dim AAA As String
Dim sql As String

Set ctl = Me!日時
For Each varItm In ctl.ItemsSelected
AAA = AAA & "," & ctl.ItemData(varItm) & ""
Next varItm
AAA = Mid(AAA, 2)
sql = "SELECT 受注日時, 品番, 数量, 顧客名 FROM 受注テーブルHAVING (((受注日時) In (" & AAA & ")));"
Set QQQ = db.CreateQueryDef("選択リスト", sql)

5.結果は、クエリが作成出来ません。
日付の両側に#を付けたいのですが、書き方がわかりません。
教えていただけると嬉しいです。
・ツリー全体表示

【12508】Re:担当別で空白行に罫線を引きたい
回答  hatena  - 14/4/18(金) 9:12 -

引用なし
パスワード
   担当者でグループ化してグループフッターを表示させて、現状のレポートフッターのコントロールとコードをすべてグループフッターに移動させればいいでしいう。

下記のページに同様のロジックを利用したサンプルがあるのでご参考に。

レコードがない場合も用紙の最後まで罫線を出力する NextRecord版 - hatena chips
hatenachips.blog34.fc2.com/blog-entry-91.html
・ツリー全体表示

【12507】担当別で空白行に罫線を引きたい
質問  AAA  - 14/4/18(金) 7:55 -

引用なし
パスワード
   いつもお世話になっております。

送付案内書がありまして、クエリの条件に[担当者を入力する]や=Date()という条件を入れて、空白行に罫線を引く為に下記の内容を入れて使用していました。

Option Compare Database
Option Explicit
'ページ印字可能行数の設定
Const AblGyou = 10
'行数カウント変数
Dim GyouCnt As Integer

Private Sub ページフッター_Format(Cancel As Integer, FormatCount As Integer)
  '行数カウント数のクリア
  GyouCnt = 0
End Sub

Private Sub レポートフッター_Format(Cancel As Integer, FormatCount As Integer)
  '総行数がページ印字可能行数と同じ場合
  If GyouCnt = AblGyou Then
    '行数カウント数のクリア
    GyouCnt = 0
    '空白行を印字しない
    Me.MoveLayout = False
    Me.PrintSection = False
  Else
    '行数カウントを加える
    GyouCnt = GyouCnt + 1
    'ページ行数に満たない場合、空白行を印字
    If GyouCnt < AblGyou Then
      '次のレコードへ移動設定を無効とする
      Me.NextRecord = False
      '次の印刷位置への移動設定を有効とする
      Me.MoveLayout = True
      'セクション印刷の設定を有効とする
      Me.PrintSection = True
    Else
      '行数カウント数のクリア
      GyouCnt = 0
    End If
  End If
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
'行数カウントを加える
  GyouCnt = GyouCnt + 1
End Sub


本題ですが、
担当者を入れるのをやめ改ページで担当者ごとに出したく、改ページの設定で
担当者別にはでるようになったのですが、最後の人しか上記の罫線がでないので
最初の人(1ページ目)の空白行に も罫線を引きたい。


今日の日付で担当者が1人なら成り立ちますが、複数人いた場合は成り立ちません・・・
できればこのコードを利用して出るようにしたいのですがまだまだ初心者で分からないのでご教授下さい。
・ツリー全体表示

【12506】Re:テーブルにフィールドを追加する(DA...
回答  pirorin  - 14/4/17(木) 23:08 -

引用なし
パスワード
   //detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1251808802

直リンクでないのでうまくたどってください。
・ツリー全体表示

【12505】Re:連番の入力
回答  hatena  - 14/4/17(木) 19:41 -

引用なし
パスワード
   ある処理をするには最適なイベントと言うのものあります。

> いくつかのコンボボックスの内、「件名」というコンボボックスをクリックすると、入力が開始されたと認識させようと、以下の構文を書きました。

もし、そのコンボボックスをクリックせずに他のコンボボックスから入力して、レコード保存してしまったら、連番が未入力になるということも考えられます。

フォームのイベントを見てみると、「挿入前処理」というものがあります。ヘルプを見ると、
-------------------------------------------------------------------------
BeforeInsert イベントは、新規レコードに最初の文字を入力したときに発生します。
-------------------------------------------------------------------------
とあります。
このイベントが希望の処理には最適だと思われます。

Private Sub Form_BeforeInsert(Cancel As Integer)
  Me.連番 = Nz(DMax("連番", "テーブル"), 0) + 1
End Sub


Refresh するとレコード保存されます。そうするとEscで入力取消ができなくなります。その辺も考慮する必要があります。
よくよく考えて設計してください。

別案として、レコード移動時に、既定値プロパティを設定するという方法もあります。
この場合は、新規レコードへ移動した時点で、連番が表示されます。

Private Sub Form_Current()
  If Me.NewRecord Then Me.企業ID.DefaultValue = Nz(DMax("連番", "テーブル"), 0) + 1
End Sub


お好みで選択してください。
・ツリー全体表示

【12504】Re:表示・非表示について
回答  hatena  - 14/4/17(木) 19:06 -

引用なし
パスワード
   「ヘッター」というのが「グループヘッダー」あるいは「グループフッター」のことなら、
テキストボックスのコントロールソースを

=IIf(Min([フィールド名]="*")=True,"あいうえお","")

「ページヘッダー」または「ページフッター」のことなら、VBAが必要になります。
特に「ページヘッダー」の場合は難易度が高くなります。
・ツリー全体表示

【12503】表示・非表示について
質問  もんた  - 14/4/17(木) 13:52 -

引用なし
パスワード
   質問があります。

                    1頁
-----------------詳細---------------------------
あいうえお   ああああ   *
かきくけこ   いいいい   空白
------------------------------------------------
-----------------ヘッター-----------------------
             あいうえお

                    2頁
-----------------詳細---------------------------
あいうえお   ああああ   空白
かきくけこ   いいいい   空白
------------------------------------------------
-----------------ヘッター-----------------------
             

上記のように詳細の中で*があったときだけ
ヘッターに文字が表示・非表示できるようにできますでしょうか。

宜しくお願い致します。
・ツリー全体表示

40 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1078265
(SS)C-BOARD v3.8 is Free