AnsweredAssumed Answered

ODBC経由でオブジェクトフィールドの参照(SQL)について

Question asked by chaos1234 on Apr 29, 2013

タイトル

ODBC経由でオブジェクトフィールドの参照(SQL)について

フォーラムに投稿

     ODBCを利用して、外部プログラム(C#)からSQLを使用しての参照についての質問です。

      

     環境

      OS:WindowsServer2003

      SV:FileMakerServer10

      CL:FileMakerPro11

      C#:.NET 3.5 

      ODBC:DataDirect SequeLink 5.5

      

     目的

      FileMakerのオブジェクトフィールドに登録したPDFファイルを、外部プログラム(C#)からODBCを使いSQLでファイル取得を行う。

      取得したファイルはいったんローカルに保存し、FTP経由でWebサーバーにファイルアップロードを行う。

     問題

      オブジェクトフィールドにPDFファイルを登録する際、登録方法が2通りあります。

       1.「オブジェクトの挿入」(またはドロップ)で登録する。(FileMaker上で閲覧可能)

       2.「ファイルの挿入」で登録する。(エクスポートしないと閲覧できない)

      上記のうち、SQLで取得した際なのですが、1.の方法で登録したファイルはローカルに一時保存した際、

      PDFとして閲覧できない(バイナリファイルの形式が変わってしまっている)という状態です。

      2.の方法では、すんなり取得し、ローカルに保存すればPDFとして閲覧が出来る状態です。

     質問

      1.の「オブジェクトの挿入」で登録した場合に、元のPDFファイル形式のままバイナリデータを

      取得することは可能でしょうか?

      SQLのSELECTの仕方を工夫しなくてはならないのか?と思っておりますが、多方面へ検索しても

      解決策が見当たりませんでした。

      仕様上、「オブジェクトの挿入」では、SQLで取得できないという結論になれば、現在登録している

      ファイルをすべて「ファイルの挿入」で登録しなおそうと思っております。

      以上、もしわかる方がいらっしゃれば、ご助言お願い致します。

      

     以下サンプルソース(C#)

      

             public void sample()
             {
                 String sql = "SELECT PDF_FILE FROM PDF_TABLE WHERE ID = 1";
      
                 OdbcConnection conn = new OdbcConnection("DRIVER=DataDirect 32-BIT SequeLink 5.5; UID=User; PWD=password; HST=localhost; PRT=2399; SDSN=pdf;");
                 conn.Open();
      
                 // ODBCコマンドを生成
                 OdbcCommand command = new OdbcCommand(sql, conn);
                 command.CommandType = CommandType.Text;
      
                 // SQL発行してデータを取得
                 OdbcDataReader reader = command.ExecuteReader();
      
                 if (reader.Read())
                 {
                     Byte[] b = (byte[])reader.GetValue(0);
      
                     if (b.Length > 0)
                     {
                         File.WriteAllBytes(@"D:\temp\temp.pdf", b);
                     }
                 }
             }
      

Outcomes