Hallo Experten,
ich habe einen genau eingrenzbaren Fehler beim Zugriff auf eine Access-Datenbank.
Es gibt auch einen Workaround (Fall3). Aber unbefriedigend ist, dass ich nicht weiss
was ich in Fall1 falsch mache.
Hat irgend jemand eine Idee? Vielen Dank.
<PRE>
var ws, db, rs2 : variant;
procedure callDatabase(Sender: TObject; auf_str: string);
begin
try
DBEngine := CreateOleObject('DAO.DBEngine.36');
ws := DBEngine.Workspaces[0];
db := ws.OpenDatabase('RPS_Stammdaten.mdb');
except
DBFehler('callDatabase',auf_str);
exit;
end;
end;
{
sel_str := IntToStr(verwendID); Fall1: verwendID 888 in Datenbank nicht vorhanden ---> Exception
sel_str := IntToStr(verwendID); Fall2: verwendID 123 in Datenbank vorhanden ---> keine Probleme
sel_str := '*'; Fall3: wenn sel_str = * ---> keine Probleme
}
procedure getVerwendtextartFromDB(auf_str: string; verwendID: integer; var verwend_text, verwend_art: string);
var
verwend_id : integer;
sql : string;
sel_str : string;
begin
verwend_text := 'unbekannt';
verwend_art := 'unbekannt';
sel_str := IntToStr(verwendID);
sql := 'SELECT * FROM ST_VERWEND WHERE verwend_id LIKE ' + #39 + sel_str + #39;
try
rs2 := db.OpenRecordSet(sql,dbOpenDynaset); {<--- hier tritt Fehler in Fall1 auf}
if (VarIsEmpty(rs2) = TRUE) then exit;
if (VarIsNull(rs2) = TRUE) then exit;
rs2.MoveFirst;
except
DBFehler('getVerwendtextartFromDB',auf_str);
exit;
end;
while not rs2.eof do
begin
verwend_id := rs2.Fields['verwend_id'].Value;
if (verwend_id = verwendID) then
begin
verwend_text := rs2.Fields['verwend_text'].Value;
verwend_art := rs2.Fields['verwend_art'].Value;
exit;
end;
rs2.MoveNext;
end;
end;
FEHLERMELDUNG:
Im Projekt .... ist eine Exception der Klasse EOleError aufgetreten.
Meldung: "Variante referenziert kein Automatisierungsobjekt".
Prozeß wird angehalten.
Mit Einzelne Anweisung oder Start fortsetzen.
</PRE>
Gruß G. Bergauer
ich habe einen genau eingrenzbaren Fehler beim Zugriff auf eine Access-Datenbank.
Es gibt auch einen Workaround (Fall3). Aber unbefriedigend ist, dass ich nicht weiss
was ich in Fall1 falsch mache.
Hat irgend jemand eine Idee? Vielen Dank.
<PRE>
var ws, db, rs2 : variant;
procedure callDatabase(Sender: TObject; auf_str: string);
begin
try
DBEngine := CreateOleObject('DAO.DBEngine.36');
ws := DBEngine.Workspaces[0];
db := ws.OpenDatabase('RPS_Stammdaten.mdb');
except
DBFehler('callDatabase',auf_str);
exit;
end;
end;
{
sel_str := IntToStr(verwendID); Fall1: verwendID 888 in Datenbank nicht vorhanden ---> Exception
sel_str := IntToStr(verwendID); Fall2: verwendID 123 in Datenbank vorhanden ---> keine Probleme
sel_str := '*'; Fall3: wenn sel_str = * ---> keine Probleme
}
procedure getVerwendtextartFromDB(auf_str: string; verwendID: integer; var verwend_text, verwend_art: string);
var
verwend_id : integer;
sql : string;
sel_str : string;
begin
verwend_text := 'unbekannt';
verwend_art := 'unbekannt';
sel_str := IntToStr(verwendID);
sql := 'SELECT * FROM ST_VERWEND WHERE verwend_id LIKE ' + #39 + sel_str + #39;
try
rs2 := db.OpenRecordSet(sql,dbOpenDynaset); {<--- hier tritt Fehler in Fall1 auf}
if (VarIsEmpty(rs2) = TRUE) then exit;
if (VarIsNull(rs2) = TRUE) then exit;
rs2.MoveFirst;
except
DBFehler('getVerwendtextartFromDB',auf_str);
exit;
end;
while not rs2.eof do
begin
verwend_id := rs2.Fields['verwend_id'].Value;
if (verwend_id = verwendID) then
begin
verwend_text := rs2.Fields['verwend_text'].Value;
verwend_art := rs2.Fields['verwend_art'].Value;
exit;
end;
rs2.MoveNext;
end;
end;
FEHLERMELDUNG:
Im Projekt .... ist eine Exception der Klasse EOleError aufgetreten.
Meldung: "Variante referenziert kein Automatisierungsobjekt".
Prozeß wird angehalten.
Mit Einzelne Anweisung oder Start fortsetzen.
</PRE>
Gruß G. Bergauer