
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
>テーブル内の一番大きいシリアル番号を求め、新規テーブルのシリアル番号に「最大シリアル番号 + 1」にしたい。
途中削除したシリアル番号は欠番のままでよい。
「新規レコード作成、今作成したレコードを削除」と連続操作したとき、新しいシリアル番号が生成されてしまうのを防ぎたい。
結論から言って、シリアル番号(以下「SN」と略)の自動入力による全置換も併用し、なおかつ削除レコードのSNは欠番のままでよい、というご希望なら、削除レコード以降のレコードのみを対象として全置換でSNを振り直すしかありません。
なぜならば削除後全レコードを対象にSNを振り直せば、削除分のSNは必ず削除分の次のレコードで穴埋めされるからです。
だから、レコードの新規作成、削除を頻繁に行うなら自動入力はあきらめて、その都度手入力するしかないと思います。
>テーブル内のシリアルの最大値の求め方もわかりません。
SNフィールドなど数値フィールドの最大値(MAX)を求めるのは、例えば「MAXSN」等新規フィールドを作り、タイプは「集計」にしてオプションで最大値にチェックし、SNを指定してOKすれば全レコードSMの最大値は出ます。
だからそのフィールドを画面のどこかに出しておいて、新規レコードを作成したときその数+1の数値をSNフィールドに手入力する方がよいでしょう。
これをまた別に計算フィールドを作って「=MAXSN+1」などと式を設けても、それをSNフィールドにCopy&Pasteするならともかく、自動的に入力しようとすれば再帰定義を起こすので、式自体が定義出来ません。
またレコード数がどれくらいあるか分かりませんが、仮に10万台としてもコピペするぐらいなら手入力が早いでしょう。
そもそも全レコードを増分1で自動入力して、しかも欠番OKというのは論理矛盾です。
一つ理解できないのは、現レコード数以外に必要というMAX番号とはどういう目的・性質のものでしょうか。
削除してもそれまでに一旦データ化したレコードの総数をどこかに記録して置きたいということでしょうか。でないと欠番OKの意味も分かりません。
残念ながら私の知識では、削除→欠番OK、かつMAX番号自動入力という矛盾した作業は、Excelならマクロで可能かも知れませんが、ファイルメーカーでは不可能というしかありません。
アドバイスありがとうございます。
> 一つ理解できないのは、現レコード数以外に必要というMAX番号とはどういう目的・性質のものでしょうか。
このソフトを使用している方からの希望です。
> 削除してもそれまでに一旦データ化したレコードの総数をどこかに記録して置きたいということでしょうか。でないと欠番OKの意味も分かりません。
レコードの総数を記録しておきたいのではありません。
本来DBでは「削除」せず、削除フラグなどを利用し
削除したように見せかけるのが一般的です。
しかし、このソフトを実際使っている方々は
「以前のデータなんて要らない」という考えなのです。
(というとDBの役割はって感じなのですが)
こういった流れから「欠番OK」ということになっています。
仕様自体を考え直してみたいと思います。
今のところ自己リレーションを使用しできました。
しかし、私の中でもっと簡単なやり方があるのでは
と今も考え中です。

No.7
- 回答日時:
今、出先なのでFM7で確認できませんが、それ以前のバージョンにはMAX関数というのがありました。
ですのでFM7にも同じ名前か、同じ機能の関数があるはずです。
後は以下を参考にしてみてください。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=111972
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=111972
No.6
- 回答日時:
NO.1 の回答者です。
ファイルメーカー4.0を使っています。
フィールド定義についての御質問にお答えします。
1.最終レコードを削除してしまった。
2.次の新規レコードを作成する前にファイルからフィールド定義を立ち上げます。
3.シリアル番号をふってあるフィールドを選択。
4.オプションボタンを押して中身を立ち上げる。
5.「次の値」という番号に、削除してしまった最終レコードの番号を入力し直す。
6.保存をする。
7.新規レコードを作成してみると、削除してしまった最終レコードの番号になる。
と、いうわけです。
面倒ではありますが…。
No.5
- 回答日時:
私の回答の意味を取り違えてらっしゃるようですね。
私はまず、TODAY関数によって必ずデータが入る「作成日」というフィールドを作り、別に例えば「シリアルナンバー」というフィールドを設けてそのタイプを「集計」にし、オプションをクリックして「カウント」と「現在のカウント」にチェックを入れることによって、最初のレコードから選択したレコードまでの「作成日」フィールドの個数をカウントし、それによってレコードが現在何番目にあるかということを表すということを言っている訳ですから、この数値が重複するなんてことは絶対にあり得ません。
フィールド内容の全置換のダイアログボックスでいうシリアルナンバー(初期値1、増分1という)とは全く意味が違うのです。
だからレコードがNO1から5まであるとすれば、NO3のレコードを削除して新たにレコードを追加するなら、当然今までのNO4のレコードはNO3に、NO5のレコードはNO4にそれぞれ繰り上がり、新しいレコードがNO5になる訳で、コンピューターが計算間違いをしない限り「シリアルナンバー」フィールドの値が重複するなんてことがあり得る筈がありません。
ただこの番号(数値)はステータスエリアの番号と常に一致する訳ですから、新たに設ける必要があるかどうかということをNo.4でお尋ねしている訳です。
ついでにちょっと訂正しておきますが、作成日フィールドをTODAY関数にしていましたが、TODAY関数では常にその日の日付に更新されますから、それでなく、フィールド定義のオプション画面の入力値の自動化にチェックを入れ、「作成日」を選択した方がレコード作成日も記録されるので画面に表示する意味もあり、よりベターだと考えます。
この回答への補足
#3で回答いただいた内容を取り違えて理解していました。
せっかく回答していただいたのに本当にすみません。
#5の方法を試してみました。
回答どおりの動作をしました。
ありがとうございます。
しかし、実現したい動作とは違います。
テーブル内の一番大きいシリアル番号を求め、
新規テーブルのシリアル番号に「最大シリアル番号 + 1」
にしたいのです。
途中削除したシリアル番号は欠番のままでよいのですが、
「新規レコード作成、今作成したレコードを削除」
と連続操作したとき、新しいシリアル番号が
生成されてしまうのを防ぎたいのです。
テーブル内のシリアルの最大値の求め方もわかりません。
いろいろ調べているのですが、なかなかわからなくて。
実現したい動作の説明が足らなくて本当にすみません。
No.4
- 回答日時:
No.3 zenjeeです。
一つ言い忘れていましたが、No.3で私が説明したような意味でのシリアル番号なら、左のステータスエリア(日めくりカレンダーのようなもの)に全レコード数と現在レコードの順番が必ず表示されるので、別にシリアルナンバーフィールドを設ける必要もないような気がしますが、いかがでしょうか。
もし私がご質問の意味を取り違えたのなら、よければ補足説明をお願いします。
ありがとうございます。
早速試してみました。
しかし、この方法ですとシリアルが重複してしまいます。
例えば「1、2、3、4、5」とシリアル番号があって、
シリアル番号3のレコードを削除し、
新規レコードを追加すると、シリアル番号は「5」となってしまいます。
シリアル番号はユニークとしたいのですが。
既存のMax(シリアル番号)+1 をとりたいのですが、
どうやったらよいかわかりません。
何か良い方法がありましたらアドバイスよろしくお願いします。
No.3
- 回答日時:
こういう方法はいかがでしょうか。
ウインドウに表示しないフィールド1個とシリアル番号が表示されるフィールドを1個作ります。
非表示のフィールド名は、例えば「作成日」としてタイプは計算、式は「=TODAY」とします。
次にシリアルナンバーのフィールドです。
名称は例えば「シリアルナンバー」とし、タイプは集計です。
オプションをクリックすると『集計フィールド「シリアルナンバーのオプション』というダイアログボックスが現れますので、左側の「カウント」と下の「現在のカウント」にチェックを入れOKをクリックします。
レイアウトモードに戻り、「シリアルナンバー」フィールドを画面に表示します。
するとデータの順に応じた番号(数値)が常に表示されます。データを追加・削除しても常に「作成日」フィールドの個数(COUNT)が反映されますから、シリアルナンバーとしての機能が果たされる訳です。
なお、「作成日」フィールドは表示しても特に支障がある訳ではありませんし、何らかの役に立つ場合があるかも知れません。
要するにどこかのフィールドには必ず何らかのデータが入っている(特定のフィールドが空白ということがない)と仮定すれば、別にこのフィールドを作る必要はなく、それをカウントすればいい訳で、そうでない可能性もあるかから、TODAY関数で必ずデータが入る非表示のフィールドを作り、その現在カウント数(順番)をシリアルナンバーとして活用する訳です。
No.2
- 回答日時:
私は5.5です。
あるフィールドの最大値に1足したものを同じフィールドに自動入力
しようとすると、再帰定義でエラーになりますね。
レコードの追加や削除をスクリプト経由で行なう仕様にしておい
て、スクリプトの中で数値フィールドに「計算結果を入力」で最大
値を格納するようにすれば、自動入力は単なる数値フィールドを参
照するだけになるから、出来るかも。でも面倒くさそう…
回答ありがとうございます。
今のところ、ショートカットでレコードの新規作成・削除
ができることを前提として考えています。
どちらにしても面倒な作業になりそうなんですかね・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 教育ソフト・学習ソフト マイクロソフトのシリアル番号と自分のアカウント解除 2 2023/07/19 08:27
- 格安スマホ・SIMフリースマホ 「IMEI」(識別番号、シリアル番号)でネットワーク利用制限が掛かってるか わかりますか? 4 2023/03/03 22:53
- その他(プログラミング・Web制作) バッチファイルでPCのモデル名を取得したい 1 2022/03/31 10:58
- CPU・メモリ・マザーボード マザーボードのシリアル番号 2 2023/06/01 11:24
- その他(ソフトウェア) いきなりPDFをメルカリで売りたい 1 2023/03/04 10:05
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- バッグ・財布 こちらのバックはなんていう物ですか?シリアル番号あり教えてください 1 2022/06/11 21:32
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- Amazon Amazonの配送先住所入力の自動入力機能が作動しなくなりました。 2 2022/10/06 08:58
- Windows 10 新規PC導入して、うっかりマイクロソフトアカウントも新規登録してしまった時の復帰方法 3 2022/06/12 16:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
差込印刷で顧客別に複数行のデ...
-
ラベルをクリックしてレコード...
-
Accessのレポートの集計に条件...
-
ACCESSでオフセットを求める方法
-
ACCESS入力でのバッティングに...
-
ACCESSのフォームで次のレコー...
-
ファイルメーカーの重複レコード
-
ADOで現在のレコードの次のレコ...
-
FileMaker起動時に前回終了時の...
-
インポートの際データが重複し...
-
Accessで最終レコードの削除に...
-
関連レコードへの移動と関連レ...
-
「ファイルメーカー」で宛先の...
-
ACCESSのレコード操作で1つ前...
-
ファイルメーカーで検索条件の...
-
accessのマクロで「一時変数設定」
-
ファイルメーカーで #N/A の...
-
Wordの差し込み印刷機能について
-
日付の加算・減算ってできますか?
-
PSQLで-- More --を表示しない方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
差込印刷で顧客別に複数行のデ...
-
ACCESSのフォームで次のレコー...
-
Accessのレポートの集計に条件...
-
PSQLで-- More --を表示しない方法
-
ファイルメーカーで一括入力す...
-
日付の加算・減算ってできますか?
-
ファイルメーカー印刷時の改ページ
-
ADOで現在のレコードの次のレコ...
-
ファイルメーカーで該当件数を...
-
ファイルメーカーで最大シリア...
-
アクセスデータベースのUnicode...
-
ファイルメーカーでレコード複...
-
accessのマクロで「一時変数設定」
-
ACCESSでオフセットを求める方法
-
ラベルをクリックしてレコード...
-
ACCESSのレコード操作で1つ前...
-
Docmd.Findrecordで空白の検索方法
-
アクセスでのエクセルでいう行...
-
ファイルメーカーでレコード複...
-
ファイルメーカープロでレコー...
おすすめ情報