• 締切済み

ファイルメーカーで最大シリアル番号+1を自動入力

ファイルメーカーver7を使用しています。 自動シリアル番号の機能を利用してシリアル番号を振っているのですが、 新規レコードを作成して、その直後にレコード削除してと繰り返していると、 空のシリアル番号がどんどん作られてしまいます。 そこで、最大シリアル番号に1を足したものを 自動入力させたいのですが、どうしたらいいかわかりません。 どなたかアドバイスよろしくお願いします。

みんなの回答

  • zenjee
  • ベストアンサー率47% (50/106)
回答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ならマクロで可能かも知れませんが、ファイルメーカーでは不可能というしかありません。    

yura64
質問者

お礼

アドバイスありがとうございます。 > 一つ理解できないのは、現レコード数以外に必要というMAX番号とはどういう目的・性質のものでしょうか。 このソフトを使用している方からの希望です。 > 削除してもそれまでに一旦データ化したレコードの総数をどこかに記録して置きたいということでしょうか。でないと欠番OKの意味も分かりません。 レコードの総数を記録しておきたいのではありません。 本来DBでは「削除」せず、削除フラグなどを利用し 削除したように見せかけるのが一般的です。 しかし、このソフトを実際使っている方々は 「以前のデータなんて要らない」という考えなのです。 (というとDBの役割はって感じなのですが) こういった流れから「欠番OK」ということになっています。 仕様自体を考え直してみたいと思います。 今のところ自己リレーションを使用しできました。 しかし、私の中でもっと簡単なやり方があるのでは と今も考え中です。

noname#83007
noname#83007
回答No.7

今、出先なのでFM7で確認できませんが、それ以前のバージョンにはMAX関数というのがありました。 ですのでFM7にも同じ名前か、同じ機能の関数があるはずです。 後は以下を参考にしてみてください。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=111972

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=111972
  • cheryl255
  • ベストアンサー率23% (15/63)
回答No.6

NO.1 の回答者です。 ファイルメーカー4.0を使っています。 フィールド定義についての御質問にお答えします。 1.最終レコードを削除してしまった。 2.次の新規レコードを作成する前にファイルからフィールド定義を立ち上げます。 3.シリアル番号をふってあるフィールドを選択。 4.オプションボタンを押して中身を立ち上げる。 5.「次の値」という番号に、削除してしまった最終レコードの番号を入力し直す。 6.保存をする。 7.新規レコードを作成してみると、削除してしまった最終レコードの番号になる。 と、いうわけです。 面倒ではありますが…。

  • zenjee
  • ベストアンサー率47% (50/106)
回答No.5

 私の回答の意味を取り違えてらっしゃるようですね。  私はまず、TODAY関数によって必ずデータが入る「作成日」というフィールドを作り、別に例えば「シリアルナンバー」というフィールドを設けてそのタイプを「集計」にし、オプションをクリックして「カウント」と「現在のカウント」にチェックを入れることによって、最初のレコードから選択したレコードまでの「作成日」フィールドの個数をカウントし、それによってレコードが現在何番目にあるかということを表すということを言っている訳ですから、この数値が重複するなんてことは絶対にあり得ません。    フィールド内容の全置換のダイアログボックスでいうシリアルナンバー(初期値1、増分1という)とは全く意味が違うのです。  だからレコードがNO1から5まであるとすれば、NO3のレコードを削除して新たにレコードを追加するなら、当然今までのNO4のレコードはNO3に、NO5のレコードはNO4にそれぞれ繰り上がり、新しいレコードがNO5になる訳で、コンピューターが計算間違いをしない限り「シリアルナンバー」フィールドの値が重複するなんてことがあり得る筈がありません。  ただこの番号(数値)はステータスエリアの番号と常に一致する訳ですから、新たに設ける必要があるかどうかということをNo.4でお尋ねしている訳です。  ついでにちょっと訂正しておきますが、作成日フィールドをTODAY関数にしていましたが、TODAY関数では常にその日の日付に更新されますから、それでなく、フィールド定義のオプション画面の入力値の自動化にチェックを入れ、「作成日」を選択した方がレコード作成日も記録されるので画面に表示する意味もあり、よりベターだと考えます。

yura64
質問者

補足

#3で回答いただいた内容を取り違えて理解していました。 せっかく回答していただいたのに本当にすみません。 #5の方法を試してみました。 回答どおりの動作をしました。 ありがとうございます。 しかし、実現したい動作とは違います。 テーブル内の一番大きいシリアル番号を求め、 新規テーブルのシリアル番号に「最大シリアル番号 + 1」 にしたいのです。 途中削除したシリアル番号は欠番のままでよいのですが、 「新規レコード作成、今作成したレコードを削除」 と連続操作したとき、新しいシリアル番号が 生成されてしまうのを防ぎたいのです。 テーブル内のシリアルの最大値の求め方もわかりません。 いろいろ調べているのですが、なかなかわからなくて。 実現したい動作の説明が足らなくて本当にすみません。

  • zenjee
  • ベストアンサー率47% (50/106)
回答No.4

No.3 zenjeeです。 一つ言い忘れていましたが、No.3で私が説明したような意味でのシリアル番号なら、左のステータスエリア(日めくりカレンダーのようなもの)に全レコード数と現在レコードの順番が必ず表示されるので、別にシリアルナンバーフィールドを設ける必要もないような気がしますが、いかがでしょうか。 もし私がご質問の意味を取り違えたのなら、よければ補足説明をお願いします。

yura64
質問者

お礼

ありがとうございます。 早速試してみました。 しかし、この方法ですとシリアルが重複してしまいます。 例えば「1、2、3、4、5」とシリアル番号があって、 シリアル番号3のレコードを削除し、 新規レコードを追加すると、シリアル番号は「5」となってしまいます。 シリアル番号はユニークとしたいのですが。 既存のMax(シリアル番号)+1 をとりたいのですが、 どうやったらよいかわかりません。 何か良い方法がありましたらアドバイスよろしくお願いします。

  • zenjee
  • ベストアンサー率47% (50/106)
回答No.3

こういう方法はいかがでしょうか。 ウインドウに表示しないフィールド1個とシリアル番号が表示されるフィールドを1個作ります。 非表示のフィールド名は、例えば「作成日」としてタイプは計算、式は「=TODAY」とします。 次にシリアルナンバーのフィールドです。 名称は例えば「シリアルナンバー」とし、タイプは集計です。 オプションをクリックすると『集計フィールド「シリアルナンバーのオプション』というダイアログボックスが現れますので、左側の「カウント」と下の「現在のカウント」にチェックを入れOKをクリックします。 レイアウトモードに戻り、「シリアルナンバー」フィールドを画面に表示します。 するとデータの順に応じた番号(数値)が常に表示されます。データを追加・削除しても常に「作成日」フィールドの個数(COUNT)が反映されますから、シリアルナンバーとしての機能が果たされる訳です。 なお、「作成日」フィールドは表示しても特に支障がある訳ではありませんし、何らかの役に立つ場合があるかも知れません。 要するにどこかのフィールドには必ず何らかのデータが入っている(特定のフィールドが空白ということがない)と仮定すれば、別にこのフィールドを作る必要はなく、それをカウントすればいい訳で、そうでない可能性もあるかから、TODAY関数で必ずデータが入る非表示のフィールドを作り、その現在カウント数(順番)をシリアルナンバーとして活用する訳です。

回答No.2

私は5.5です。 あるフィールドの最大値に1足したものを同じフィールドに自動入力 しようとすると、再帰定義でエラーになりますね。 レコードの追加や削除をスクリプト経由で行なう仕様にしておい て、スクリプトの中で数値フィールドに「計算結果を入力」で最大 値を格納するようにすれば、自動入力は単なる数値フィールドを参 照するだけになるから、出来るかも。でも面倒くさそう…

yura64
質問者

お礼

回答ありがとうございます。 今のところ、ショートカットでレコードの新規作成・削除 ができることを前提として考えています。 どちらにしても面倒な作業になりそうなんですかね・・・。

  • cheryl255
  • ベストアンサー率23% (15/63)
回答No.1

私は、ファイルメーカー4を使っています。 私は削除する度に変更をかけるようにしています。 変更はフィールド定義からかけますが、結構面倒で 手間です。4はコレしかできないように思いますが… お役にたてますかかどうか…

yura64
質問者

お礼

ありがとうございます。 フィールド定義からどのようにしているのですか? お時間があるようでしたら、ほんの少しヒントでもかまいませんので 教えていただけないでしょうか?

関連するQ&A

  • ファイルメーカーでユニークなシリアル番号を自動入力させる方法

     ファイルメーカーProでは、フィールドに対し「入力値の自動化・シリアル番号」のオプション設定を行った場合、新規レコードを作成するとフィールドに連続した番号が自動入力できます。このシリアル番号機能に似た方式で、特定のフィールドの内容を参照し、その内容ごとにシリアル番号を自動入力する機能を実装させようと試行錯誤しているのですが、どうにもいい方法が思いつきません。 【実装したい機能の例】  ・「商品名」「シリアル番号」の2つのフィールドを持つDBがあります。  ・「商品名」を入力または修正すると、「シリアル番号」のフィールドへ「商品ごとに異なるシリアル番号」が自動入力されていきます。 【実装時の例】  レコード1:商品名=みかん、シリアル番号=1  レコード2:商品名=みかん、シリアル番号=2  レコード3:商品名=リンゴ、シリアル番号=1  レコード4:商品名=みかん、シリアル番号=3  レコード5:商品名=リンゴ、シリアル番号=2  レコード6:商品名=バナナ、シリアル番号=1  エクセルでは、countif関数を使っていとも簡単に実装できたのですが、「最初のレコードから現在入力中のレコードの間で、現在入力中のフィールドと内容が同じレコードの数を取得する」方法が、ファイルメーカーProでは見つかりません。  良き解決方法をご教示いただけますでしょうか。

  • ファイルメーカー シリアル番号入力自動化

    ファイルメーカーPRO5を使用しています。 フィールドの入力値の自動化でシリアル番号をA001から増分1にしています。 このシリアル番号を月が変った時点で初めのA001に戻してやる方法はあるでしょうか。 ご教授頂きたくよろしくお願いいたします。

  • ファイルメーカーでシリアル番号を整理する方法は?

    ファイルメーカーPro6(Mac)を使用してます。 ソート順位を指定する方法として、レコードにIDというフィールドを作り、シリアル番号を自動入力するようにしております。 通常は、自動入力された整数値で問題ないのですが、後から登録するレコードを、途中に割り込ませたいとき、「12.5」のように、手動で小数をつけてならび順を制御してました。 これで、任意の順番で並ぶようにソートすることが出来るようにはなりましたが、あまりにも数字がめちゃくちゃになってきたので、1から順に整数値になるように、整理したいのですが、どのようにすれば出来るでしょうか? また、小数点を使わない、別のいい方法がありましたら御教授下さい。

  • シリアル番号

    1枚のレコードの中のフィールドにシリアル番号を自動入力したいのですが、やり方が分かりません、どなたかよろしくお願いします。

  • シリアル番号はどこ

    筆まめver30を自動アップグレードにて使用していますが以前バージョンver28~29をアンインストールしたらシリアル番号の入力を要求され使用できなくて困っています。 自動アップグレードした場合製品のシリアル番号はどこで確認できますか? ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。

  • 自動アップグレードにおけるシリアル番号入手方法

    筆まめver.30の自動アップグレード後、起動するとシリアル番号の入力が求められました。自動アップグレードの案内メールにはシリアル番号の記載がありません。 どのようにしてシリアル番号を入手すればいいのでしょうか? ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。

  • シリアル番号の誤登録

    筆まめVer29から、Ver30にWEB版でアップグレードしました。 Ver30を最初に開いたところ、シリアル番号の入力を求められたため、 勘違いしてVer29のシリアル番号を入力してしまいました。 その結果、Ver30を開くと、シリアル番号が異なる、ということで その先に進むことが出来ません。 マイページを見ても、Ver30のライセンス情報がVer29 のシリアル番号と 紐ついてしまっており、修正をすることも出来ません。 何かVer30を使えるようにする方法はないでしょうか。 ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。

  • 筆まめシリアル番号について

    筆まめVer.30からVer.31にアップグレードしたのですが、Ver.29のシリアル番号を入力してしまい、起動すると「入力したシリアル番号は本製品のシリアル番号と違います。」と表示され起動できません。どのような対処を行えばよいでしょうか? ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。

  • シリアル番号エラーで困っています

    ・ソースネクストのウイルスセキュリティーを使っています。 ・OSはwindowsXPで、ユーザー切り替えをしています。 ・先日自分の画面で作業中、自動アップデートの画面が出て「新バージョンにアップデートする為に、旧バージョンを削除する必要があります。削除しますか?」というメッセージが出てきたので、「はい」を選択したところ削除だけされてアップデートに失敗しました。 ・メインユーザーは夫の画面で、私の画面はユーザー制限があったためかと思い、メインユーザーの画面から再度ダウンロードしたのですが、バージョンが古く(7.7.1400)アップデートする為の「利用開始の手続き」の段階でシリアル番号エラーになります。 ・何度も「この製品について」にあるシリアル番号を入力し直してもダメです。入力は半角英数で行っています。 ・メーカーのマイページを確認してもやはりシリアル番号自体は間違っていないのですが、どうしてもエラーになります。

  • 筆まめのシリアル番号がわかりません

    8月8日に「筆まめ」の」自動アップグレードサービスを申し込み、12月22日にバージョンアップをしましたが、シリアル番号が分からないため、使えない状態となっています。 なお、ソースネクストから送られてきた自動アップグレードのお知らせ(利用料の引き落としについても記載されています。)には、シリアル番号が記載されていません。 また、筆まめVer.27のシリアル番号は分かりますが、Ver.28とVer.29は、筆まめを起動してバージョン情報を開いてみても「この製品は月の方にライセンスされています」のところは「未設定」と表示されています。 ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。