Microsoft Access 掲示板

6,744 件中 521 から 560 までを表示しています。
3
nanana 2024/10/11 (金) 10:37:57 3588c@9a838

回答頂いていながら返信が遅くなり申し訳ありません。長期入院していたため回答できませんでした。
深くお詫びいたします。

帳票フォームのフィルターで表示されたレコードだけに対して、フィールド1の値を変更したいです。
フィールド2、3、4の値を連続した文字列としてフィールド1に入れたいのですが、
これをFor分の中にDoCmd.GoToRecord , , acNextを入れると、エラーになって次のレコードに行けません

このような場合はどう記述するべきなのか、ご教授いただければ幸いです。
よろしくお願いいたします。

4
しん 2024/10/11 (金) 10:15:16 051ad@9fff4

sk様
回答ありがとうございました。
参考にさせていただきます。

3
  1. データシートフォームとは別に非連結フォームを新規作成する。

  2. 1 の非連結フォームの詳細セクション上にサブフォームコントロールを挿入する。

  3. 2 のサブフォームコントロールのソースオブジェクトをデータシートフォームとする。つまり、非連結フォームをメインフォーム、データシートフォームをサブフォームとする。

  4. メインフォームの詳細セクション上にコマンドボタンを挿入する。

  5. 4 のコマンドボタンの[クリック時]イベントの発生時に、サブフォームのフィルターを操作するマクロまたはプロシージャを実行するようにする。

といった方法もあるでしょう。

2
しん 2024/10/11 (金) 09:58:08 051ad@9fff4

ありがとうございました。
勉強になりました

4
beginner 2024/10/11 (金) 08:38:58 ddfe5@dbc09

mayuさん分かり易い解説ありがとうございます。
リレーションしているからと言ってもどんなデータの関係になっているかですね。大変参考になりました。
お世話になりました。

1

データシートビューでは、ボタンを設置できないので、
下記のコードと、同等の効果をもたらすようなイベントはありますか?

データシートビューでフォームを開いているときに、ユーザーが任意のタイミングで実行するのでしょうか。
ボタンは配置できないので、特定のキー操作(ショートカットキー)で実行するようにすればどうでしょう。

フォームの「キーボードイベント取得」プロパティを「はい」にしておいて、「キークリック時」のイベントプロシージャに下記のように記述すればいいでしょう。

下記はフォームがアクティブの時にF1キーをの押したときに実行する例です。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyF1 Then
        KeyCode = 0 'キー入力を無効化
        If Me.FilterOn = False Then
            Me.Filter = "終了チェック = False"
            Me.FilterOn = True
        End If
    End If
End Sub
5
しん 2024/10/10 (木) 18:42:45 051ad@9fff4

回答ありがとうございました。
通貨型に変更します

3

この形にしないと1つのクエリでは出来ないのですよね?

ユニオンクエリを使う場合は仰るとおりです

JOINで実装する場合は
結合キーである製品IDが、2つのクエリで どのような関係性にあるか
が成否(表内の〇と×)の要因となります

Q部品構成Q組立構成FJOINUNION
1多〇〇
11〇〇
多1〇〇
多多×〇
01×〇
10×〇
0多×〇
多0×〇

 
今回のご質問では、SQ文で利用されている2つのクエリに対し
行を一意にするキー項目の判別ができなかったこともあり

データの性質次第では、SQLの結果セットで 行の欠損が発生したり 誤った集計結果が出る

という現象を回避できる
ユニオン(縦結合)の回答が適切と判断しました

2
beginner 2024/10/10 (木) 15:41:41 ddfe5@dbc09

mayuさん ありがとうございます。コピーしたら上手く出来ました。確かに異なるテーブル同士なのでユニオンでなければ不可能ですね。素晴らしいSQLです! サブクエリにユニオン使うなんてとても自分では思いつきません。
この形にしないと1つのクエリでは出来ないのですよね? すみませんテクニックについていけてなくて。

1

実装費の合計が正しい値の5倍(構成IDの数)となってます

部品構成、組立構成の両クエリとも、製品IDが一意になっていないため
多:多の結合になり、行割れが発生しているのでしょう

こういった場合は、クエリ同士を
横並びに結合するのではなく、縦に結合することでご希望の結果になります

SELECT 製品ID
     , Sum( 小計 ) As 小計の合計
     , Sum( 実装費 ) As 実装費の合計
FROM 
(
    SELECT 製品ID
         , 小計
         , CCur(0) As 実装費
    FROM Q部品構成F_Sub用RS
    UNION ALL
    SELECT 製品ID
         , 0
         , 実装費
    FROM Q組立構成F_Sub用RS
) q
GROUP BY 製品ID
;
5
XS 2024/10/07 (月) 14:04:50 ddfe5@3ad83

hatenaさん ありがとうございます。
OpenArgsでしたらバッチリ上手く出来ました。感謝します!
紹介されている分もじっくり見て参考にさせて頂きます。
今回もお世話になりました。

4

下記で紹介しているサンプルなら、上記の点も考慮していますので、よろしければご参考に。

印刷プレビューに[印刷][閉じる]ボタンを付加する関数-改良版
以前の記事 印刷プレビューに[印刷][閉じる]ボタンを付加するOpenReport互換関数 - hatena chips の改良版です。 上記の関数は、複数のプレビューを同時に開いたとき、最後に開いたものだけしか[印刷][閉じる]ボタンが付加されません。前に開いていたものからはボタンが消えてしまいます。これを改良して、複数のプレビューにもそれぞれ[印刷][閉じる]ボタンが付加されるようにしました。 また、レポートの開くときイ...
fc2

3

Screen.ActiveReport.Name で対象レポート名を取得するのは不安定そうなので、OpenArgs引数でレポート名を渡せばどうでしょう。

Private Sub Report_Open(Cancel As Integer)
    DoCmd.OpenForm "F印刷設定", OpenArgs:=Me.Name
End Sub

Private Sub Report_Close()
    DoCmd.Close acForm, "F印刷設定"
End Sub
Private Sub Form_Open(Cancel As Integer)
    rptName = Me.OpenArgs   'レポート名取得
End Sub

レポートを複数プレビューしたり、プレビュー中に別のレポートを直接印刷したり、などの場合、おかしなことになるので、その辺のことを考慮して、Report_ActivateイベントやReport_Deactivateイベントを利用してレポート名を取得するほうがいいかも。

2
XS 2024/10/07 (月) 08:48:49 ddfe5@3ad83

hatenaさん ありがとうございます。
説明不足だったのですが(すみません)対象レポートを閉じる時のイベントに印刷設定フォームを閉じるコードも記述してます。
ファイルにはフォームが幾つかありそれぞれに異なるレポートをプレビューするボタンがあります。
最初にこの仕組みのコード記述したフォームAのレポートAをプレビューするボタンを実行すると問題なかったのですが、次にコード記述したフォームBのレポートBをプレビューするボタンを実行するとエラーが発生(レポート名が取得出来ていない)になるのです。試しに印刷設定フォームに MsgBox "名前は" & rptName のボタンを作成して様子みるとAの方は名前が表示されますが、Bでは無理です。レポートBにはサブレポートがあるのでその影響と思いサブレポートを消しても状況は同じでした・・・

5

データ量(行数×列数)はどのくらいでしょうか。

4
ひやま 2024/10/05 (土) 12:18:43 a5646@58068 >> 1

hatena様
お返事ありがとうございます。
重複者についてはカンマ区切りでできればと思います。ただ、難しい事がわからないため、改行の方が難しくないのであれば、できるだけ易しい方が希望です。
最終目的は、予約日時を個人にデータで案内をする事です。
まずは教えていただいた、Djoin関数を見てみたいと思います。

3
ひやま 2024/10/05 (土) 12:13:20 a5646@58068 >> 2

りんごさま
お返事ありがとうございます。
アクセスのクロス集計にこだわりはなく、データが多くエクセルの場合、固まってしまうことから
初心者ながらアクセスの方がいいのではと思った次第です。
そのことから、エクセル掲示板ではまだ質問はしていません。

1

これで1つ目のレポートには問題なく動作したのですが、2つ目のレポート時はエラーがでます。

「cmd直ちに印刷」をクリックしてレポートを印刷した後も「F印刷設定」フォームが開いたままなのが原因と思われます。開いたままだと、Form_Loadイベントは発生しませんので。

とりあえずの対策としては、印刷したら印刷設定フォームを閉じればいいでしょう。

Private Sub cmd直ちに印刷_Click()
    If vbOK = MsgBox("直ちに印刷を開始します。", vbOKCancel) Then
        DoCmd.OpenReport rptName, acViewNormal, "", "", acNormal
        DoCmd.Close acForm, Me.Name, acSaveNo '自身を閉じる
    Else
        MsgBox "印刷処理を中止します。", vbCritical
    End If
End Sub

ただ、レポートをプレビューせずに直接印刷したときとか、レポートのプレビューを閉じてしまった時のことも考慮する必要があるでしょう。

2
りんご 2024/09/29 (日) 14:59:54 935bc@0e907

ACCESSでクロス集計しなければいけない理由を明示して下さい。所謂EXCEL掲示板で質問しましたか?

1

重複者の氏名を一つのセルに表示とのことですが、どのように表示するのでしょうか。
カンマ区切りとか改行するとか、具体的に説明してください。

また、最終目的はなんでしょうか。印刷するのが目的なら、レポートのVBAで比較的にシンプルに実現が可能です。

クエリでする必要性があるのなら、DJoin関数を使うといいでしょう。

DJoin 関数 - リスト文字列を取得する方法

3

悪戦苦闘しましたが、単精度浮動小数点型にしたら、改善しました。

対症療法的な解決で、本質的な解決策ではないと思います。

原因はskさんも推定している「実際の値は 5.6 ピッタリ」ではないのだと思います。

小数点以下桁数を固定にした場合、単精度浮動小数点型は丸められて表示されるので、見た目上は5.6になっていても実際の値はそうでない可能性があります。

これでは集計した場合など演算誤差の原因になります。
そもそも浮動小数点型は演算誤差がありますので、誤差が発生しては困る金額計算には使用すべきではありません。

フィールド名が「利益」ということなので金額値だと思いますので「通貨型」にするのが適切です。

そのうえで小数点2桁以降の端数処理をどうするのかの仕様(切り捨て、切り上げ、四捨五入、金融機関型丸めなど)を決めて演算時に丸め処理をするような設計にすべきです。

2
しん 2024/09/19 (木) 13:59:54 051ad@9fff4

sk様

悪戦苦闘しましたが、単精度浮動小数点型にしたら、改善しました。

いつも、回答ありがとうございます。

1

Excelのデータで、5.6を、値貼りすると、5.6が、5.5になります。

Excelワークシート上において、そのセルの表示形式がどのように設定されているか、
もし「数値」形式または「通貨」形式である場合、[小数点以下の桁数]プロパティが
いくつに設定されているのかを具体的に明記して下さい。

フィールドサイズ ⇒ 十進型
書式 ⇒ 標準
精度 ⇒ 18
小数点以下保持桁数 ⇒ 1
小数点以下表示桁数 ⇒ 1

現時点では、「コピーされたセルの実際の値は 5.6 ピッタリではなく、
5.5 以上 5.6 未満の数値である」可能性が最も高いと思います。

4
しん 2024/09/17 (火) 18:45:13 051ad@9fff4

sk様

テーブルを10回くらい、作成しなおしたら、作動しました。
回答ありがとうございました。

3

データを整形して主キー付のテーブルを作成しました。

型が違うのかなと思い確認しましたが、型は、まちがっていませんでした。

  • 追加先となるテーブルの定義内容(各フィールドの名前/データ型、およびインデックス(特に主キー)の定義)

追加クエリを実行すると、変換型エラーとなり、1件も追加されませんでした。

  • 実行しようとしている追加クエリの SQL ビューの内容

とりあえず、以上の 2 点についてそのまま明記されることをお奨めします。

2
しん 2024/09/17 (火) 12:11:23 051ad@9fff4

追加されないテーブルの構造をコピーして、追加されたデータをコピペしたら、データは、追加されました。
クエリの書き方がわるいのでっしょうか?

1
しん 2024/09/17 (火) 11:51:26 051ad@9fff4

主キーの設定を、外しても、同じ結果になります。

2
beginner 2024/09/17 (火) 08:22:54 ddfe5@e1964

mayuさん ありがとうございます。連絡遅くなりすみませんでした。
確かに、グループ後の部品IDのカウントでいけますね。”製品ID + 部品ID でユニークになっている”の様にデータの分析ができてませんでした。勉強になりました。お世話になりました。

1

※ T製品別部品構成 は 製品ID + 部品ID でユニークになっていると仮定します

SELECT y.部品ID
FROM T製品一覧 x
INNER JOIN T製品別部品構成 y
        ON x.製品ID = y.製品ID
WHERE x.check
GROUP BY y.部品ID
HAVING Count(1) = (
           SELECT Count(1) FROM T製品一覧 WHERE check
       )
;
6
ヒロ 2024/09/12 (木) 14:49:16 ad693@a6874

hatena 様

原因が判明致しました。
色々とお手数お掛けして申し訳ありませんでした。

原因:セキュリティのソフトの「McAfee」をアンインストールしたら
   通常速度の起動、終了時間に戻りました。
   (同症状のパソコン3台からもアンインストールしたら普通に戻りました)

前から「McAfee」は入っていたらしいのですが今回のアップデートから
このような状態になってしまいました。

5
hatena 2024/09/12 (木) 10:07:07 修正

ファイルのアップロードができるのであればアップロードさせて
いただきますが起動、終了を試していただきご意見いただけないでしょうか?

当方はWin10の環境を持っていないのでファイルを送ってもらってもWin11とWin10での動作速度の違いを検証はできません。

また、Win11の環境の人で同じ現象にあった方がいればいいのですが、上記で紹介したMicrosoft コミュニティでは不具合があるとわりと報告される場合が多いようですが、そのような報告も現在出てないようです。

とりあえず、
「Win 11 の 8 月末のアップデート」を取り消して前のものに戻す方法がありますので、それを試してみて症状が解消するかどうか検証してみては。

FMV Q&A - [Windows 11] 以前のバージョン・ビルドに戻す方法を教えてください。 - FMVサポート : 富士通パソコン

4
ヒロ 2024/09/11 (水) 17:05:11 ad693@a6874

hatena  様 

ありがとうございます。
コミュニティで問い合わせさせていただきました。

ファイルのアップロードができるのであればアップロードさせて
いただきますが起動、終了を試していただきご意見いただけないでしょうか?

3

下記のMS公式の掲示板で質問してみたらどうでしょう。

Microsoft 365 および Officeの結果 - Microsoft コミュニティ

最近の更新がらみの不具合は下記のスレッドがあります。

Access365更新後の不具合 - Microsoft コミュニティ

ただ、Accessファイルを閉じてもロックファイルが残り、次回起動できないという不具合なのでこの質問の症状とは違います。

1
ヒロ 2024/09/11 (水) 07:55:03 ad693@a6874

こんな質問は駄目なんですね!
有償でも結構なのでどこか相談できる会社等の
アドバイスいただければ幸いです!

1
しん 2024/09/10 (火) 20:12:21 051ad@9fff4

すいません。ソートの条件に、直近3ヶ月を加えたことで、できました。
申し訳ありません。
解決しました。

2
あん 2024/09/10 (火) 15:40:56 b41ab@a5bc1

hatena様

ご返答ありがとうございます。

今回ばかりは、コードをストップする手立てはないんじゃないかと思っていました。

ダイアログにすれば止まる、というのは驚きました。

それと、別フォームを非表示にしたら、元フォームのテキストボックスがアクティブコントロールになること、
また、Screen.という使い方も知りませんでした。

今回も助かりました。
ありがとうございました。
早速、やってみます!

1
hatena 2024/09/10 (火) 15:18:10 修正

DoCmd.OpenFormでフォームを開くときに、ダイアログモードを指定すればフォームを閉じる(あるいは非表示になる)まで次のコードにすみません。また、開いている間はユーザーはこのフォーム以外を操作できません。それを利用するといいでしょう。
具体的には、WindowMode引数にacDialogを設定します。   

DoCmd.OpenForm メソッド (Access) | Microsoft Learn

コード例

'テキストボックスのダブルクリック時
Private Sub テキスト1_DblClick(Cancel As Integer)
    Cancel = True
    DoCmd.OpenForm "InputForm", WindowMode:=acDialog
End Sub
'別フォーム(InputForm)上のコマンドボタンのクリック時
Private Sub OKボタン_Click()
    Me.Visible = False '非表示にする
    'ダブルクリックしたテキストボックスがActiveControlになる
    Screen.ActiveControl = Me.コンボ2.Value
    DoCmd.Close acForm, Me.Name
End Sub
3

「正規化」だからといって特別の方法はないと思います

データベースの入門書を買って学習する

「正規化」をキーワードにWEB検索して、解説サイトで学習する

そのうえで、現状の扱いたいデータを正規化してみる

上記で正しく正規化できているか分からない場合は、
扱いたいデータのデータ例と、現状のテーブル構成を提示して、ここや技術系の掲示板で質問してみる

3

フォームで入力した抽出条件をどのように式に書くのかがよくわかりません

ではとりあえず、次の2点について明記されることをお奨めします。

  • 作成された更新クエリの SQL ビューの内容

  • 更新クエリに設定されている抽出条件において、[cmb_送付先]および[txb_送付期限]との比較対象となっている各フィールドのデータ型

2
名前なし 2024/09/02 (月) 17:19:14 7d95c@44ebd >> 1

Dcount関数の使い方を紹介しているページとか見ましたが、フォームで入力した抽出条件をどのように式に書くのかがよくわかりませんでした。