みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になっております。
ある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
すみません、重複して投稿してしまいました
こちらは削除でお願いします。
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 543.48 KiB (Peak: 579.26 KiB) ]