ACCESS初心者です。
ACCESS2000でフォームで既存レコードのどこかを更新したら、
(1)変更する前のデータをテーブル?で保存していきたい。(変更されたデータの過去分のデータをどんどん残していく。上書きはしない)&表示できれば尚うれしい。
(2)データを更新した日時も(1)と同じテーブルに書き込みたい。(こちらも(1)同様表示できれば尚うれしい)のです。
この作業はアクセスでできる?!と思っているのですが、
どなたかご教授頂ける方、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (7件)

思いつくままコードを書いていた為、いろいろとご迷惑をおかけしてすいません。

m(_ _)m

で、履歴を表示する第三のサブフォーム名を仮に[SF_履歴]と致します。

更新後の処理で

Forms("メイン").Requery

と記述している部分を

Forms("メイン").Form.SF_履歴.Requery

と、修正してください。
これでやっと完成のはず・・・・・・(^ ^;
    • good
    • 0
この回答へのお礼

Wapato3さん、本当に本当にありがとうございましたm(__)m
完成です!(T_T)!(^○^)!
やさしく丁寧に教えていただいて、ACCESS初心者の私が無事目的を達成することができました。
ありがとうございました。
この先、待ち受ける(!?)問題があった時は、投稿します。こんなに丁寧に教えて頂けるなんて・・・!感動です(T_T)!
その時にも、同様ご教授よろしくお願いします。(@_@)m(__)m

お礼日時:2001/11/11 21:25

あっ、本当だ(^ ^)。

再現しました。
再現してちょっとうれしいです。

以上はさておき、

>・更新前処理へ、=[History_Tantou]
>・更新後処理へ、=[Forms]("メイン").[Requery]

これらを「=~」の形(式ビルダ)ではなく、更新前・更新後のコードビルダより直接コードとして

Private Sub Form_BeforeUpdate(Cancel As Integer)
  History_Tantou
End Sub

Private Sub Form_AfterUpdate()
  Forms("メイン").Requery
End Sub

と、記述してください。(juuyouフォームにも同様に)
さすれば解決いたしやす。(^ ^)

>form_jyuuyou、form_tantou、form_メインという3つができていました。

それぞれ、「プロシージャが記述されましたよ」と教えてくれている様なものです。詳しくは違うと思いますが・・・・(^ ^;

この回答への補足

早速のお返事ありがとうございます。でっ、でっ、できました(^o^)丿。(T_T)しかし、(メインフォームから)例えば、顧客コードで2件目のデータを処理する時、担当者のサブフォームに更新を加え、その後重要人物のサブフォームへ移動して更新を加えようとクリックすると、(表示が)必ず顧客コードで1件目のレコードへ戻ってしまいます。(@_@)顧客コードで2件目のデータを更新している時は、2件目のデータのままでいてほしいのですが。。どうにかなりますでしょうか?

補足日時:2001/11/11 10:44
    • good
    • 0

klubサンのおっしゃる通り



If NZ(Ctr.OldValue,"")<> NZ(Ctr.Value,"") Then
の方がいいですね(^ ^)

また、フィールド名を履歴として残すなら

Ctr.Name
  ↓
Ctr.ControlSource

の方が良かったですね。
Ctr.Nameだとフィールド名とテキストボックス名が異なると、ちょっと困ってしまいますので・・・・

ご助言ありがとうございました。m(_ _)m

この回答への補足

Watapo3とklubさんありがとうございます。お二方に言われたとおりにしたところ、履歴が取れるようになりました!ただ言われた通りにしたつもりなのですが、なぜか履歴が必ず3つづつ取れてしまいます(T_T)。どこが悪いのでしょうか?下記の通りにしました。
まず、担当者フォームのイベントビルドのコードビルダへは、
Sub History_Tantou()

Dim Ctr As Control
Dim strSQL As String

For Each Ctr In Me.Controls
If Ctr.ControlType = 109 Then
If Nz(Ctr.OldValue, "") <> Nz(Ctr.Value, "") Then
strSQL = "insert into 履歴 values('担当者'," & Me.顧客コード & _
",'" & Ctr.ControlSource & "','" & Ctr.OldValue & "',#" & Now() & "#)"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
End If
End If
Next Ctr
End Sub

・更新前処理へ、=[History_Tantou]
・更新後処理へ、=[Forms]("メイン").[Requery]

重要人物フォームのイベントビルドのコードビルダへは、
Sub History_jyuuyou()

Dim Ctr As Control
Dim strSQL As String

For Each Ctr In Me.Controls
If Ctr.ControlType = 109 Then
If Ctr.OldValue <> Ctr.Value Then
strSQL = "insert into 履歴 values('重要人物'," & Me.顧客コード & _
",'" & Ctr.ControlSource & "','" & Ctr.OldValue & "',#" & Now() & "#)"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
End If
End If
Next Ctr
End Sub

・更新前処理へ、=[History_jyuuyou]
・更新後処理へ、=[Forms]("メイン").[Requery]

悪いところが見当もつきません。なので、他に何をお知らせすれば良いのかもわかりません。気になったのは、イベントビルドを書き込むと、左側にmicrosoft accessクラスオブジェクトというのがあると思うのですが、その下に、
form_jyuuyou、form_tantou、form_メインという3つができていました。あと、何かお知らせしたほうが良いことがありましたらご連絡ください。度々申し訳ありません。よろしくお願い申し上げますm(__)m

補足日時:2001/11/10 15:22
    • good
    • 0

Watapo3さんにちょっと補足です。


多分コードが複雑になるため、記述しなかったのだと思いますが、元々入力されていないフィールドに更新したり、入力済みのフィールドをクリアしたりすると、正しく判定されなくなります。(nullの判定文は全てがFalseになるため)下記の様にした方が良いのではないでしょうか?

If NZ(Ctr.OldValue,"")<> NZ(Ctr.Value,"") Then

では
    • good
    • 0

えぇまず、履歴用のテーブルを作ります。

フィールドは次の通り。

・テーブル名(テキスト型)
・顧客ID(数値型)
・フィールド名(テキスト型)
・履歴(テキスト型)
・更新時間(日付/時刻型)

以上でOKです。

で、次にサブフォーム1に次のコードを作ります。

Sub History_Tantou()

 Dim Ctr As Control
 Dim strSQL As String

 For Each Ctr In Me.Controls
  If Ctr.ControlType = 109 Then
   If Ctr.OldValue <> Ctr.Value Then
    strSQL = "insert into 履歴 values('担当者'," & Me.顧客コード & _
      ",'" & Ctr.Name & "','" & Ctr.OldValue & "',#" & Now() & "#)"
   DoCmd.SetWarnings False
   DoCmd.RunSQL strSQL
   DoCmd.SetWarnings True
   End If
  End If
 Next Ctr
End Sub

で、その次は、サブフォーム1の更新前の処理として上記の

History_Tantou

を実行。
最後に、更新後の処理として

Forms("メインフォーム名").Requery

でサブフォーム1の準備は完了です。

サブフォーム2については、History_Juuyouとでもして、「担当者」→「重要人物」に変更してください。その他は同じで結構です。

最後にサブフォーム3(冒頭に作成した履歴テーブルをレコードソースに)を作成、親-子で顧客IDをキーにすれば履歴がサブフォームで見られるはずです。

一応テストはしてみました。正常に動作しましたが、文書では判りにくいことがあるかもしれませんのでご不明の点がございましたら補足要求してください。

なお、標準モジュールで一つにまとめた方が良いかもしれませんが、サブフォーム名不明のため個別に書いてみました。

では、頑張って下さい。
    • good
    • 0

できま~す!



1つパターンを説明します。

A、B、CというフィールドがあるテーブルXがあるとします。
またXと同じフィールドを持ち変更日時を持つテーブルZを作成します。

テーブルXが更新されると内容を変更時点の日時と共にテーブルZに追加クエリーなどで書き込む。

フォーム上の更新後プロパティで動かせばOKです。

でもこの場合既に「東京」と入っているところに上書きで「東京」と同じ値を入力しても更新後になるので、見た目同じでも更新後プロパティは動いてしまいます。

まだ方法はありますが、できるという報告まで。
    • good
    • 0

以下に示すように何種類かパターンが考えられますが全て実現可能だと思います。



1)履歴を残したいフィールドは決まっており、他のフィールドの変更は履歴として残しておかなくても良い。
2)変更されたフィールドは全て確認したく、変更されたフィールド名と共に履歴を残したい。
3)何れかのフィールドが変更されたら、変更されなかった全てのフィールドを含め履歴として残したい。

以上のどれがご要望かを補足していただければサンプルコードを返答いたします。(フィールド名等わかれば尚可)

この回答への補足

お答えありがとうございます。1-3のどれに該当するかですが、2にあたると思われます。(難しいようであれば3でも。)お言葉に甘えて実情を申し上げます。アクセスを利用して顧客情報を処理しようとしています。まず、本社情報フォーム(顧客コード・会社名・代表者名・等々)その中の顧客コードをキーにサブフォーム1として担当者情報(部署名・役職・氏名・等々)。サブフォーム2として重要人物情報(名前・部署・役職・等々)を表示するかたちです。それで、問題となる更新の履歴なのですが、サブフォーム1・2のどこかが変更された時に、変更されたフィールド名と共に履歴に残したいのです(日付と顧客コードも。必要であれば、テーブル名?フォーム名?も)。尚且つ、その更新の履歴をサブフォーム3として表示させたいのです。こんな状況なのですが、ご教授願えますでしょうかm(__)m

補足日時:2001/11/08 21:57
    • good
    • 0
この回答へのお礼

wtapo3さん、(no.164850でお世話になりました)先日は本当にありがとうございました。申し訳ありません。教えていただきたいことがあります。前回は、2)のパターンで教えていただいたのですが、3)のパターンにする必要性が出てきてしまいました。前回のやり取りの情報は残っていますでしょうか?ぜひとも教えてください。それからこの件の返答は、no.162393(11/3質問:ACCESSで更新履歴情報を保存(表示)する・・・)にお願いいたします。重ね重ねよろしくお願いいたします。

お礼日時:2001/11/17 20:33

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q警察は事件性が感じられない限り、搜索願いが出されてもあまり搜索などはしないのですか? 今回彼氏が原

警察は事件性が感じられない限り、搜索願いが出されてもあまり搜索などはしないのですか?

今回彼氏が原付の運転中に違反(初回)で警察に止められてしまい、その事がきっかけで、今年の六月に彼氏の弟から搜索願いが出されていることがわかりました。搜索願いが出されたのは隣の市内の警察署だったみたいです。彼氏は一月に今の住居に引っ越した時に市役所に住所登録にも行ってるのですが、六月から今まで特に警察の方から連絡はきたことはありませんでした。今は逆に、警察の方に彼氏の連絡先を教えて、彼氏の弟に連絡先を伝えてもらうようにお願いをしたのですが、そろそろ一週間が経とうとしてますが未だに連絡はありません。彼氏は長年連絡が取れなかった弟と連絡が取れるかもしれないとよろこんでいたので、できればそれが叶うといいのですが、私たちは待つしかできないのでしょうか(´;ω;`)警察について詳しい方いらっしゃったら教えて下さい。

Aベストアンサー

>警察の方に彼氏の連絡先を教えて、彼氏の弟に連絡先を伝えてもらうようにお願いをした
それであれば着手はしていると思います。
恐らく…
◎警察と彼氏の弟の間で連絡がつかない
◎警察と彼氏の弟の連絡は完了しているが、彼氏の弟が彼氏に連絡をしていない
理由の断定はできませんが、このどちらかの状態にあると思われます。

いずれにせよ、警察に経緯を確認することです。
場合によっては、逆に彼氏の弟の捜索願をだすことも考えてください。

Qaccess2010 フィールド名変更し別テーブル作成 教えてください。 既存テーブル:AAA 既存

access2010 フィールド名変更し別テーブル作成








教えてください。
既存テーブル:AAA
既存フィールド:あああ

新規テーブル:BBB
新規フィールド名:かかか

AAAのレコードを変えずにテーブル名、フィールド名を変え、別テーブルとし作成するクエリが作りたいです。

SQLの文をベタに教えて頂けるとありがたいです。よろしくお願いします。

Aベストアンサー

こちらの続きということで。
https://oshiete.goo.ne.jp/qa/9534989.html

テーブル作成クエリができているなら

フィールド名「あああ」のところを
「かかか: あああ」に変えれば OK。
フィールドを「*」にしていたらできない(と思う)。

Q内容証明を送って返金してもらったのですが・・・

オークションで振り込んだにも関わらず商品がきませんでした。

メール、電話をずっと拒否され最終的に内容証明を送り、やっと返金されたのですが、内容証明で内容証明代金も請求したにも関わらず、内容証明代金は振り込まれてませんでした。

振込み額が2000円と少額だったので、内容証明代金でかなり損をしてしまいます。

この場合、内容証明代金を請求できるのでしょうか?

Aベストアンサー

>内容証明代金を請求~
それは無理でしょう。
落札者側の判断で送った物であり落札商品の価格送料とは別物関係無いものです。

連絡発送は遅れただけ返金は出品者の好意によるもの、
発送の意思はあった、
本来なら返品には応じない、
(落札した<された>場合双方とも取引する義務があります。)
といわれた可能性もありました。
ヤフオク?などオークションには基本的に発送などの期限は無いですから。

電話をかけたから電話代を、メールを送ったから通信費を請求など同様無理な話です。

極端な話 発送が少々遅れたりしたら内容証明を送り代金を支払えと請求されてはたまりません。

今回も内容証明を送らなかったら返金されなかったかは微妙です。
結果的には内容証明の送付が効果があったのかも知れませんが。

>内容証明代金でかなり損をしてしまいます~
承知の上での対応では?
金額でなく連絡しない相手への対応策・詐欺などの場合の被害届け保証を受ける為の対策必要項目が内容証明の発送です。

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

Q【私の質問は内容がないと言われるのが悩み】 内容がある質問って何ですか? 不倫、浮気、うつ病、自殺し

【私の質問は内容がないと言われるのが悩み】

内容がある質問って何ですか?

不倫、浮気、うつ病、自殺したい、婚活相談が内容のある質問なのですか?


不倫、浮気されてますという相談は百歩譲って内容がある話としよう。

でも不倫、浮気してますという悩みの相談は私からしたらバカこいつ?と思えてしまう。

どう考えてもこいつらの方が内容がない質問だろう。

内容がある質問を教えて欲しい。

私の質問の方が不倫、浮気の相談より百倍価値がある質問だと思う。

Aベストアンサー

正解でないものに ベストアンサーを無理につけている。
正解がない時はクローズしましょう。

QACCESSの既存テーブルに、EXCELデータをレコードとして追加する事は可能ですか?

ACCESSの既存テーブルに、EXCELのデータをレコードとして追加する方法はありますか?
又は方法を説明しているサイト等ありましたら教えて下さい。

EXCELのデータは、シートの1行目に各項目名、2行目以降に各データが順次入力されている状態です。
尚、EXCELの項目名と、ACCESSのフィールド名は一致していない状態です。
例えば、
EXCELの項目名:「予約ID」、「予約名」、「予約日」
ACCESSのフィールド名:「rsv_id」、「rsv_name」、「rsv_date」
のような感じです。
ACCESSのフィールド「rsv_id」には、EXCELの「予約ID」項目のデータを入れなければいけません。
こういうことは出来るのでしょうか?

※マクロは使わないようにしたいです。

いったんACCESS上で、EXCELのデータを元に新規テーブルを作成してから、
その新規テーブルからデータを抽出して、既存テーブルにレコード追加するような、SQLを書けばできるでしょうか?

Aベストアンサー

1.Excelのデータを、Accessにインポートします。
2.クエリ/新規作成/デザインビュー、テーブルの表示で、1でインポートしたテーブル(T_Excelとします)を設定し、各フィールドをクエリのデザイングリッドにドラッグします。
3.ツールバーのクエリの種類で、追加クエリを指定すると、追加先のテーブルを訊いてくるので、既存テーブル(T_Access)を指定します。
4.レコードの追加欄に、対応する既存テーブルのフィールド名を指定します(選択肢が表示されますので、そこから選択します)
5.ツールバーの「!」アイコンをクリックするか、クエリを一旦保存・終了後、ダブルクリックして実行すると、レコードが追加されます。
SQLを表示させると、下記の様になりました。
INSERT INTO T_Access ( rsv_id, rsv_name, rsv_date )
SELECT T_Excel.予約ID, T_Excel.予約名, T_Excel.予約日
FROM T_Excel;

Q内容証明

内容証明の記載内容に誤りがありました。
この場合、内容証明としては無効でしょうか?
それとも、誤りがあった箇所のみ無効でしょうか?
教えてください。

Aベストアンサー

内容証明はそこに記載された文章が特定の日付に「記載された」ことを証明するだけで、内容自体の正誤については何ら主張も証明もしません。

なので、嘘を並べ立てたとしても、差出人がそのような内容を「記した」ことを示す内容証明としては有効ですし、逆に、事実が記載されていたところで内容自体に関して法的な拘束力などを持つわけではありません。

QAccess の同一テーブルで更新データを抽出したい

Accessでまったく同じテーブルが2つあるとします。フィールド数は40くらい。その各フィールドで一つでも更新のあったデータのみを抽出したいのですが簡単な方法を教えて下さい。因みに各フィールドにはNull値も含まれます。

Aベストアンサー

>まったく同じテーブルが2つあるとします。
両方を一度に更新するのであれば、無理です。
片方だけを更新するのであれば、1件ずつレコードを比べていくしかないのでは。
他に、簡単な方法は思いつきません。
テーブルやプログラムの構造を見直すことができるのであれば、他の方法をお勧めします。
・レコードを更新するのではなく、新規に同じようなレコードを追加する。
・テーブルに[最終更新日時]のようなフィールドを追加して、データの更新がある際は必ずそこを書き換えるようにするとか。
・データを更新する際には、必ずもとのレコードを更新前データとして他のテーブルに保存する。
など、VBAである程度の処理を行うことが前提となります。

実際の目的がわかれば、もう少し具体的なアイディアが出せるかと思います。

Q内容証明郵便を受け取りました

先週、内容証明郵便を受け取りました。
しかし日付等が嘘でした。
売却したとされるものの請求だったのですがその売却されたという日付に覚えがありません。
内容証明に嘘を書いた場合どうなるのでしょうか?

また、内容証明は『26行以内1行20文字以内』とされていますが
私に届いた内容証明は『20行以内1行26文字以内』で書かれていました。
この場合、内容証明として扱った郵便局のミスでしょうか???

Aベストアンサー

> 内容証明に嘘を書いた場合どうなるのでしょうか?

特にどうにもなりません ( ^^
内容証明は、いつどのような内容の文書が誰から誰へ差出したかを日本郵政が証明するものです。内容が事実かどうかは同社では一切関知しません。
内容証明の文字数制限等については下記を参照してください。

日本郵政のQ&A
http://www.post.japanpost.jp/question/77.html

ちなみに、一頁当りの字数・行数制限があるのは3通作成する内の差出人謄本、郵便局謄本のみで、受取人に送る分については特に制限はありません。
また、電子内容証明(パソコンのワープロソフト等からインターネットで送れます)の場合は文字の大きさ(ポイント数)と余白の制限のみです。

電子内容証明 ご利用方法
http://www3.hybridmail.jp/mpt/howtouse.html#2

QACCESS フォームのレコードを参照しながら別テーブルのデータ更新

ACCESSで部品の入庫と出庫を管理するデータベースを作成しています。
部品を出庫するフォームを作成したいです。

①製品テーブル
ID、製品名、品番
②製品構成テーブル
ID、部品コード
③出庫テーブル
出庫ID、部品コード、出庫数
④部品テーブル
部品コード、部品名、部品型番

以上の4つのテーブルがあります。
①と②はIDで結びついており、製品1つに対し、製品を構成する部品が複数登録されています。
部品コードは重複なしのデータです。

部品コード1つに対して出庫数を登録させるフォームはできました。
次に行いたいのは、ある製品の構成部品をすべて一括で出庫させるフォームを作成することです。
イメージとしては、ある製品の構成部品をずらりとフォームに表示させ、そのデータを参照しながらそれぞれの部品の出庫数を入力して登録、入力した出庫数が出庫テーブルに保存される、という感じです。

よろしくお願いいたします。

Aベストアンサー

失礼しました。

>その前段階の、出庫したい構成部品をずらりと⑤のテーブルに表示させる、という方法がわかりませんでした。

フォームのイメージは
http://hatenachips.blog34.fc2.com/blog-entry-129.html
のようなものを想定しています。

この例だと「抽出」のボタンでフィルタを実行していますが
ここで追加クエリを実行し②のデータをIDで絞り込み⑤にデータを追加させます。

フォームの値を抽出条件に指定する方法は下記などを参考にしてください。
https://support.microsoft.com/ja-jp/kb/881390

>”その中からさらに今回出庫する部品を複数選択し”がうまくいきませんでした。

あとは⑤のデータのうち出庫数に数字が入力されているデータのみを③に追加すれば終了です。

書き忘れていましたが間違って③に追加してしまった場合などは考慮していませんので
別途対策が必要になります。


人気Q&Aランキング

おすすめ情報