みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
仕事で基幹データベースからodbcでデータをインポートする際の質問です。
グローバルフィールドに値を入れておきまして、
データインポート時に
SELECT*
FROM"XXXXX(テーブル)"
WHERE "YYY(フィールド)" = "ZZZ(値)"
と書きますが、このZZZの値をグローバルフィールドに入れた値となるように
変数的な扱いをする方法はあるでしょうか?
ご相談内容が分かりにくいかもしれませんが、ご存じの方は、
ご教授をお願いします
ExecuteSQL関数ならダイナミックパラメータの引数設定が用意されているのですが、
odbcクライアントのSQL文なら、計算式内でそのフィールドを埋め込んでSQL生成すれば良いのでは?
”SELECT *
FROM \"XXXXX(テーブル)\"
WHERE \"YYY(フィールド)\" = \" "& テーブル::ZZZフィールド & "\""
Offline
グローバルフィールド以外が空データなら何がKeyなのか分からないので
無理でしょう、また、グローバルフィールドは照合にならないでしょう
SQLはFM側の都合のグローバルフィールドに合わせてはくれません
ODBC側、オラクルかMySQLかMSSQLサーバーかは分かりませんが、そちらで
一旦、GROUP BY 句、WHERE 句、HAVING 句などのサブクエリなどで、ほしいデータを
整理してからインポートか、一気にずどんとインポートしてFM側で整理するか
FM側であらかじめ設定されたKeyデータとSQLの列に合わせてインポートするかです
SQLにフィールドという概念はありません。テーブル、列、行です
文字列値の囲みはシングルクオートでは?(数値なら不要)
Hiroさんがすでに答えて下さっていますが可能ですよ。
インポートするデータをユーザ側である程度コントロールしたいという要望ですよね?
[ファイル]メニューの[レコードのインポート]からはできませんが、
スクリプトで[レコードのインポート]を行う場合は[計算済みの SQL テキスト]が指定できます。
細かな書式についてはクエリービルダーで作成できる SQL 文を参考すればよいでしょう。
MySQL からインポートする場合の例文は下記です。
「TEST」テーブルから「単価」フィールドがグローバル格納のフィールド(テーブル::gn_数字)の値と一致するレコードをインポートする場合
"SELECT * FROM `TEST` WHERE `TEST`.`単価` = " & テーブル::gn_数字
Offline
追記)テキストフィールドで検索する場合
"SELECT * FROM `TEST` WHERE `TEST`.`名前` = '" & テーブル::gt_テキスト & "'"
calcerさんの指摘通りですが、テーブル名やフィールド名の囲いが `というのがミソですね。
(重複しますがクエリービルダーで作った SQL 文をいじるのが良さそうです)
Last edited by Moz (2016-01-08 09:33:11)
Offline
皆様
ありがとうございます。
moz様のコメントを参考に下記の通り、
"SELECT * FROM `KYURYOU` WHERE `KYURYOU`.`BUMON` = '" & test::test &"'"
計算済みの SQL テキストを利用してみましたが、odbcエラーとのダイアログが出てしまいました。
エラーの理由はなんでしょうか・・・・?
エラーの理由は ODBC エラーのダイアログに書いてありますよ......
私の書いたのは MySQL に接続した際に使った SQL 文です。
クエリービルダーを利用して作った SQL 文をフィールドの値を利用できる様に変更しましょう。
私の書いた計算式を変更して使ってもデータソースによっては使えないでしょう。
Offline
ダブルクオート「"」であるべきところが、
バッククオート「`」になっているのでは?
誤?
"SELECT * FROM `TEST` WHERE `TEST`.`名前` = '" & テーブル::gt_テキスト & "'"
正
"SELECT * FROM \"TEST\" WHERE \"TEST\".\"名前\" = '" & テーブル::gt_テキスト & "'"
なので、
以下で大丈夫では?
"SELECT * FROM \"KYURYOU\" WHERE \"KYURYOU\".\"BUMON\" = '" & test::test &"'"
Last edited by qb_dp (2016-01-08 15:28:45)
Offline
qb_dpさん、その SQL 文はバッククォートが正です。
ダブルクォートやシングルクォートにするとエラーです。
クエリービルダーで作って間違いだと思って " やら ' にしたら逆にエラーで......
さすがに SQL 文を検証せずに書き込めないです。
Last edited by Moz (2016-01-08 16:13:35)
Offline
接続先のDBとドライバの設定次第です。質問者はダブルクオートで書いてますから、たぶんそれなんでしょう。
Pages: 1
[ Generated in 0.005 seconds, 8 queries executed - Memory usage: 523.52 KiB (Peak: 528.05 KiB) ]