みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Ver18をお試しで使っています。
顧客のDBを作っていますが、emailのフィールドにはデフォルトで顧客ID(顧客レコード毎に振られるシリアルNo)が
入るようになっています。
要はemailアドレスフィールドを計算値 ”=顧客ID”として自動入力されるかたちになっています。
エクセルから顧客情報をインポートするのですが、
そのエクセルデータにはemailアドレス情報を持っている顧客ともっていない(email欄が空欄)の顧客があります。
インポートする際、email情報を持っていない顧客のファイルメーカー側のemailアドレスフィールドは、データがインポートされずに、上記の
自動入力される顧客IDが残る見込みでしたが、実際は空欄になってしまいます。
おそらく、エクセルの空欄情報がインポートされて上書きされているのではないかと思ってます。
この動き(空欄のインポート)がなされず、自動入力値(顧客ID)が残るようにする方法をご教示いただけませんでしょうか?
よろしくお願いいたします。
インポート値で上書きではなく、インポートでレコードが作成されるので、自動入力が実行されるのはその後です。
インポート時のデフォルト設定では、自動入力は実行されません。ダイアログでチェックを入れる必要があります。
https://fmhelp.filemaker.com/help/16/fm … ect_header
ありがとうございます。「自動入力が実行されるのはその後」ということは理解しました。
「入力値に対して自動化オプションを実行」のチェックを入れてインポートを実行しましたが、やはり、自動入力値として
顧客IDは入力されず、空欄のままです。
何か手順が抜けているのでしょうか?
計算値の自動入力の設定のところで、既存の値がある場合は、置き換えないという設定にしています。
ひょっとすると、エクセルの空欄の属性か何か見えない情報が、インポートされていて既存値があるように認識されているのかも
しれないと思っています。
[フィールドに既存の値が存在する場合は置き換えない]がオフの場合は
エクセルで空欄のフィールドに対して計算値は入力されません。
質問者さんの推察のとおりですが、
フィールドに空セルをインポートした場合は値(空欄)がインポートされています。
Offline
そのフィールドの自動入力の計算値に、置き換えを許可した上で、
Case ( IsEmpty ( Self ) ; GetNextSerialValue ( Get ( ファイル名 ) ; "emailのフィールド" ) ; Self )
を設定すればいいです。
Offline
ありがとうございます。
Case ( IsEmpty ( Self ) ; GetNextSerialValue ( Get ( ファイル名 ) ; "emailのフィールド" ) ; Self )の ファイル名はインポートするファイルの名前、emailのフィールドとは
インポートするエクセルファイルのemailアドレスのフィールド名ということで良かったでしょうか?
すみませんが、元々emailアドレスフィールド入っていた計算式 =顧客IDと上記計算式の関係がよく分かりません。
(元々入っていた=顧客IDを上記の計算式に書き換えるということでしょうか?)
素人的な質問で申し訳ありませんが、ご教示頂けますでしょうか?
Get ( ファイル名 ) で一つの関数です。
全体像が全くわからないのですが、emailフィールドの自動入力式を置き換えてみてください
Offline
ありがとうございます。
やりたいことの基本は
*顧客データベースの”emailアドレス”フィールドにエクセルファイルからデータをインポートすることです。
・エクセルファイル側のemailアドレスデータが歯抜け状態で、半分くらいしかemailアドレスのデータがありません。
・インポート時の自動入力オプションをOnにして、emailアドレスが得られなかったレコードにおいては
”emailアドレス”フィールドに顧客ID(顧客DB作成時に振られるシリアルナンバー)が入るようにします。
(この自動入力は既存の値が入っている場合は上書きされないようになっています。)
ビギナーのため基本的なところが分かっておらず、申し訳ありません。
上記の「Case ( IsEmpty ( Self ) ; GetNextSerialValue ( Get ( ファイル名 ) ; "emailのフィールド" ) ; Self )」は
エクセルファイルのインポートの手順も含むものですか?それとも自動入力の計算方法で、インポートはインポートで別途行うべきものですか?
IsEmpty ( Self )や GetNextSerialValue(***;Self)でどういうことを行っているのかご教示頂ければ幸いです。
(検索するとGetNextSerialValueは「ファイル名のフィールド名の次のシリアル番号を返します。」と出てくるのですが、どうして「フィールド名の次のシリアル番号」なのか
良くわかりません。。)
宜しくお願い致します。
email フィールドと、別にシリアルが振ってある 顧客iD フィールドがあるようですね。(そのような、フィールド定義についての情報が欲しいのです)
新規レコードを作っているのではなく、参照インポートを行なっているのですか。それとも、単に新規レコードを作るようにインポートしているのですか。
Offline
emailフィールドを空白で上書きしたくない。
ですよね。
これは入力値の自動化とは無関係でしょう。
空白で上書きしないためには空白のレコードは、
emailをインポートしなければいいのですから、、
インポート用の中間テーブルを作り、レコードがない状態で
エクセルをインポート。
そのテーブルでemailが空白でないレコードを対象にしてインポート、
次に、空白を対象にして、email以外をインポート
これでいいのでは。
この中間テーブルはレコード削除を繰り返すことになりますから、
たまに最適化を行った方がいいでしょう。
Offline
データをemailアドレスがあるデータとないデータで分けてインポートするということですね。
理解できました。
アドバイスありがとうございました!
別々にインポートする必要はありませんよ。email フィールドと、別にシリアルが振ってある 顧客iD フィールドがあるのでしたら、
Case ( IsEmpty ( Self ) ; 顧客ID ; Self )
という式に変更し、上書きを許可すればいいです。
Last edited by Shin (2020-06-28 11:59:59)
Offline
emailフィールドが編集されて、他の値に書き換えられているレコードがある。
と考えるのが自然でしょう。
Offline
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 550.4 KiB (Peak: 571.3 KiB) ]