T伝票とT売上データを日付でリレーション(クエリ1) T商品マスタと売上データを商品IDでリレーション(クエリ2)
どちらのクエリにもT売上データが使われているからだと思われます クエリ1を使わずにそのままT伝票を指定したらどうでしょう
T売上データ
T伝票
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 役職変更や部門移動イベントが起きた時に、終了日の更新(確定)と新規レコードの追加をやればいいんじゃない?
グループで連番を振ったらあとは選択クエリでグループ化して開始の日付は最小、終了の日付は最大を取ったらいいんじゃないでしょうか
フラグを付けること自体が目的なら、最小とは前の値がないこと、最大とは次の値がないことなので2重のチェックが必要なのは仕方がないですね
グループ内連番に加えて最小値転記とフラグを付した後、
最大も同じ考え方でできますよ。レコードの最初から見てグループが変わったら最小と同様にレコードの最終から見てグループが変わったら最大です ループ処理でrs.eofになっていると思うのでそのまま逆にrs.MovePreviousしながらrs.bofまでチェックすればいいです
rs.eof
rs.MovePrevious
rs.bof
お世話になります。 早速の返信をありがとうございました。
言葉足らずで申し訳ありません。 テンプレートは、保管しているメールに書き込みはできないでしょうか 例:テストメール.msg のファイルを作って、ハテナさんが言われている 部分にデータを差し込むような感じにしたいのです。
お忙しいとは思いますが宜しくお願い致します。
日付でリレーションしているのは、データをEXCELからインポートするので、 双方のテーブルにインポートして、簡単に照合できるのが日付だから、です
A社としか取引しないから、日付だけ見れば誰に売り上げたか照合出来る、という事でしょうか?
リレーションの画面では 1-∞ となっていませんが。
例えば、 テーブル1.名前:あ,い,う,え,お テーブル2.名前:あ,か
クエリの画面:テーブル1.名前 一 テーブル2.名前
これは、リレーションシップではありません。結合しただけ。 リンク切れのデータが表示されない仕組みと思っています。
結合線を右クリック、設定変更で遊べるので、これはこれで面白いです。 テーブル1,名前 ← テーブル2.名前とかテーブル1,名前 → テーブル2.名前とか。
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商品.商品名, …,
リレーションシップ:
F伝票(レコードソース『Q伝票』) 顧客No:1 日付 :12/1 サブフォーム(F売上:レコードソース『Q売上』)
テンプレート(定型文)を使って、メール本文を作成する部分が分からないところでしょうか。
下記のようなテーブルに定型文を保存しておきます。
テーブル名 T_定型文 フィールド 定型文ID 主キー 定型文 長いテキスト
定型文の例 下記のような感じで、変更したい部分を【】で囲んで埋め込んでおく。
◯◯◯◯◯◯◯◯◯◯◯◯ ◯◯◯◯◯◯【製品名】◯◯◯◯ 【製品番号】◯◯◯◯ ◯◯◯◯【担当者アドレス】◯◯◯◯ ◯◯◯◯◯◯◯◯
ボタンクリックで、下記のように置換すればメイル本文で完成します。
Dim MailHonbun As String MailHonbun = DLookup("定型文","T_定型文","定型文ID=1") MailHonbun = Replace(MailHonbun,"【製品番号】",Me.製品番号) MailHonbun = Replace(MailHonbun,"【製品名】",Me.製品名) MailHonbun = Replace(MailHonbun,"【担当者アドレス】",Me.担当者アドレス)
登録のしようがありません
イメージなので使えるかわかりませんが。
ほにゃららテーブル
ご心配をおかけしましたが、Officeの再インストールにより、無事、ACCESSが復帰できました。
ありがとうございました。
ご返信をありがとうございました。 全てのVBAを使っているACCESSファイルになります。 Officeを再インストールして、NGだったら、教えて頂いたマイクロソフトのコミュニティへ 投稿したいと思います。
そのような要件のシステムを作成したことがないので、アイデアだけですが、 下記のようなテーブルでどうでしょうか。
売上テーブル 売上ID 主キー 取引先CD 売上名 金額
下払テーブル 売上ID 下払先CD 下払金額
データ例 売上テーブル
下払テーブル
状況がイマイチ伝わらないんですが、もしかして、サブフォームを作りましたが、新規データをサブフォームに追加出来ませんって事でしょうか? メインフォーム メインフォームID:1 リンク親フィールド:1 サブフォーム
抽象的過ぎて回答不能。
それぞれのフォームのレコードソースのフィールド構成、主キー設定、 サブフォームのリンク親フィールド、リンク子フィールドの設定などを、 詳細に説明してください。
「子2のフィールドを追加できません」というのは、デザインビューでフィールドが追加できないという意味ですか。
いつもお世話になります レポートのレコードソースを取得する方法を教えていただきましたが DoCmd.OutputTo acReport, Me.Tag, acFormatXLS, では 現在出力しようとしているオブジェクトの型式は無効ですのエラーがでます acReportを acOutputReportにしても acFormatXLS を acOutputXlsにしてもだめでした acOutputReportではダメで acOutputTableでは出力されます なぜでしょうか? ちなみに ACCESS2007です 2007 Office スイート Service Pack でアップデートしなくてはだめなのでしょうか?
不具合が起きているのは特定のデータベースファイルですか。それとも、すべてのデータベースファイルですか。 新規に作成したデータベースファイルではどうでしょうか。
新規のデータベースファイルなら不具合が発生しないなら、新規ファイルに、問題のデータベースファイルからすべてのオブジェクトをインポートしてみたらどうなりますか。
すべてのファイルで発生するなら、Officeのアンインストール、再インストールを試すぐらいでしょうか。
症状は違いますが、下記でも不具合の相談がされています。ただ、まだ解決には至ってないようです。
Windows10UPdate後の不具合 - Microsoft コミュニティ
ごめんなさい ここの掲示板の使い方がわからなく、プロフィールのつもりで書いてしまいました。
現状で困っているのは、最近のWindows10の更新で、ACCESSのVBEを開くと、画面が 真っ暗になったり、復元したりして使えない状態になるため、解決策を探しております。
具体的にどのような機能の追加を考えていますか。
VBAについての基本の学習はすんでますか。
Access=データベース作業向きソフト≠効率化ソフトじゃないでしょうか?
商品マスタにおける「価格」と「取引先の社名や支店名」は少し性格が異なりますね。 取引先は、取引先マスタというテーブルがあるはずなので(なければ作成すべき)、このマスターの設計をどうするかという話になります。
とりあえず、商品マスターにおける頻繁に変更のある「価格」をどのような設計にするかについて回答します。 方法としては主に2つ考えられます。
設計例
商品マスタ 商品コード 主キー 商品名
商品価格履歴 商品コード 主キー 商品サブコード 主キー 変更日
売上テーブル 売上ID 主キー 売上日 商品コード 商品サブコード ※入力時の最新のサブコードを自動入力
商品マスタ 商品コード 主キー 商品名 価格
売上テーブル 売上ID 主キー 売上日 商品コード 価格 ※入力時の最新の価格を自動入力
あくまで1例です。
サブデータシートがご希望のイメージに近いものかも。
フォーム上にデータシートとサブデータシートを表示する - もう一度学ぶMS-Access
別のフォームを開くのなら、 DoCmd.OpenForm の引数でキーフィールドの抽出条件を設定すればいいでしょう。
hatenaさま ありがとうございます 勉強不足ですみませんでした acReport, Me.Tag をそのまま使えばよかったのですね 難しく考えすぎていました OutputTo で対応いたします 本当にありがとうございました
F_PreViewChildMenu のTagプロパティにレポート名が格納されている仕様になってます。 よって下記のようなコードで共通に使えます。
DoCmd.OutputTo acReport, Me.Tag, acFormatXLS, "C:\test\" & Me.Tag & ".xls"
レポートのレコードソースがテーブルかクエリなら、DoCmd.TransferSpreadsheet が使えます。 わさわざ質問のような面倒なコードを使う必要性はないです。 その場合も、レポート名は、Me.Tagで取得できます。 ただし、レポートを開く時にフィルターをかけていたり、並べ替えを設定していたりすると、それが反映されないので、それを反映させたい場合はまた、面倒なことになります。
hatenaさま お返事ありがとうございます hatenaさまの「F_PreViewChildMenu」のフォームはありとあらゆるレポートの出力に利用させてもらっています そのため OutputTo acReport ”レポート名” では 「F_PreViewChildMenu-1」 「F_PreViewChildMenu-2」といったように その特定のレポートごとにフォームを作らなくてはなりません、なので現在ひらいているレポートのレコードを取りたかったのです りんごさま お返事ありがとうございます EXCELはACCESSで加工されたデータを、その時だけに必要な集計表や煩雑なレポートを作成するために利用しております CurrentDb.QueryDefs(Me.RecordSource).SQL ありがとうございます フォーム上でのエクスポート設定を読んで勉強させていただきます ありがとうございます
OutputToメソッドやTransferSpreadsheetメソッドでは駄目なのでしょうか?中には非推奨とするサイトもあるようですが、鵜呑みにせずに本当に駄目なのか慎重に判断でましょう。 コーディングの是非もありますが、Excelエクスポートの是非も気になります。そもそも、AccessとExcelの業務連携の必要性、何の為にAccessを導入しているのかと。
コマンドボタンのクリック時のコードは 別サイトで見て書いてみました
参考にするなら、下記サイトなんかはどうでしょう?
CurrentDb.QueryDefs(Me.RecordSource).SQL
ブログのコメント欄でも書きましたが、OutputToメソッドを使えば1行で済みますが、それではうまくいかなかったのでしょうか。
DoCmd.OutputTo acReport, "レポート名", acFormatXLS, "C:\test\test.xls"
Q_案件 で一対多関係の多側のレコードのみ削除されて、一側のレコードは残っているということかも、と推測。 Q_案件 のSQLを提示してもらえますか。
hatenas様
解決しました。 ご助言いただきありがとうございます。
>> 9 >> 11
Q_案件にてレコード削除した際も同じ現象が起きました。 一度削除される(削除しますか?のポップアップ⇒はいで、レコードが見えなくなる)のあとに更新ボタンを押すと復活していました。
「選択クエリを直接開いて、レコードを1行手動で選択してDELETEした瞬間、一瞬画面がチラつき直ちに、削除したはずのレコードが復活した」という事ですが、「選択クエリを直接開いて、とあるレコードのフィールドを選択して値の変更を試した」結果は、どうなったのでしょう?慎重に確認するのであれば、クエリを直接開いてレコードを編集したら、テーブルも開いて確認します。
一時的にONして確認しましたが、エラーは出てきませんでした。
もうひとつ当て推量です。フォーム上に案件NO、売区、得意先IDなどのフィールドがあると思いますが、どれかに何かのイベントを設定していませんか?もし該当するものがあれば、フィールドに設定したイベントを全部offにしてみて下さい。 その上で、削除から一瞬で復活するか結果を教えて下さい。復活しなくなった場合、offにしたイベントのコードを保守義務に差し支えない範囲で、全部コピペして教えて下さい。
ググっていたら、こんなのがありました。下の方にスクロールすると、とある回答者がコード化したようです。内容の正しさまでは私にはわかりませんでした。他の人の意見も聞いて下さい。
もう少し詳しい情報が欲しいですね。
まず、データベースファイルはデータとそれ以外で分割していましたか。
データが丸ごと消えたとは、テーブルのデータ件数が0件になった、テーブルごと消えた、データベースファイルごと消えた、、、、どれでしょうか。
qd のパラメータを設定したのですから、qdをOpenRecordsetしてください。
Set db = CurrentDb Set qd = db.QueryDefs("Q_経費精算振込明細用") qd.Parameters("[forms]![F_経費精算]![振込月]") = Forms![F_経費精算]![振込月] Set rs = qd.OpenRecordset
参考になるか分かりませんがACCESS+SharePointの環境で テーブルのレコードを選んで削除→消える 選択クエリ(結合なしで抽出条件だけ)のレコードを選んで削除→クエリ上では消える、テーブルでは消えず、クエリを開きなおすとデータが消えていない というのは経験したことがあります
深く検証する状況になかったのでこれ以上のことはわかりませんが、基本に立ち戻って最小構成のテスト用DBからどの状況でその現象が発生するのか確認したらいいと思いますよ
ご回答ありがとうございます。 Q_案件にてレコード削除した際も同じ現象が起きました。 一度削除される(削除しますか?のポップアップ⇒はいで、レコードが見えなくなる)のあとに更新ボタンを押すと復活していました。
F_案件の元データがQ_案件で
フォームのレコードソースに、Q_案件 というクエリが設定されいるということですか。
このQ_案件を直接開いてレコード削除したときは、削除できますか。 また、データの更新はできますか。
キーとなる「案件NO」からQ_案件で 「T_案件リンク」と「Q_サブ保守」に結合しています。 その他キー以外の 「売区」から「T_売区」 「得意先ID」から「Q_得意先」に結合しています。 色んな所と繋がっているので、削除しても復活してしまうのかと考えています。
結合することで、削除したものが復活するということはありえません。 結合や主キーの設定が間違っていると更新できない(当然削除もできない)クエリになることはあります。
例えば、セルを編集してセにしたい。
セルのルを消したのに、うっかりESCキー押してしまい復活しちゃった。
これに近い事が起きていませんか?当て推量ですが、何某かのイベントが発動して、編集が確定されずにキャンセルされているとか。
エラーメッセージの表示設定を一時的にONにして、リレーションシップの連鎖削除が原因と出てくるか試してみましたか?(フォームで削除出来ないものが、テーブルで直接削除出来るとは考えにくいんですが、念のため確認して下さい。)
名前が変わってました…どんぐりず=風(質問者)です。 この修正について社内で後回しにしており、改めての質問になり申し訳ありません。 リレーションシップで、T_案件が「一対多」の「多」側になっていることがあります。そこで連鎖削除等の3つのチェックボックス全てにチェックを入れているのが問題でしょうか…?勝手な推測で失礼いたします。
これで削除はできませんでした。(一旦できるのですが、更新すると復活する) 色々と入り組んでいてどこまで説明すれば良いのかわからないのですが F_案件の元データがQ_案件で キーとなる「案件NO」からQ_案件で 「T_案件リンク」と「Q_サブ保守」に結合しています。 その他キー以外の 「売区」から「T_売区」 「得意先ID」から「Q_得意先」に結合しています。 色んな所と繋がっているので、削除しても復活してしまうのかと考えています。
全体的にボリュームのあるデータなので全て説明するのが難しく 適当な情報をピックアップしてしまい申し訳ありません。 リレーションシップは昔組んでいたらうまく行かない所があって 中途半端に組んでしまっています。 全部のテーブルを入れて、きちんと組むべきでしょうか。
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
Markdown Tables generator
どちらのクエリにも
T売上データ
が使われているからだと思われますクエリ1を使わずにそのまま
T伝票
を指定したらどうでしょう何故レコードが追加されているのでしょうか?役職変更や部門移動イベントが発生していないのに。
とりあえず、終了日を99/3/31にしておくのはどうでしょう。
5 bbb 568 いいい 4/1 99/3/31
役職変更や部門移動イベントが起きた時に、終了日の更新(確定)と新規レコードの追加をやればいいんじゃない?
グループで連番を振ったらあとは選択クエリでグループ化して開始の日付は最小、終了の日付は最大を取ったらいいんじゃないでしょうか
フラグを付けること自体が目的なら、最小とは前の値がないこと、最大とは次の値がないことなので2重のチェックが必要なのは仕方がないですね
最大も同じ考え方でできますよ。レコードの最初から見てグループが変わったら最小と同様にレコードの最終から見てグループが変わったら最大です
ループ処理で
rs.eof
になっていると思うのでそのまま逆にrs.MovePrevious
しながらrs.bof
までチェックすればいいですお世話になります。
早速の返信をありがとうございました。
言葉足らずで申し訳ありません。
テンプレートは、保管しているメールに書き込みはできないでしょうか
例:テストメール.msg のファイルを作って、ハテナさんが言われている
部分にデータを差し込むような感じにしたいのです。
お忙しいとは思いますが宜しくお願い致します。
A社としか取引しないから、日付だけ見れば誰に売り上げたか照合出来る、という事でしょうか?
例えば、
テーブル1.名前:あ,い,う,え,お
テーブル2.名前:あ,か
クエリの画面:テーブル1.名前 一 テーブル2.名前
これは、リレーションシップではありません。結合しただけ。
リンク切れのデータが表示されない仕組みと思っています。
いうえおか結合線を右クリック、設定変更で遊べるので、これはこれで面白いです。
テーブル1,名前 ← テーブル2.名前とかテーブル1,名前 → テーブル2.名前とか。
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商品.商品名, …,
リレーションシップ:
F伝票(レコードソース『Q伝票』)
顧客No:1
日付 :12/1
サブフォーム(F売上:レコードソース『Q売上』)
テンプレート(定型文)を使って、メール本文を作成する部分が分からないところでしょうか。
下記のようなテーブルに定型文を保存しておきます。
テーブル名
T_定型文
フィールド
定型文ID 主キー
定型文 長いテキスト
定型文の例
下記のような感じで、変更したい部分を【】で囲んで埋め込んでおく。
ボタンクリックで、下記のように置換すればメイル本文で完成します。
イメージなので使えるかわかりませんが。
ほにゃららテーブル
ほにゃららテーブル
ほにゃららテーブル
ご心配をおかけしましたが、Officeの再インストールにより、無事、ACCESSが復帰できました。
ありがとうございました。
ご返信をありがとうございました。
全てのVBAを使っているACCESSファイルになります。
Officeを再インストールして、NGだったら、教えて頂いたマイクロソフトのコミュニティへ
投稿したいと思います。
そのような要件のシステムを作成したことがないので、アイデアだけですが、
下記のようなテーブルでどうでしょうか。
売上テーブル
売上ID 主キー
取引先CD
売上名
金額
下払テーブル
売上ID
下払先CD
下払金額
データ例
売上テーブル
下払テーブル
状況がイマイチ伝わらないんですが、もしかして、サブフォームを作りましたが、新規データをサブフォームに追加出来ませんって事でしょうか?
メインフォーム
メインフォームID:1
リンク親フィールド:1
サブフォーム
抽象的過ぎて回答不能。
それぞれのフォームのレコードソースのフィールド構成、主キー設定、
サブフォームのリンク親フィールド、リンク子フィールドの設定などを、
詳細に説明してください。
「子2のフィールドを追加できません」というのは、デザインビューでフィールドが追加できないという意味ですか。
いつもお世話になります
レポートのレコードソースを取得する方法を教えていただきましたが
DoCmd.OutputTo acReport, Me.Tag, acFormatXLS, では
現在出力しようとしているオブジェクトの型式は無効ですのエラーがでます
acReportを acOutputReportにしても acFormatXLS を acOutputXlsにしてもだめでした
acOutputReportではダメで acOutputTableでは出力されます
なぜでしょうか?
ちなみに ACCESS2007です
2007 Office スイート Service Pack でアップデートしなくてはだめなのでしょうか?
不具合が起きているのは特定のデータベースファイルですか。それとも、すべてのデータベースファイルですか。
新規に作成したデータベースファイルではどうでしょうか。
新規のデータベースファイルなら不具合が発生しないなら、新規ファイルに、問題のデータベースファイルからすべてのオブジェクトをインポートしてみたらどうなりますか。
すべてのファイルで発生するなら、Officeのアンインストール、再インストールを試すぐらいでしょうか。
症状は違いますが、下記でも不具合の相談がされています。ただ、まだ解決には至ってないようです。
Windows10UPdate後の不具合 - Microsoft コミュニティ
ごめんなさい
ここの掲示板の使い方がわからなく、プロフィールのつもりで書いてしまいました。
現状で困っているのは、最近のWindows10の更新で、ACCESSのVBEを開くと、画面が
真っ暗になったり、復元したりして使えない状態になるため、解決策を探しております。
お忙しいとは思いますが宜しくお願い致します。
具体的にどのような機能の追加を考えていますか。
VBAについての基本の学習はすんでますか。
Access=データベース作業向きソフト≠効率化ソフトじゃないでしょうか?
商品マスタにおける「価格」と「取引先の社名や支店名」は少し性格が異なりますね。
取引先は、取引先マスタというテーブルがあるはずなので(なければ作成すべき)、このマスターの設計をどうするかという話になります。
とりあえず、商品マスターにおける頻繁に変更のある「価格」をどのような設計にするかについて回答します。
方法としては主に2つ考えられます。
「商品マスター」と「商品価格履歴」に分割する
設計例
商品マスタ
商品コード 主キー
商品名
商品価格履歴
商品コード 主キー
商品サブコード 主キー
変更日
売上テーブル
売上ID 主キー
売上日
商品コード
商品サブコード ※入力時の最新のサブコードを自動入力
トランザクションテーブル(売上テーブル)に価格を格納する
商品マスタ
商品コード 主キー
商品名
価格
売上テーブル
売上ID 主キー
売上日
商品コード
価格 ※入力時の最新の価格を自動入力
あくまで1例です。
サブデータシートがご希望のイメージに近いものかも。
フォーム上にデータシートとサブデータシートを表示する - もう一度学ぶMS-Access
別のフォームを開くのなら、
DoCmd.OpenForm の引数でキーフィールドの抽出条件を設定すればいいでしょう。
hatenaさま ありがとうございます
勉強不足ですみませんでした
acReport, Me.Tag をそのまま使えばよかったのですね
難しく考えすぎていました OutputTo で対応いたします
本当にありがとうございました
F_PreViewChildMenu のTagプロパティにレポート名が格納されている仕様になってます。
よって下記のようなコードで共通に使えます。
レポートのレコードソースがテーブルかクエリなら、DoCmd.TransferSpreadsheet が使えます。
わさわざ質問のような面倒なコードを使う必要性はないです。
その場合も、レポート名は、Me.Tagで取得できます。
ただし、レポートを開く時にフィルターをかけていたり、並べ替えを設定していたりすると、それが反映されないので、それを反映させたい場合はまた、面倒なことになります。
hatenaさま お返事ありがとうございます
hatenaさまの「F_PreViewChildMenu」のフォームはありとあらゆるレポートの出力に利用させてもらっています
そのため OutputTo acReport ”レポート名” では 「F_PreViewChildMenu-1」 「F_PreViewChildMenu-2」といったように その特定のレポートごとにフォームを作らなくてはなりません、なので現在ひらいているレポートのレコードを取りたかったのです
りんごさま お返事ありがとうございます EXCELはACCESSで加工されたデータを、その時だけに必要な集計表や煩雑なレポートを作成するために利用しております
CurrentDb.QueryDefs(Me.RecordSource).SQL ありがとうございます フォーム上でのエクスポート設定を読んで勉強させていただきます
ありがとうございます
OutputToメソッドやTransferSpreadsheetメソッドでは駄目なのでしょうか?中には非推奨とするサイトもあるようですが、鵜呑みにせずに本当に駄目なのか慎重に判断でましょう。
コーディングの是非もありますが、Excelエクスポートの是非も気になります。そもそも、AccessとExcelの業務連携の必要性、何の為にAccessを導入しているのかと。
参考にするなら、下記サイトなんかはどうでしょう?
CurrentDb.QueryDefs(Me.RecordSource).SQL
ブログのコメント欄でも書きましたが、OutputToメソッドを使えば1行で済みますが、それではうまくいかなかったのでしょうか。
Q_案件 で一対多関係の多側のレコードのみ削除されて、一側のレコードは残っているということかも、と推測。
Q_案件 のSQLを提示してもらえますか。
hatenas様
解決しました。
ご助言いただきありがとうございます。
>> 9
>> 11
「選択クエリを直接開いて、レコードを1行手動で選択してDELETEした瞬間、一瞬画面がチラつき直ちに、削除したはずのレコードが復活した」という事ですが、「選択クエリを直接開いて、とあるレコードのフィールドを選択して値の変更を試した」結果は、どうなったのでしょう?慎重に確認するのであれば、クエリを直接開いてレコードを編集したら、テーブルも開いて確認します。
もうひとつ当て推量です。フォーム上に案件NO、売区、得意先IDなどのフィールドがあると思いますが、どれかに何かのイベントを設定していませんか?もし該当するものがあれば、フィールドに設定したイベントを全部offにしてみて下さい。
その上で、削除から一瞬で復活するか結果を教えて下さい。復活しなくなった場合、offにしたイベントのコードを保守義務に差し支えない範囲で、全部コピペして教えて下さい。
ググっていたら、こんなのがありました。下の方にスクロールすると、とある回答者がコード化したようです。内容の正しさまでは私にはわかりませんでした。他の人の意見も聞いて下さい。
一時的にONして確認しましたが、エラーは出てきませんでした。
もう少し詳しい情報が欲しいですね。
まず、データベースファイルはデータとそれ以外で分割していましたか。
データが丸ごと消えたとは、テーブルのデータ件数が0件になった、テーブルごと消えた、データベースファイルごと消えた、、、、どれでしょうか。
qd のパラメータを設定したのですから、qdをOpenRecordsetしてください。
参考になるか分かりませんがACCESS+SharePointの環境で
テーブルのレコードを選んで削除→消える
選択クエリ(結合なしで抽出条件だけ)のレコードを選んで削除→クエリ上では消える、テーブルでは消えず、クエリを開きなおすとデータが消えていない
というのは経験したことがあります
深く検証する状況になかったのでこれ以上のことはわかりませんが、基本に立ち戻って最小構成のテスト用DBからどの状況でその現象が発生するのか確認したらいいと思いますよ
ご回答ありがとうございます。
Q_案件にてレコード削除した際も同じ現象が起きました。
一度削除される(削除しますか?のポップアップ⇒はいで、レコードが見えなくなる)のあとに更新ボタンを押すと復活していました。
フォームのレコードソースに、Q_案件 というクエリが設定されいるということですか。
このQ_案件を直接開いてレコード削除したときは、削除できますか。
また、データの更新はできますか。
結合することで、削除したものが復活するということはありえません。
結合や主キーの設定が間違っていると更新できない(当然削除もできない)クエリになることはあります。
例えば、セルを編集してセにしたい。
セルのルを消したのに、うっかりESCキー押してしまい復活しちゃった。
これに近い事が起きていませんか?当て推量ですが、何某かのイベントが発動して、編集が確定されずにキャンセルされているとか。
エラーメッセージの表示設定を一時的にONにして、リレーションシップの連鎖削除が原因と出てくるか試してみましたか?(フォームで削除出来ないものが、テーブルで直接削除出来るとは考えにくいんですが、念のため確認して下さい。)
名前が変わってました…どんぐりず=風(質問者)です。
この修正について社内で後回しにしており、改めての質問になり申し訳ありません。
リレーションシップで、T_案件が「一対多」の「多」側になっていることがあります。そこで連鎖削除等の3つのチェックボックス全てにチェックを入れているのが問題でしょうか…?勝手な推測で失礼いたします。
これで削除はできませんでした。(一旦できるのですが、更新すると復活する)
色々と入り組んでいてどこまで説明すれば良いのかわからないのですが
F_案件の元データがQ_案件で
キーとなる「案件NO」からQ_案件で
「T_案件リンク」と「Q_サブ保守」に結合しています。
その他キー以外の
「売区」から「T_売区」
「得意先ID」から「Q_得意先」に結合しています。
色んな所と繋がっているので、削除しても復活してしまうのかと考えています。
全体的にボリュームのあるデータなので全て説明するのが難しく
適当な情報をピックアップしてしまい申し訳ありません。
リレーションシップは昔組んでいたらうまく行かない所があって
中途半端に組んでしまっています。
全部のテーブルを入れて、きちんと組むべきでしょうか。