Hi,
ich bekomme spontane "Index out of Bounds" Fehler, wenn ich mit <TADOStoredProc>.Parameters.Refresh die Parameterdaten einer SP hole und die Parameterwerte fülle bzw. auslese.
In meinen Applikationen erstelle ich die SP's generell zur Laufzeit.
Beispiel:
Delphi-Quellcode:
SP:=TAdoStoredProc.create(nil);
try
SP.Connection:=<MeineAdoConnection>;
SP.ProcedureName:='SET_Kundendaten';
SP.Parameters.Refresh; // << läuft auch im Fehlerfall schnell durch, kein Timeout !!
SP.Parameters[1].Value:=<KundenID>;
SP.Parameters[2].Value:=<Vorname>;
SP.Parameters[3].Value:=<Nachmane>;
SP.Parameters[4].Value:=<irgendwas>;
SP.ExecProc;
Rueckgabe:=SP.Parameters[5].Value;
finally
FreeAndNIl(SP);
end;
ADO scheint spontan Probleme beim Holen der Parameter zu haben, ohne dabei eine
Exception auszulösen. Beim Füllen der Parameterwerte "SP.Parameters[x].Value:=" bekomme ich während der Programmnutzung immer mal wieder ein "Index Out of Bounds" um die Ohren.
Das Problem tritt besonders auf, wennn viele Prozesse bzw. Benutzer auf den
SQL-Server zugreifen (Serverauslastung im grünen Bereich).
Zur Zeit umschiffe ich das Problem, indem ich nach Parameters.Refresh die Parameteranzahl der SP (SP.Parameters.Count) mit der Anzahl der erwarteten Parameter vergleiche. Falls Differenzen auftreten, dann neu auslesen ...
Hat jemand vor Euch ähnliche Probleme festgestellt oder sind bei meinem D7 Enterprise die
ADO Komponenten beschädigt?
Am Betriebssystem (
MDAC,
ADO) liegt es nicht, weil der Fehler (leider) nicht nur auf meinem Rechner auftritt, sondern auch auf Kundenrechnern mit unterschiedlichsten Konfigurationen.
Was kann ich machen um das Problem zu beheben ? Die Variante mit der Parameterkontrolle nach dem Refresh ist zwar als Notlösung OK, aber auf Dauer nicht wirklich praktikabel.
Schöne Grüße,
Jens