Microsoft Access 掲示板

834876 views
4 フォロー
6,423 件中 3,081 から 3,120 までを表示しています。
3
hiroton 2021/12/09 (木) 14:01:47 ea2fd@f966d

T伝票とT売上データを日付でリレーション(クエリ1)
T商品マスタと売上データを商品IDでリレーション(クエリ2)

どちらのクエリにもT売上データが使われているからだと思われます
クエリ1を使わずにそのままT伝票を指定したらどうでしょう

2
りんご 2021/12/09 (木) 13:40:10 c564b@0e907

5 bbb 568 いいい 4/1  5/31
6 bbb 568 いいい 6/1  3/31

 何故レコードが追加されているのでしょうか?役職変更や部門移動イベントが発生していないのに。
 とりあえず、終了日を99/3/31にしておくのはどうでしょう。
5 bbb 568 いいい 4/1  99/3/31
 役職変更や部門移動イベントが起きた時に、終了日の更新(確定)と新規レコードの追加をやればいいんじゃない?

1
hiroton 2021/12/09 (木) 13:34:20 ea2fd@f966d

グループで連番を振ったらあとは選択クエリでグループ化して開始の日付は最小、終了の日付は最大を取ったらいいんじゃないでしょうか


フラグを付けること自体が目的なら、最小とは前の値がないこと、最大とは次の値がないことなので2重のチェックが必要なのは仕方がないですね

グループ内連番に加えて最小値転記とフラグを付した後、

最大も同じ考え方でできますよ。レコードの最初から見てグループが変わったら最小と同様にレコードの最終から見てグループが変わったら最大です
ループ処理でrs.eofになっていると思うのでそのまま逆にrs.MovePreviousしながらrs.bofまでチェックすればいいです

2
takatada72 2021/12/09 (木) 13:00:37

お世話になります。
早速の返信をありがとうございました。

言葉足らずで申し訳ありません。
テンプレートは、保管しているメールに書き込みはできないでしょうか
例:テストメール.msg のファイルを作って、ハテナさんが言われている
部分にデータを差し込むような感じにしたいのです。

お忙しいとは思いますが宜しくお願い致します。

2
りんご 2021/12/09 (木) 01:28:00 c564b@0e907

日付でリレーションしているのは、データをEXCELからインポートするので、
双方のテーブルにインポートして、簡単に照合できるのが日付だから、です

 A社としか取引しないから、日付だけ見れば誰に売り上げたか照合出来る、という事でしょうか?

リレーションの画面では 1-∞ となっていませんが。

例えば、
テーブル1.名前:あ,い,う,え,お
テーブル2.名前:あ,か

クエリの画面:テーブル1.名前 一 テーブル2.名前

これは、リレーションシップではありません。結合しただけ。
リンク切れのデータが表示されない仕組みと思っています。

テーブル1,名前テーブル2,名前

結合線を右クリック、設定変更で遊べるので、これはこれで面白いです。
テーブル1,名前 ← テーブル2.名前とかテーブル1,名前 → テーブル2.名前とか。

1
りんご 2021/12/09 (木) 00:21:18 c564b@0e907

T伝票:顧客No, 日付, …
T売上:顧客No, 日付, 商品No, …
T商品:商品No, …
T顧客:顧客No, …
T伝票(クエリ1)・・・・・・・・・・『Q伝票』:T伝票.顧客No, T伝票.日付, T顧客.顧客名, …
T伝票、T売上、T商品(クエリ2)・・・『Q売上』:T売上.顧客No, T売上.日付, T売上.商品No, T商品.商品名, …,

リレーションシップ:

T顧客T伝票T売上T商品
顧客No1一∞顧客No1一∞顧客No
顧客名日付1一∞日付
商品No∞一1商品No

F伝票(レコードソース『Q伝票』)
顧客No:1
日付     :12/1
サブフォーム(F売上:レコードソース『Q売上』)

(顧客No)(日付)(商品No)商品名
(1)(12/1)(1)あああ
(1)(12/1)(2)いいい
1

テンプレート(定型文)を使って、メール本文を作成する部分が分からないところでしょうか。

下記のようなテーブルに定型文を保存しておきます。

テーブル名
 T_定型文
フィールド
 定型文ID 主キー
 定型文  長いテキスト

定型文の例
下記のような感じで、変更したい部分を【】で囲んで埋め込んでおく。

◯◯◯◯◯◯◯◯◯◯◯◯
◯◯◯◯◯◯【製品名】◯◯◯◯ 【製品番号】◯◯◯◯
◯◯◯◯【担当者アドレス】◯◯◯◯
◯◯◯◯◯◯◯◯

ボタンクリックで、下記のように置換すればメイル本文で完成します。

Dim MailHonbun As String
MailHonbun = DLookup("定型文","T_定型文","定型文ID=1")
MailHonbun = Replace(MailHonbun,"【製品番号】",Me.製品番号)
MailHonbun = Replace(MailHonbun,"【製品名】",Me.製品名)
MailHonbun = Replace(MailHonbun,"【担当者アドレス】",Me.担当者アドレス)
2
りんご 2021/12/02 (木) 15:23:17 c564b@0e907

登録のしようがありません

 イメージなので使えるかわかりませんが。

ほにゃららテーブル

ほにゃらら売上名
下請ABC売上A
下請ABC売上B
下請ABC売上C
下請案件〇〇売上D
下請No〇〇売上E

ほにゃららテーブル

ほにゃらら金額
下請ABC750
下請案件〇〇1500
下請No〇〇1000

 ほにゃららテーブル

ほにゃらら下請先金額
下請ABC工場A250
下請ABC工場B250
下請ABC工場C250
下請案件〇〇工場A1500
下請No〇〇工場C1000
6
takatada72 2021/12/02 (木) 14:42:15

ご心配をおかけしましたが、Officeの再インストールにより、無事、ACCESSが復帰できました。

ありがとうございました。

5
takatada72 2021/12/02 (木) 11:17:27

ご返信をありがとうございました。
全てのVBAを使っているACCESSファイルになります。
Officeを再インストールして、NGだったら、教えて頂いたマイクロソフトのコミュニティへ
投稿したいと思います。

1
hatena 2021/12/01 (水) 22:38:46 修正

そのような要件のシステムを作成したことがないので、アイデアだけですが、
下記のようなテーブルでどうでしょうか。


売上テーブル
 売上ID 主キー
 取引先CD
 売上名
 金額


下払テーブル
 売上ID
 下払先CD
 下払金額


データ例
売上テーブル

売上ID取引先CD売上名金額
11A1000
21B2000
32C3000
43D4000

下払テーブル

売上ID 下払先CD 下払金額
1 1 800 1つの下請け
2 1 800 複数の下請けに分散
2 2 900
3 3 1000 1つの下請けに複数の売上
4 3 1100
2
りんご 2021/12/01 (水) 22:32:31 c564b@0e907

 状況がイマイチ伝わらないんですが、もしかして、サブフォームを作りましたが、新規データをサブフォームに追加出来ませんって事でしょうか?
 メインフォーム
メインフォームID:1
リンク親フィールド:1
 サブフォーム

サブフォームIDリンク子フィールド
11
21
(新規)1

⬇

サブフォームIDリンク子フィールド
11
21
31
(新規)1
1

抽象的過ぎて回答不能。

それぞれのフォームのレコードソースのフィールド構成、主キー設定、
サブフォームのリンク親フィールド、リンク子フィールドの設定などを、
詳細に説明してください。

「子2のフィールドを追加できません」というのは、デザインビューでフィールドが追加できないという意味ですか。

7
のり 2021/12/01 (水) 16:46:45 d46dd@5536d

いつもお世話になります
レポートのレコードソースを取得する方法を教えていただきましたが
DoCmd.OutputTo acReport, Me.Tag, acFormatXLS, では 
現在出力しようとしているオブジェクトの型式は無効ですのエラーがでます
acReportを acOutputReportにしても acFormatXLS を acOutputXlsにしてもだめでした
acOutputReportではダメで acOutputTableでは出力されます
なぜでしょうか?
ちなみに ACCESS2007です 
2007 Office スイート Service Pack でアップデートしなくてはだめなのでしょうか?

4

不具合が起きているのは特定のデータベースファイルですか。それとも、すべてのデータベースファイルですか。
新規に作成したデータベースファイルではどうでしょうか。

新規のデータベースファイルなら不具合が発生しないなら、新規ファイルに、問題のデータベースファイルからすべてのオブジェクトをインポートしてみたらどうなりますか。

すべてのファイルで発生するなら、Officeのアンインストール、再インストールを試すぐらいでしょうか。

症状は違いますが、下記でも不具合の相談がされています。ただ、まだ解決には至ってないようです。

Windows10UPdate後の不具合 - Microsoft コミュニティ

3
takatada72 2021/12/01 (水) 15:27:48

ごめんなさい
ここの掲示板の使い方がわからなく、プロフィールのつもりで書いてしまいました。

現状で困っているのは、最近のWindows10の更新で、ACCESSのVBEを開くと、画面が
真っ暗になったり、復元したりして使えない状態になるため、解決策を探しております。

お忙しいとは思いますが宜しくお願い致します。

2

具体的にどのような機能の追加を考えていますか。

VBAについての基本の学習はすんでますか。

1
りんご 2021/12/01 (水) 14:52:12 c564b@0e907

Access=データベース作業向きソフト≠効率化ソフトじゃないでしょうか?

1

商品マスタにおける「価格」と「取引先の社名や支店名」は少し性格が異なりますね。
取引先は、取引先マスタというテーブルがあるはずなので(なければ作成すべき)、このマスターの設計をどうするかという話になります。

とりあえず、商品マスターにおける頻繁に変更のある「価格」をどのような設計にするかについて回答します。
方法としては主に2つ考えられます。

「商品マスター」と「商品価格履歴」に分割する

設計例

商品マスタ
 商品コード 主キー
 商品名

商品価格履歴
 商品コード 主キー
 商品サブコード 主キー
 変更日

売上テーブル
 売上ID 主キー
 売上日
 商品コード
 商品サブコード ※入力時の最新のサブコードを自動入力

トランザクションテーブル(売上テーブル)に価格を格納する

商品マスタ
 商品コード 主キー
 商品名
 価格

売上テーブル
 売上ID 主キー
 売上日
 商品コード
 価格 ※入力時の最新の価格を自動入力

 あくまで1例です。

1

サブデータシートがご希望のイメージに近いものかも。

フォーム上にデータシートとサブデータシートを表示する - もう一度学ぶMS-Access

別のフォームを開くのなら、
DoCmd.OpenForm の引数でキーフィールドの抽出条件を設定すればいいでしょう。

6
のり 2021/11/29 (月) 16:04:48 f1fa6@5536d

hatenaさま ありがとうございます
勉強不足ですみませんでした 
acReport, Me.Tag をそのまま使えばよかったのですね
難しく考えすぎていました OutputTo で対応いたします
本当にありがとうございました

5

F_PreViewChildMenu のTagプロパティにレポート名が格納されている仕様になってます。
よって下記のようなコードで共通に使えます。

DoCmd.OutputTo acReport, Me.Tag, acFormatXLS, "C:\test\" & Me.Tag & ".xls"

レポートのレコードソースがテーブルかクエリなら、DoCmd.TransferSpreadsheet が使えます。
わさわざ質問のような面倒なコードを使う必要性はないです。
その場合も、レポート名は、Me.Tagで取得できます。
ただし、レポートを開く時にフィルターをかけていたり、並べ替えを設定していたりすると、それが反映されないので、それを反映させたい場合はまた、面倒なことになります。

4
のり 2021/11/29 (月) 13:49:02 f1fa6@5536d

hatenaさま お返事ありがとうございます
hatenaさまの「F_PreViewChildMenu」のフォームはありとあらゆるレポートの出力に利用させてもらっています
そのため OutputTo acReport ”レポート名” では 「F_PreViewChildMenu-1」 「F_PreViewChildMenu-2」といったように その特定のレポートごとにフォームを作らなくてはなりません、なので現在ひらいているレポートのレコードを取りたかったのです
りんごさま お返事ありがとうございます EXCELはACCESSで加工されたデータを、その時だけに必要な集計表や煩雑なレポートを作成するために利用しております
CurrentDb.QueryDefs(Me.RecordSource).SQL ありがとうございます フォーム上でのエクスポート設定を読んで勉強させていただきます
ありがとうございます

3
りんご 2021/11/26 (金) 22:46:06 c564b@0e907

 OutputToメソッドやTransferSpreadsheetメソッドでは駄目なのでしょうか?中には非推奨とするサイトもあるようですが、鵜呑みにせずに本当に駄目なのか慎重に判断でましょう。
 コーディングの是非もありますが、Excelエクスポートの是非も気になります。そもそも、AccessとExcelの業務連携の必要性、何の為にAccessを導入しているのかと。

 コマンドボタンのクリック時のコードは 別サイトで見て書いてみました

 参考にするなら、下記サイトなんかはどうでしょう?
 

Accessのノウハウ(フォーム上でのエクスポート設定)
「ファイルのインポート・エクスポートをフォーム上で実行する」のその2 エクスポート 版です。インポートの項で、フォームの作り方・フォーマットテーブルとの連携の仕方・クエリの名前付け等についてお話しましたので、エクスポートについては、まずは、モジュールサンプルを提示します。フォームとモジュールサンプルこんなフォームを作るとします。レコードソースは、インポートと同じ T_Formatです。********************
日本システムアドミニストレータ連絡会

2
りんご 2021/11/26 (金) 21:44:10 c564b@0e907

CurrentDb.QueryDefs(Me.RecordSource).SQL

1

ブログのコメント欄でも書きましたが、OutputToメソッドを使えば1行で済みますが、それではうまくいかなかったのでしょうか。

DoCmd.OutputTo acReport, "レポート名", acFormatXLS, "C:\test\test.xls"
13

Q_案件 で一対多関係の多側のレコードのみ削除されて、一側のレコードは残っているということかも、と推測。
Q_案件 のSQLを提示してもらえますか。

2
名前なし 2021/11/26 (金) 11:34:12 7f390@642cb

hatenas様

解決しました。
ご助言いただきありがとうございます。

12
りんご 2021/11/26 (金) 03:16:16 c564b@0e907

>> 9
>> 11

Q_案件にてレコード削除した際も同じ現象が起きました。
一度削除される(削除しますか?のポップアップ⇒はいで、レコードが見えなくなる)のあとに更新ボタンを押すと復活していました。

 「選択クエリを直接開いて、レコードを1行手動で選択してDELETEした瞬間、一瞬画面がチラつき直ちに、削除したはずのレコードが復活した」という事ですが、「選択クエリを直接開いて、とあるレコードのフィールドを選択して値の変更を試した」結果は、どうなったのでしょう?慎重に確認するのであれば、クエリを直接開いてレコードを編集したら、テーブルも開いて確認します。

一時的にONして確認しましたが、エラーは出てきませんでした。

 もうひとつ当て推量です。フォーム上に案件NO、売区、得意先IDなどのフィールドがあると思いますが、どれかに何かのイベントを設定していませんか?もし該当するものがあれば、フィールドに設定したイベントを全部offにしてみて下さい。
 その上で、削除から一瞬で復活するか結果を教えて下さい。復活しなくなった場合、offにしたイベントのコードを保守義務に差し支えない範囲で、全部コピペして教えて下さい。

1
りんご 2021/11/26 (金) 02:32:20 c564b@0e907

 ググっていたら、こんなのがありました。下の方にスクロールすると、とある回答者がコード化したようです。内容の正しさまでは私にはわかりませんでした。他の人の意見も聞いて下さい。

How to set a password for PDF file export?
I need to add a password for extracting PDF. Dim FileName As String Dim FilePath As String FileName = Me.Full_Name & "_" & Me.ID FilePath = "C:\Users\Desktop\" & Fil...
Stack Overflow

11
どんぐりず 2021/11/25 (木) 23:06:24 440a7@6f3e7 >> 6

一時的にONして確認しましたが、エラーは出てきませんでした。

1

もう少し詳しい情報が欲しいですね。

まず、データベースファイルはデータとそれ以外で分割していましたか。

データが丸ごと消えたとは、テーブルのデータ件数が0件になった、テーブルごと消えた、データベースファイルごと消えた、、、、どれでしょうか。

1

qd のパラメータを設定したのですから、qdをOpenRecordsetしてください。

Set db = CurrentDb
Set qd = db.QueryDefs("Q_経費精算振込明細用")
qd.Parameters("[forms]![F_経費精算]![振込月]") = Forms![F_経費精算]![振込月]

Set rs = qd.OpenRecordset
10
hiroton 2021/11/25 (木) 09:54:34 5b367@f966d

参考になるか分かりませんがACCESS+SharePointの環境で
テーブルのレコードを選んで削除→消える
選択クエリ(結合なしで抽出条件だけ)のレコードを選んで削除→クエリ上では消える、テーブルでは消えず、クエリを開きなおすとデータが消えていない
というのは経験したことがあります

深く検証する状況になかったのでこれ以上のことはわかりませんが、基本に立ち戻って最小構成のテスト用DBからどの状況でその現象が発生するのか確認したらいいと思いますよ

9
どんぐりず 2021/11/25 (木) 09:37:25 440a7@6f3e7 >> 8

ご回答ありがとうございます。
Q_案件にてレコード削除した際も同じ現象が起きました。
一度削除される(削除しますか?のポップアップ⇒はいで、レコードが見えなくなる)のあとに更新ボタンを押すと復活していました。

8

F_案件の元データがQ_案件で

フォームのレコードソースに、Q_案件 というクエリが設定されいるということですか。

このQ_案件を直接開いてレコード削除したときは、削除できますか。
また、データの更新はできますか。

キーとなる「案件NO」からQ_案件で
「T_案件リンク」と「Q_サブ保守」に結合しています。
その他キー以外の
「売区」から「T_売区」
「得意先ID」から「Q_得意先」に結合しています。
色んな所と繋がっているので、削除しても復活してしまうのかと考えています。

結合することで、削除したものが復活するということはありえません。
結合や主キーの設定が間違っていると更新できない(当然削除もできない)クエリになることはあります。

7
りんご 2021/11/24 (水) 22:21:31 c564b@0e907

例えば、セルを編集してセにしたい。

列名1列名2
セルセル
▶セル◻

セルのルを消したのに、うっかりESCキー押してしまい復活しちゃった。

列名1列名2
セルセル
▶セルセル

これに近い事が起きていませんか?当て推量ですが、何某かのイベントが発動して、編集が確定されずにキャンセルされているとか。

6
りんご 2021/11/24 (水) 22:02:39 c564b@0e907

 エラーメッセージの表示設定を一時的にONにして、リレーションシップの連鎖削除が原因と出てくるか試してみましたか?(フォームで削除出来ないものが、テーブルで直接削除出来るとは考えにくいんですが、念のため確認して下さい。)

5
どんぐりず 2021/11/24 (水) 21:17:10 a6ff4@1c915 >> 4

名前が変わってました…どんぐりず=風(質問者)です。
この修正について社内で後回しにしており、改めての質問になり申し訳ありません。
リレーションシップで、T_案件が「一対多」の「多」側になっていることがあります。そこで連鎖削除等の3つのチェックボックス全てにチェックを入れているのが問題でしょうか…?勝手な推測で失礼いたします。

4
どんぐりず 2021/11/24 (水) 19:22:47 a6ff4@1c915 >> 2

これで削除はできませんでした。(一旦できるのですが、更新すると復活する)
色々と入り組んでいてどこまで説明すれば良いのかわからないのですが
F_案件の元データがQ_案件で
キーとなる「案件NO」からQ_案件で
「T_案件リンク」と「Q_サブ保守」に結合しています。
その他キー以外の
「売区」から「T_売区」
「得意先ID」から「Q_得意先」に結合しています。
色んな所と繋がっているので、削除しても復活してしまうのかと考えています。

全体的にボリュームのあるデータなので全て説明するのが難しく
適当な情報をピックアップしてしまい申し訳ありません。
リレーションシップは昔組んでいたらうまく行かない所があって
中途半端に組んでしまっています。
全部のテーブルを入れて、きちんと組むべきでしょうか。