Announcement

Collapse
No announcement yet.

Exception bei Zugriff auf nicht vorhandenen Access-Satz

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Exception bei Zugriff auf nicht vorhandenen Access-Satz

    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 ---&gt; Exception
    sel_str := IntToStr(verwendID); Fall2: verwendID 123 in Datenbank vorhanden ---&gt; keine Probleme
    sel_str := '*'; Fall3: wenn sel_str = * ---&gt; 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); {&lt;--- 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
Working...
X