初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2022-10-17 14:29:30

こうらん
Guest

全テーブルのフィールド数を取得したい

お世話になっております。
あるfmpファイルに登録されている全テーブルのフィールド数とレコード数をそれぞれ取得し、csvファイルに落とす、という処理を行いたいのですが、
フィールド数の取得に非常に時間がかかってしまい(1時間以上)、実用に耐えません。何かもっと効率的な処理方法はないものでしょうか?
※取得方法はExecuteSQLを使用しています

#全テーブル名を取得
変数を設定[$table_list; 値:Let ( [ where = "WHERE BaseFileName = ?"; query = " SELECT DISTINCT BaseTableName FROM  Filemaker_tables " & where ]; ExecuteSQL ( query ; "" ; "" ; "ファイル名") )]
#テーブルの総数を取得
変数を設定[$vc_table; 値:ValueCount($table_list)]
#Loopでテーブル名とフィールド数、レコード件数をExecuteSQLで取得し、csvファイルに落とす
変数を設定[$i; 値:1]
LOOP
    Exit Loop If [$i > $vc_table]
    #テーブル名を取得
    変数を設定[$table_name; 値:GetValue($table_list; $i)]
    #フィールド数を取得
    変数を設定[$headercnt; 値:Let ( [ query = "SELECT count (FieldName) FROM Filemaker_Fields WHERE TableName = ? AND FieldClass = 'Normal'" ]; ExecuteSQL ( query ; "" ; "" ;$table_name) )]
    #レコード数を取得
    変数を設定[$recordcnt; 値:ExecuteSQL ( "SELECT COUNT(*) FROM " & Quote ( $table_name ) & " ";"" ;"" )]
    #テーブル名とフィールド数とレコード数をカンマ区切り文字を使って結合
    変数を設定[$output; 値:$output & $table_name & "," & $headercnt & "," & $recordcnt & "¶"]

    変数を設定[$i; 値:$i + 1]
End Loop
---以下、csvにエクスポート処理

上記の、「#フィールド数を取得」の部分で非常に時間がかかってしまいます。
1ループでかかる時間自体は10数秒くらいなのですが、テーブル数が総計290テーブルありますので、とても時間がかかってしまっています。

何か良いお知恵ありましたら、ご教授下さい。
【環境】
Windows11
FM18

#2 2022-10-17 14:32:47

こうらん
Guest

Re: 全テーブルのフィールド数を取得したい

すみません、重複して投稿してしまいました
こちらは削除でお願いします。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 545.31 KiB (Peak: 581.34 KiB) ]