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

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

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

You are not logged in.

Announcement

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


#1 2020-02-26 17:08:41

桜井
Member

SQLServerとのODBC接続

お世話になっております。
FMP18をFMSにてオンプレミスで共有しています。

先日「Actual ODBC Driver for SQL Server and Sybase」のServer Editionを購入し、サーバーにインストールしてESS接続を試していたのですが、20万件程度のレコードを保持するテーブルでも動作が遅く、ビューを活用するなど工夫しても実用に耐えうる速度にはなりませんでした。(レコードはビューにする際絞って15万件程度にしたのですが、検索には20秒程度かかるようでした)
そこでODBCインポートを試してみたいのですが、サーバーに設定したシステムDSNを使ってレコードをインポートするには、サーバー機からの操作でないとできないのでしょうか? クライアント機からインポートの操作を行うためには、別途ODBCドライバの購入が必要でしょうか?

Offline

#2 2020-02-26 20:57:38

ウィン
Member

Re: SQLServerとのODBC接続

当方もオンプレミス環境でFMS、同サーバー内にMSSQLを入れて運用しています。
予めODBC外部データソースが作られていれば、リレーション内オカレンスに外部データソースを割り当てることができます。
別途ODBCドライバの購入は必要ありません。

例えばWindowsマシンで定義したODBC外部データソースは、Macのクライアント側にドライバが入っていなくてもオカレンス定義や呼び出すことができるようになります。
ちょっとややこしいですが、ODBCドライバの入っていないマシンで直接ESS接続をしようとする場合は当然ドライバが必要になります。
マシンごとにドライバを入れるのが面倒だったり、WinやMacの違いでSQLドライバのインストール方法が異なったり、Actual ODBC Driver for SQL Server and Sybaseなどの有償のモノが必要だったりと色々と面倒な事が多くあります。

対処としては
1.無償のODBCドライバ(MSSQLなど)の入っているマシンで、fmp12ファイル、マスタデータとなるようなファイルを作ります。
2.リレーションシップのところで外部データソースを用いたテーブルオカレンスを作ります。SQL Serverと接続している状態のファイルを作ります。
3.ドライバの入っていないクライアントマシンでもfmp12ファイルは直接叩けるのでそこからレコードのインポートを行えば、別途ODBCドライバは必要なくなります。
また一旦ODBCで定義されたファイルは、ドライバの入ってないマシンでも編集が可能で、SQLデータベース内のテーブルをオカレンスに配置できるようになります。

ずいぶん前にActual ODBC Driver for SQL Serverの購入を真剣に検討したのですが、諦めましたw 私のMacには何のODBCドライバも入っていませんw

Offline

#3 2020-02-27 09:59:20

桜井
Member

Re: SQLServerとのODBC接続

ウィン様

ESS接続したFMPファイルからインポートするというのは盲点でした。
無事解決いたしました。ありがとうございます!

Offline

#4 2020-02-27 12:46:20

ウィン
Member

Re: SQLServerとのODBC接続

よかったですね。

その事が分かると何でもかんでもマスターデータからデータを参照しようとしてリレーションを組みたくなるのが衝動だと思います。
どんな理由であれリレーションを組む際には「 = 」で結ぶ事をオススメします。
理由は・・・膨大なレコードのオカレンスを「 X 」で結んで一覧表示をしようとしたり、ソートをかけて見やすくしようとしたりすると思います。そうなるとクエリ処理に時間がかかってしまい、結果大きくレスポンスを落とすような事態になります。
Web Directでは速いのにGoでは遅いなんて事にもなります。

仮に「 X 」で結ぶ必要があるのであれば絶対にソートはかけない方が良いです。そのままの形でありのままのレコードの状態で参照してください。
「 X 」で結びたいならレコードを限定的にした中間のテーブルに必要なレコードをインポートして使用する事ですね。
膨大なデータほど「 = 」ですよ!

特定のデータが必要になった場合、また特定のデータの写しが必要になる場合など、数百万レコードある場合でも検索は一瞬で出来るので検索とコピー、フィールド設定やルックアップなど上手く組み合わせる事でレスポンスを落とさず必要なデータを取得・参照する事が出来るようになります。

今のスクリプトステップのインポートは大変分かりやすく、インポートの設定情報はファイルが保持してくれています。ボタン一つでレコードの更新が出来るようになります。
気をつけなければならないのは、インポートの際の「追加」に注意してください。1万レコードにまた1万レコードを追加してしまい、重複2万レコードが出来上がってしまったりします。一度全レコードを削除して最初から追加する作業になったりしてしまいますので、更新を上手く使ってください。

私は1000万レコード近く扱っていますが、工夫次第では特に速度を気にすることなくソリューションを作る事ができますよ。
本当にレスポンスを考えてソリューションを提供するのであれば、サーバー2台で運用する事をオススメします。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.004 seconds, 7 queries executed - Memory usage: 513.54 KiB (Peak: 518.08 KiB) ]