Quantcast
Channel: SCN : Discussion List - SAP日本語コミュニティ (Japanese Language Community)
Viewing all articles
Browse latest Browse all 26

帳票出力時のスキーマ指定について

$
0
0

初めて質問いたします。
不慣れなため見づらい点等あるかと思いますが、ご容赦ください。

 

やりたいこと:
同じテーブル構成で複数のスキーマがあるDBで、VBからの帳票(バウンドレポート)出力時に接続情報を渡し指定したスキーマから対象データを出力したい。
ただし、一部パブリックシノニムを使用している。
(VB6+CrystalReport8.5からのバージョンアップで、開発コストを増やしたくないため、アンバウンドレポートへの移行は考えていません)

 

環境:
・Visual Basic 2013
・.NET Framework 4.5.2
・Crystal Report for Visual Studio 2013
・Oracle Database 12c

 

VB6+CR8.5のとき(PE関数を使用、ODBC接続)は PEGetNthTableLocation で取得した Location にシノニム以外ならスキーマ名が含まれていたので、目的のスキーマと異なればスキーマを変更していました。
(シノニムならスキーマ名が含まれないため、変更されない)

 

ところが、.NET+CR2013(Oracle サーバ接続)では、Location にスキーマ名が含まれていないようなのです。

 

'スキーマの変更
 For Each tab As Table In reportDocument.Database.Tables
  Dim idx As Integer = tab.Location.IndexOf(".")
  If idx = -1 Then  '← ここで必ず True になる
   Else
   If Not tab.Location.Substring(0, idx).Equals(uid) Then
    tab.Location = uid.ToUpper & tab.Location.Substring(idx)
   End If
  End If
 Next

 

質問1
Location にはスキーマ名が入ってこないのでしょうか。
({スキーマ名}.{テーブル名}の形式を想定していた)
それとも、接続をODBCからOracle サーバに変えたことなどが影響しているのでしょうか。

 

質問2
Location に {スキーマ名}.{テーブル名}の形式でセットすれば目的のスキーマのオブジェクトを参照してくれるのですが、当然のことながら、パブリックシノニムの場合はエラーになります。
パブリックシノニムの場合は Location を変更しないようにしたいのですが、VB側(CRのAPI)でパブリックシノニムとテーブルやビューを区別することは可能でしょうか。

 

質問3
Location に {スキーマ名}.{テーブル名}の形式でセットしたところ、スキーマ名が小文字だとエラーになりました。

 

ファイル {ファイル名}
5460_684_{C2FB3A66-01AD-407C-8258-8FB40E47024C}.rpt のエラー:
式 {フィールド名}:
'{テーブル名.カラム名}'
フィールド名が見つかりません。
詳細: errorKind

 

スキーマ名を大文字にするとエラーにならないのですが、
大文字であればOKなのでしょうか。
下記のフォーラムで
「Location を指定する際の注意ですが、テーブル名は大文字小文字が区別されるようです」
とあり、小文字もしくは混在の場合もありえるのかと思ったのですが、なにを元に区別されるのでしょうか。
  https://social.msdn.microsoft.com/Forums/en-US/65079fb6-144f-44ae-819d-d78e8ce2b2aa/crystalreport-for-vs2010-?forum=vbgeneralja

 

長文でいろいろと質問してしまい恐縮ですが、なにか情報をお持ちの方、ご教示ください。
よろしくお願いいたします。


Viewing all articles
Browse latest Browse all 26

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>