みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
こんにちは、Windows7でFileMaker Pro11を使っています。
デジカメの画像を検索するための簡単な画像データベースを作っています。
いつもは、
方法1
挿入↓ピクチャー:ファイルの参照データのみの保存(F)
で画像を1枚1枚、取り込んでいます。
このたび、画像枚数が多かったので、画像をフォルダーに入れて
方法2
ファイル↓レコードのインポート→フォルダ:ファイルタイプピクチャーとムービーファイル(各ピクチャの参照データのみインポートにチェック)
で一括でインポートしました。
問題なく出来上がったように見えたのですが、データベースファイル(*.fp7)と画像ファイルをUSBメモリーにコピーすると画像が表示されず、「見つからないファイル:」というメッセージが画像の表示されるべきフィールドにでます。
多分、方法1は相対パス、方法2は絶対パスで参照データを保存しているのが原因だと思います。
方法2で相対パスを使って、画像の一括インポート(ファイルの参照データのみ)をする方法はをご存知の方がありましたら、その方法を教えてください。また、絶対パスで保存された参照データを相対パスに変更できる方法をありましたら、合わせて教えていただけると嬉しいです。
よろしくお願いします。
Last edited by k5 (2016-06-21 13:10:03)
Offline
> 方法2で相対パスを使って、画像の一括インポート(ファイルの参照データのみ)をする方法
無理そうですね。
計算フィールドで
絶対パスを相対パスに変更できるのでは。
画像のフォルダと、FMファイルが同じ階層に有れば簡単でしょう。
Offline
サポートありがとうございます。
>無理そうですね。
やはりそうですか。
>計算フィールドで
>絶対パスを相対パスに変更できるのでは。
>画像のフォルダと、FMファイルが同じ階層に有れば簡単でしょう。
画像のフィールドはオブジェクトフィールドなのですが、多分その中に画像ファイルの場所が絶対パスで書かれていると思うのですが、それを相対パスに直すことはどうすれば出来るのでしょうか。
画像のフォルダはFMファイルと同じ階層にあるimagesというフォルダーの中にあります。
現在はこのような状況です。
(あくまでもサンプル)
1.データベースファイルはC:\image_db\ftest.fp7
画像はC:\image_db\imageの中で、
P001.jpg, P002.jpg, P003.jpgの3ファイルがある。
2.ファイル↓レコードのインポート→フォルダ:ファイルタイプ
ピクチャーとムービーファイル
(各ピクチャの参照データのみインポートにチェック)
でフォルダC:\image_db\imageを指定して一括でインポート
この状態では画像はオブジェクトフィールドに表示される。
3.filemakerを閉じて、C:\image_dbフォルダ全体をD:\dbに
移動した(C:\image_dbフォルダは削除した)
4. D:\db\ftest.fp7を開いたら、画像が表示されない
Offline
FMの相対パスは
image:ディレクトリ名/ファイル名
movie:ディレクトリ名/ファイル名
ですよ。
Offline
つまり全置換とかフィールド設定で
"image:image/" & ファイル名
とすればいいということです。
フォルダのインポートで入ったのは、GetAsText()で見るとimage:の後にフルパスだけ、という変な状態になっていた。ピクチャの挿入だと画像サイズと相対・絶対パスがある。
>3.filemakerを閉じて、C:\image_dbフォルダ全体をD:\dbに
>移動した(C:\image_dbフォルダは削除した)
FMファイルと画像フォルダの入っているフォルダごと
移動したのでしたら
D:\db\image_db\image
があるはずなので画像は表示されるのでは?
Offline
先ほどの中に書いた通り、「image:の後にフルパス」つまり「image:/C:/~」という形で取り込まれるので、D:を参照しません。
みなさん、ありがとうございます。
>つまり全置換とかフィールド設定で
>"image:image/" & ファイル名
>とすればいいということです。
これは画像が入っているオブジェクトフィールドで使えるのでしょうか。つまり、オブジェクトフィールドにその設定をしておいて、フォルダのインポートを行えば、絶対パスが相対パスに置換されるということでしょうか。そうであればすごく嬉しいです。
Offline
オブジェクトフィールドにテキストでパスを入力すると、
そのパスの画像を表示します。
ですから、
オブジェクトフィールドの入力値の自動化で、
絶対パスを相対パスに変更して計算入力する様に設定。
インポートはパスのみでもいいでしょう。
Offline
ありがとうございます。
確認ですが、
ファイル↓レコードのインポート→フォルダ:ファイルタイプピクチャーとムービーファイル(各ピクチャの参照データのみインポートにチェック)
で画像をオブジェクトフィールドに一括でインポートする。オブジェクトフィールドは入力値の自動化で絶対パスを相対パスに変更して計算入力する様に設定。
これは、自動的にオブジェクトフィールドに相対パスで記述した画像が表示され、他のドライブに移動しても大丈夫。
ということが可能になるのでしょうか。
さっそく、明日、やってみます。
入力値の自動化
"image:image/" & ファイル名
また相談させて下さい。
よろしくお願いします。
Offline
ムービーが有るのなら
> "image:image/" & ファイル名
と固定できませんよ。
また、
インポートはパスのみ、
画像のみならファイル名のみでもいいでしょう。
Offline
こんにちは
さっそくやってみました。
cドライブの直下にtestというフォルダを作り、その中にデータベースファイル(image_db.fp7)を作成し、同じフォルダーの中にimagesというフォルダーを作ってそこに画像ファイルを置いています。
C:\test\image_db.fp7
C:\test\images\P01.JPG
C:\test\images\P02.JPG
C:\test\images\P03.JPG
データベーステーブルには
1.ファイル名(テキスト)
2.画像(オブジェクトフィールド)
という2つの項目があり、
ファイル名は、自動計算でGetAsText ( 画像 )で画像から取り出しています。
結果はこうなります。
ファイル↓レコードのインポート→フォルダ:
(各ピクチャの参照データのみインポートにチェック)
image:/C:/test/images/P01.JPG
挿入↓ピクチャー:ファイルの参照データのみの保存(F)
size:1600,1200
image:images/P01.JPG
imagewin:/C:/test/images/P01.JPG
で、画像(オブジェクトフィールド)に書かれている、image:/C:/test/images/P01.JPGをimage:images/P01.JPGに置換すればいいみたいです。
ただ、画像(オブジェクトフィールド)の計算式に
"image:image/" & ファイル名
とやってもダメでした。なにも変わらないようです。
ここの自動計算の記述方法はどのように記述するか、ご存知の方は教えてください。
入力値の自動化
をインポート時に実行する設定をしましたか?
また、
入力値の自動化を既存値置換え
としていますか?
前にも書いていますが、
オブジェクトフィールドにインポートしなければ、
計算フィールドとしてもいいのでは。
Offline
ありがとうございます。
>インポート時に実行する設定をしましたか?
>入力値の自動化を既存値置換え
しました。
確認のために別に「パス名」というフィールドを作り、
計算値:GetAsText ( 画像 )
とすれば、
image:/C:/test/images/P01.JPG
とテキストは取り出せます。
これを
image:images/P01.JPG
として、オブジェクトフィールドに戻すことができればいいのですが。
ところで、ファイル名だけを取り出すコマンドってあるのでしょうか。
この場合、
P01.jpg
です。
RightValue ( Substitute ( パス名 ; "/" ; ¶ ) ; 1 )
で、
パス名のパスの最後のファイル名が取り出せます。
しかし、インポート時にファイル名やパスをインポートできますよ。
Offline
ありがとうございました。
RightValues ( Substitute ( 画像 ; "/" ; ¶ ) ; 1 )
これで画像(オブジェクトフィールド)の中にあるテキストより、ファイル名が取り出せました。
これに、"image:images/"という文字列を付け足して、
image:images/P01.JPG
として、それを画像(オブジェクトフィールド)に戻せればいいのですが。
>インポート時にファイル名やパスをインポートできますよ。
昨日、チポさんが
>オブジェクトフィールドにテキストでパスを入力すると、
>そのパスの画像を表示します。
この場合のパスとは、
a.image:images
b.image:images/P01.JPG
のどちらでしょうか。
>オブジェクトフィールドの入力値の自動化で、
>絶対パスを相対パスに変更して計算入力する様に設定。
この、計算式はどの関数を使えばいいのでしょうか。
忙しいところ、申し訳ないです。
全くついてゆけないのが、恥ずかしい。
> a.image:images
> b.image:images/P01.JPG
>
> のどちらでしょうか。
コピーして、オブジェクトフィールドにペーストしてみればお分りになるかと。。
FMファイルと画像フォルダが同じ階層に有るのなら、
LeftValue ( Substitute ( 絶対パス ; "/" ; ¶ ) ; 1 ) & RightValue ( Substitute ( 絶対パス ; "/" ; ¶ ) ; 2 )
これで相対パスになるでしょう。
Offline
ああ、
LeftValue関数
は改行がが付いてきますね
全体をSubstituteで改行を取ってください。
Offline
もう少しです。
>FMファイルと画像フォルダが同じ階層に有るのなら、
>LeftValue ( Substitute ( 絶対パス ; "/" ; ¶ ) ; 1 ) & RightValue ( Substitute ( 絶対パス ; "/" ; ¶ ) ; 2 )
>これで相対パスになるでしょう。
>全体をSubstituteで改行を取ってください。
Substituteを使った改行の取り方がわからなかったので、いただいたスクリプトをヒントにこういう計算式を書いてみました。
"image:images/" & RightValues ( Substitute ( 画像 ; "/" ; ¶ ) ; 1 )
これで、オブジェクトフィールドに
image:/C:/test/images/P01.JPG
をペーストすると、
image:images/P01.JPG
となり、絶対パスが相対パスに変換され、画像も表示されます。
ああ、これでうまく行ったと思って、ファイル↓レコードのインポート→フォルダをやると、また元のように
image:/C:/test/images/P01.JPG
となります。うーん、なんでだろう?
インポートのオプションで
入力値の自動化オプションを実行
が有ります。
これをオンにしていますか?
何度も書いている様に、
画像をインポートする必要は有りませんよ。
また、
オブジェクトフィールドを計算フィールドとしてもいいでしょう。
Offline
ありがとうございます。
何とか相対パスに変換できるようになりました。
>これをオンにしていますか?
これは確認しました。
>何度も書いている様に、
>画像をインポートする必要は有りませんよ。
この意味を理解できていませんでした。
私は画像(オブジェクトフィールド)にJPEG画像をインポートしていました。
これを画像(オブジェクトフィールド)にファイル名をインポートするという設定にすればうまく行きました。これを気づかなかったのは恥ずかしい限りです。
すいません、もう1つ教えてください。
過去に絶対パスで入力した画像のパスを絶対から相対に変換したい場合、「更新」、あるいは「再計算」に相当するコマンドはあるのでしょうか。
テキストフィールドに画像のパスかファイル名だけをインポートするだけでもいいでしょう。
と言っているんですよ。
> 過去に絶対パスで入力した画像のパスを絶対から相対に変換したい場合、
「更新」、あるいは「再計算」に相当するコマンドはあるのでしょうか。
特に必要ないと思いますが、スクリプトステップ
レコード確定
ウインドウの再表示
等が有りますね。
Offline
ありがとうございます。
>テキストフィールドに画像のパスかファイル名だけをインポートするだけでもいいでしょう。
>と言っているんですよ。
ダミーのフィールドを作ってそこにファイル名だけをインポートするようにしました。
>特に必要ないと思いますが、スクリプトステップ
> レコード確定
> ウインドウの再表示
>等が有りますね。
すでにフォルダーインポートを使って絶対パスで入力されて、その後フォルダーごと別の場所に移動され、画像が「見つからないファイル:」の状態になっているデータベースがあるのですが、やはり「レコード確定」をやっても状況は同じです。これは最初から入力しなおすしかないんでしょうかね。あるいは、テキストで書き出して、再インポートするか。
> 画像が「見つからないファイル:」の状態になっているデータベースがあるのですが
今回のと同様に相対パスを作れますよね。
それを使う計算フィールド・オブジェクトタイプとか、
オブジェクトフィールドなら、全置換で入力。
でできますよ。
Offline
ありがとうございます。
あれからいろいろと試して、画像のフィールド属性を「オブジェクト」から「計算」に変更して、計算結果を「オブジェクト」にすれば、これまで絶対パスで見られなかった画像が見えるようになりました。これで終わったと思ったのですが、フィールド属性を「計算」にすると、挿入↓ピクチャが使えないことがわかり、また後退です。
>オブジェクトフィールドなら、全置換で入力。
次はこれを試してみます。
[ Generated in 0.009 seconds, 7 queries executed - Memory usage: 581.34 KiB (Peak: 617.88 KiB) ]