はじめに
これはDelphi Advent Calendar 2018の4日目の記事となります。
現在サーバーリプレイスの移行作業(Windows Server 2008R2 + Oracle 11g から Windows Server 2016 + PostgreSQL 9.6)を行っています。
Delphi 5 で作成されたアプリケーションが残っており、幾つかは Delphi から C# に移行したのですがコストや時間の関係から、Delphi 5 のままデータベースを Oracle から PostgreSQL に変更する対応をしています。
SQLのVIEWが表示されない
実際に改修作業を行っている同僚から、DelphiのClientDataSetでグリッド表示する際にSQLのVIEWを表示しようとするとアプリケーションが落ちるという報告がありました。
だたし正常に表示されるVIEWもあるとのこと。ちなみに Oracle では問題なかった。
PostgreSQLは、psqlODBC(PostgreSQL ODBC driver) 32bit版のUnicodeをADOで接続しています。
同僚曰く、表示されるVIEWと表示されないVIEWの違いとして、表示されないVIEWには文字列連結のパイプ処理やMAXなどの関数を使用していることでした。ただ関数でも数値型だと表示される。
他の同僚も交えて調査してみたところ、PostgreSQLで関数を使用したVIEWを作成して保存すると自動的に「::text」が付くということです。
試しに型を「::text」から「::character varying(5)」に変更してみるとVIEWが正常に表示されるようになりました。
原因として「::text」だと桁数が定まらないので表示できなくなってしまうのではないでしょうか。
もっとも、Delphi 5 と古いので現在のDelphiでは当てはまらないかも知れません。
最後に
Delphiの代入演算子は「:=」でコロン(:)を忘れてコンパイルエラーになるなど面倒だなと思ったのですが、人工知能ブームで数学を意識するようになり数学に関する記事を書くようになって、代入演算子の見方を変えてもいいかなと思いました。
そんな記事を以前書きましたでの、良かったら読んでみてください。
変数の代入演算子と等価演算子について