我現在有一個數據庫,前面(delphi 5)端連接到一個用戶名。 我們使用以下報告稱爲報告:在運行時改變模式delphi 5/crystal 8.5
with tcrpe.create(self) do
try
report_name := 'CrystalLotRecapSummary.rpt';
if fileexists(dmposting.tws_drive+'\tws\special\'+report_name) then
ReportName := dmposting.tws_drive+'\tws\special\'+Report_Name
else
ReportName := dmposting.tws_drive+'\tws\reports\harvest\'+Report_Name;
WindowButtonBar.PrintSetupBtn := true;
Paramfields.retrieve;
ParamFields[0].Value := cmbCropYear.text; // IN OLD REPORT
ParamFields[1].Value := 'ALL';
ParamFields[2].Value := real_to_str(unitfactor,0); // IN OLD REPORT
ParamFields[3].Value := cmbUnit.text; // IN OLD REPORT
ConnectMethod := useConnect;
Connect.Retrieve;
Connect.Password := 'PASSWORD';
Output := toWindow;
Execute;
finally
CloseJob;
end;
end; // PRINT SUMMARY BY WAREHOUSE
這工作得很好。問題是我們現在將要有2個模式(sysdba和sysdba2)。
現在的水晶報表查詢的樣子:
SELECT
LOT_RECAP."GROWING_YEAR", LOT_RECAP."GREEN", LOT_RECAP."ADJUSTED", LOT_RECAP."SHIPPED",
LOT_RECAP."WAREHOUSE_ID", LOT_RECAP."REMAINING", LOT_RECAP."LOT_ID",
LOT_RECAP."FINISH_DRYING", LOT_RECAP."NAME", LOT_RECAP."STATUS",
LOT_RECAP."COMMODITY_ID",
LOT_RECAP."VARIETY_ID", LOT_RECAP."PRODUCER_ID", LOT_RECAP."LR_AVMOISTURE",
LOT_RECAP."PROJECTED", LOT_RECAP."NOTE", LOT_RECAP."MASTER_ID",
LOT_RECAP."VARIETY_TYPE",
LOT_RECAP."CROP", LOT_RECAP."STORAGE_ONLY"
FROM
"SYSDBA"."LOT_RECAP" LOT_RECAP
WHERE
LOT_RECAP."GROWING_YEAR" = 2009 AND
LOT_RECAP."COMMODITY_ID" = 'RICE' AND
LOT_RECAP."STORAGE_ONLY" = 'FALSE'
ORDER BY
LOT_RECAP."LOT_ID" ASC
我需要找出一些辦法有報告,以決定是否該用戶ID爲SYSDBA那麼該表是sysdba.lot_recap,如果用戶標識是sysdba2,那麼表名是sysdba2.lot_recap。順便說一句,我必須爲約300份報告做這件事。任何幫助將不勝感激。如果我沒有提供足夠的信息,請讓我知道
theres a sysdba.lot_recap_all,and a sysdba2.lot_recap all。當用戶使用登錄名查看sysdba報告時,我希望他們查看填充了數據frm sysdba.lot_recap_all的報告,並且如果他們以sysdba2身份登錄,我希望他們使用sysda2.lot_recap_all中的數據填充數據。我迄今發現的唯一方法是進入並創建2個不同的報告,這就是我試圖避免的。如果我這樣做,我必須手動編輯所有300個報告,然後我必須手動插入一條語句,以重新設計報告根據登錄名指向 – Tidmore 2012-07-13 13:01:14
,因爲我向您展示的選擇語句查找完全quakified表,theres沒有辦法只看'LOT_RECAP_ALL'我不希望sydba有權訪問sysdba2,反之亦然,我想強制水晶從任何sysdba或sysdba2基於我的登錄無需進入並手動執行它們 – Tidmore 2012-07-13 13:05:06
那麼,最簡單的解決方案就是從select中刪除模式限定符。 如果您不能使用完全限定表更改select語句,那麼我看不出使用不同表來更改Oracle的方法。 LOT_RECAP是一個視圖還是一個表?如果是視圖,您仍然可以使用我的方法:重命名它,使用我的視圖選擇重命名的原始視圖,執行授權並使用userid = USER進行查詢。 或者有一些方法在水晶,但我不知道。 – GWu 2012-07-13 14:13:26