みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつも助けていただき、ありがとうございます。 またまたお世話になります。 FM10, Win7 環境です。
会員情報を修正した際、念のため修正前情報も保存しておきたい、という程度のリクエストです。
修正時に、修正年月日はタイムスタンプで自動記録させ、修正内容は「住所変更」等、備考程度のテキストフィールドを設け、
たまに必要が生じて過去の時点での情報を確認したくなったときに引っ張り出してきて見られればよい、という程度なのですが、
どのような仕組みにしておいたらよいでしょうか。
オリジナルサイトの過去ログ 「 [26016] フィールドごとに修正履歴を取りたい 」
http://www.russ.jp/stepbbs/step.cgi?mode=view&no=26016
を拝見し、Hiro様のサンプルファイルもダウンロードして拝見しましたが
当方の内容はフィールド数が200を越えるのと、これほど厳密な記録の必要性はないので、
[26019]のところでの Shin様のご提案のほうが合うかと思われました。
イメージとしては 既存のデータは閲覧用テーブルとして入力不可にしておいて、
閲覧用テーブルで 「修正」ボタンを押すと レコード複製して入力用テーブルにインポート →
入力用テーブルで 上書き修正後 「保存」ボタンを押すと タイムスタンプとアカウント名を保存してから閲覧用テーブルにインポート、
といった感じでしょうか。
となると 閲覧用テーブルは開くときに同一個人IDのうちタイムスタンプが最新のもののみを表示するように仕掛けが必要ですよね。
過去データとなった分はまた別の履歴保存用テーブルに移しておくとよいでしょうか。
ちなみにデータ件数ですが、登録件数は人数としてはおそらく2000人分くらいです(データ作成中のため見込み数字です)。
住所変更などでの修正だけでなく、任期2年の役員担当やその他の参加活動履歴などの記録もあるので、
1年間に修正されるデータ件数は 500件くらい??か、多くても1,000件はいかないと思われます。
…といった状況ですが、オススメの方法をアドバイスいただけますでしょうか。 宜しくお願いいたします。
Offline
入力用テーブルを使うなら、レコード複製は不要でしょう。
複製するならそのまま編集で
>タイムスタンプが最新のもののみを表示する
個人IDとタイムスタンプ>タイムスタンプで自己リレーションして、Count(::個人ID)=0を使ってアクセス制限する
IDをユニークに制限できなくなるのが気持ち悪いんで、やっぱり履歴は別テーブルにすべき?
tim様 ありがとうございます。 脳内整理段階のまま、自分も中断してしまっていました。
入力用テーブルを使うなら、レコード複製は不要でしょう。
複製するならそのまま編集で
ご指摘を眺めていて、勘違いに気づきました。インポートしても元のテーブルからは消えないのでしたね。
閲覧分を誤って加工されたくないので入力防止のため、複製はなしで、やはりテーブルは分けようと思います。
>タイムスタンプが最新のもののみを表示する
個人IDとタイムスタンプ>タイムスタンプで自己リレーションして、Count(::個人ID)=0を使ってアクセス制限するIDをユニークに制限できなくなるのが気持ち悪いんで、やっぱり履歴は別テーブルにすべき?
IDはユニークが望ましいですよね。そしたら入力テーブルで「保存」ボタンを押したら、
個人IDのコピーをとって「閲覧テーブル」で検索して「履歴テーブル」にインポート、
その後「入力テーブル」に戻ってまた個人IDで検索して「閲覧テーブル」にインポート…
こういうときの検索に「関連レコードへ移動」を使ったらよいのでしょうか?
あれ?あらかじめ既存分を入力テーブルに入れておいて、新規としてインポートしていけば
入力テーブルに履歴が残りますよね。
そしたら 閲覧テーブルにインポートする際に上書きさせて、履歴テーブルは不要かも?
入力テーブルにインポートしたあとに当該レコードを表示させるにはシリアル最大値を条件にしたらいけそうかも??
そしたら 作業記録用にタイムスタンプの記録はしようと思いますが リレーションは個人IDのみでOKでしょうか?
だいぶシンプルになりそうな気配♪
Offline
上記の内容を手作業で実行してみたところ、イメージ通りにできたのでスクリプトに組んでみたのですが、
検索の途中で停止してしまい、今はお試しでステータスエリアを表示していたので(実際は非表示にします)
検索実行をクリックしたところ「検索条件に有効なものがありません」となり、インポートはされないままレイアウトだけ切り替わって終わりました。
修正方法を教えていただけますでしょうか。
検索の仕方に変数を用いるのでしょうか?変数を使ったことがなくてヘルプなどを見てもわからないでおります。
◆閲覧テーブルの「名簿」レイアウトで開いたレコードを入力テーブルの入力用」レイアウトで修正するための「修正」ボタン用のスクリプト:
検索実行[記憶する] // 検索条件の指定→名簿::個人ID==
スクリプト実行[閲覧→入力インポート]// 入力テーブルで閲覧テーブルからインポートのみのスクリプト
レイアウト切り替え[「入力」(入力テーブル)]
ちなみに
◆入力テーブルの「入力」レイアウトで上記でインポートしたものに上書きしたあと
閲覧テーブルにインポートするための「保存」ボタン用のスクリプトは下記で成功しました:
スクリプト実行[入力→閲覧インポート]// 閲覧テーブルで入力テーブルからインポートのみのスクリプト
レイアウト切り替え[「名簿」(閲覧テーブル)]
Offline
記憶するのは嫌いなので別の方法
フィールドへ移動[名簿::個人ID]
検索モードに切り替え[]
直前のレコードから挿入[名簿::個人ID]
検索実行[]
FM12なら「一致するレコードを検索」だけでいいんだけど
閲覧テーブルにインポートするときも、現在のレコードのみ検索するようにしてますか。
対象レコードの変更できない状態なら大丈夫かもしれないけど
tim様 ありがとうございました!! 上記に書き換えてできました!!
記憶するのは嫌いなので別の方法
便乗質問になりますが、記憶する・しないの好き嫌いには動作上の理由があるのでしょうか?
FM12なら「一致するレコードを検索」だけでいいんだけど
やはり便利に進化しているのですね…でも、ちまちまつなぎ合わせて旧バージョンでも対応できるところ、FM好きです。
閲覧テーブルにインポートするときも、現在のレコードのみ検索するようにしてますか。
対象レコードの変更できない状態なら大丈夫かもしれないけど
いえ、#4 に書いた内容ですべてでした。
気になってはいたのですが、インポートされた1件のみで表示されて(対象レコードとして1件のみ)いたので、
そのまま入力作業をして「保存」ボタンを押してくれれば大丈夫かとドキドキしながら何もしないでいましたが
…そしたら 「保存」ボタン用のほうはまず 1件に確実に絞り込む手順を追加して
レコードを対象外にする
対象外のみを表示する
スクリプト実行[入力→閲覧インポート]// 閲覧テーブルで入力テーブルからインポートのみのスクリプト
レイアウト切り替え[「名簿」(閲覧テーブル)]
としたらよいでしょうか?
あれ? 対象外にして 対象外のみ表示 というのは、最初に閲覧用で修正したいのを1件にするときにも
1件だけを検索する代わりに用いても同じこと??
Offline
記憶すると、スクリプトエディタで見た時に(一々設定画面を開かないと)何を検索してるのかわからないから。
あと、設定画面がわかりづらくて人に説明するのがめんどくさい。
わかってる人が使う分には問題ないというか、逆にさっきのような手順だと検索するフィールドがレイアウトにないと「挿入」できないとか別の問題が隠れてたりします。
対象外を使うのは最初に「全レコードを表示」しないといけないので、あんまり効率良くないです。
IDで検索するか、IDで自己リレーションして関連レコードへ移動すればいいのでは。
入力テーブルは、IDといっても個人IDだと重複してるのでレコードIDでないとだめですか。
tim様 ご丁寧にありがとうございました。
やりたかったことができてスッキリの上に、中身もじっくり 自分の思いつきの問題点も解決できて充足感いっぱいで感謝です!
対象外を使うのは最初に「全レコードを表示」しないといけないので、あんまり効率良くないです。
全レコード表示が必要、というのをよそのやりとりでも目にしていた記憶はありますが、自分の必要に迫られてようやく
こういうことだったのか、と理解できました。つたないつまづきにひとつひとつ本当にありがとうございました。
Offline
Pages: 1
[ Generated in 0.009 seconds, 7 queries executed - Memory usage: 545.77 KiB (Peak: 566.67 KiB) ]