2009-06-26 9 views
0

私はclass from JosephStyonsで作業しようとしていますが、「ユーザーID」が設定される行に「無効なインデックス」エラーが表示されます。Delphi 5&Crystal XI Rel。 2(RDC)の方法は?

のWinXP Sp3を、Crystal Reportsの開発者XI Rel.2 SP4、デルファイ5アップデートパック1

任意のヘルプやアイデアは大歓迎:

FRpt.Database.Tables[i].ConnectionProperties.Item['User ID'] := edUserName.Text; 

ここに私の環境です!

Thxを、 ラインハルト

+0

どのデータベースエンジンをターゲットにしていますか? iに対する : - – skamradt

+0

のMicrosoft SQL Server 2000のヒントの – pastacool

答えて

0

[i]が犯人である可能性が...私は確かに覚えていないことが、私は最初のテーブルにはなると信じためのあなたの価値表[1]の代わりに、表の[0]予想通り。私はループを変更して使用しました:

CrTables:= CrDatabase.Tables; crTablesでcrTableObjため

を行うあなたは上または1ではなく0

で始まるによって示されるように、私はこのことができます願っていforループを使用してテーブルをステップ実行してみてください可能性があります。

+0

おかげで、ループを変更= FRpt1.Database.Tables.Countに1 を行うが、今、私はあなたの入力 ため – pastacool

0

その行にブレークポイントを置き、評価/変更を使用します。
無効なものを試してみると、エラーが返されます。

  1. FRpt.Database.Tables[i]を調べ、それはあなたが私のための最小値と最大値があると思います何のために有効なのですかどうかを確認します。
    Tablesが配列である場合は、それを避けるための一つの方法は、あなたが、あなたの表は、[OK]を取得FRpt.Database.Tables[i].ConnectionProperties.Item['User ID']を調べ、それが有効なのですかどうかを確認した場合...Low(Tables) to High(Tables)

  2. を使用することです。
    Itemゲッターが「ユーザーID」に埋め込まれたスペースを好まない場合があります。一部の製品には、「USER_ID」

+0

タンクが1を追加し、アクセス違反を取得します:テーブルオブジェクトは1つしかなく、インデックスは0ではなく1から始まり、「無効なインデックス」の問題が解消されました。 add2:[ユーザーID]は既に、一重引用符で囲まれた文字列です – pastacool

0

あなたはまた、パスワード、サーバ名とデータベース名を設定しているようなアンダースコアで交換する他、「[ユーザーID]」などの特殊文字で囲むのいずれかが必要ですか?

 
procedure TReports.LogonToDBTables(cReport: 
    CrystalDecisions.CrystalReports.Engine.ReportDocument; 
    ConnInfo: ConnectionInfo); 
var 
    CrDataBase: Database; 
    CrTables: Tables; 
    CrTableObj: TObject; 
    CrTable: Table; 
    CrTableLogonInfo: TableLogonInfo; 
    iSubReportIndex: smallint; 
begin 
    CrDataBase := CReport.Database; 
    CrTables := CrDatabase.Tables; 
    cReport.DataSourceConnections[0].IntegratedSecurity := False; 

    for crTableObj in crTables do 
    begin 
     crTable := CrystalDecisions.CrystalReports.Engine.Table(crTableObj); 
     crTableLogonInfo := crTable.LogOnInfo; 
     crTableLogonInfo.ConnectionInfo := ConnInfo; 
     crTable.ApplyLogOnInfo(crTableLogonInfo); 
    end; 
end; 

function TReports.GetConnectionInfo(): ConnectionInfo; 
var 
    cTemp: ConnectionInfo; 
begin 
    cTemp := ConnectionInfo.Create(); 
    cTemp.AllowCustomConnection := True; 
    cTemp.ServerName := GetServerName(); 
    cTemp.DatabaseName := GetDBName(); 
    cTemp.UserID := GetDBUserID(); 
    cTemp.Password := GetDBPassword(); 
    Result := cTemp; 
end; 

+0

あなたの入力に感謝します。ログインに関しては、私は実用的な解決策があると思います。私が直面している次の問題は、ストアドプロシージャのパラメータ(parametername = '@P_'に示されている)を設定すると、AddCurrentValue関数は現在の値を設定せず、DefaultValueを設定するということです。どのようにクリスチャンビジネスオブジェクトsapは、このような虚偽のソフトウェアに支払われるのですか? – pastacool

+0

時間がある場合はhttp://stackoverflow.com/questions/1073636/crystal-xi-rel2-rdc-parameter-passingを参照してください thx – pastacool

+0

パラメータ値を設定する前にClearCurrentValueAndRangeを呼び出していますか? CRReport.ParameterFields.GetItemByName( 'ExemplarFee'、 '').ClearCurrentValueAndRange; (CRT)。 –

関連する問題