Hallo Leute
Kann mir jemand zu dem unten beschriebenen Problem --- Programm läuft auf dem einen Rechner immer, auf dem anderen nie --- ein paar Tips geben?
Im voraus besten Dank für die Hilfe.
günter
<PRE>
Vorgang:
- Ich öffne eine Access-DB mit der Funktion callDatabase und lese die einzelnen Datensätze mit
der Funktion tryToReadDB ohne jedes Problem mit unterschiedlichen Versionen des Programmes
und immer wieder anderen Datenbankinhalten.
- Ich kopiere das Programm und die Datenbank von einem NT-Rechner auf einen anderen.
- Beide Rechner haben:
- Windows NT 4.0 (Compilierung 1381: Service Pack 6).
- Delphi Version 5.0 (Compilierung 5.62) 1983, 1999 Enterprise
Probleme:
- Das Programm verhält sich auf den beiden Rechnern sehr unterschiedlich.
- auf dem 1. Rechner läuft es immer stabil
- auf dem 2. Rechner bringe ich es nicht zum Laufen
- Nach dem Kopieren der Datenbank kann ich sie nur öffnen, wenn ich in callDatabase
DAO.DBEngine.36 in DAO.DBEngine.35 ändere.
- db.OpenRecordSet kann einzelne Datensätze auf dem 2.Rechner nicht lesen, obwohl sie vorhanden sind.
Fragen:
- Läuft das Programm auf dem einen Rechner nur zufällig stabil?
- Sind die Funktionen unsauber programmiert?
function callDatabase(auf_str, datname: string): integer;
begin
try
DBEngine := CreateOleObject('DAO.DBEngine.36');
ws := DBEngine.Workspaces[0];
db := ws.OpenDatabase(datname);
except
Ptext := Format('Datenbank %s kann nicht geöffnet werden.',[datname]);
show_errmsg_fehler(Ptext);
DBFehler(trcname,auf_str);
result := 0;
exit;
end;
result := 1;
end;
function tryToReadDB(auf_str,auf_nr: string; pos_nr: integer; tabname,sql: string; var rs: variant): integer;
begin
result := 1;
try
VarClear(rs);
rs := db.OpenRecordSet(sql,dbOpenDynaset);
if (VarIsEmpty(rs) = TRUE) then exit;
if (VarIsNull(rs) = TRUE) then exit;
rs.MoveFirst;
except
Ptext := '';
if (Length(Trim(auf_nr)) <= 0) then
Ptext := Ptext + Format('%s ist in %s nicht bekannt.',[auf_nr,tabname])
else
Ptext := Ptext + Format('Auftrag %s und/oder Position %d sind in %s nicht bekannt. (%s)',
[auf_nr,pos_nr,tabname,auf_str]);
show_errmsg_fehler(Ptext);
DBFehler(trcname,auf_str);
result := 0;
end;
end;
</PRE>
Kann mir jemand zu dem unten beschriebenen Problem --- Programm läuft auf dem einen Rechner immer, auf dem anderen nie --- ein paar Tips geben?
Im voraus besten Dank für die Hilfe.
günter
<PRE>
Vorgang:
- Ich öffne eine Access-DB mit der Funktion callDatabase und lese die einzelnen Datensätze mit
der Funktion tryToReadDB ohne jedes Problem mit unterschiedlichen Versionen des Programmes
und immer wieder anderen Datenbankinhalten.
- Ich kopiere das Programm und die Datenbank von einem NT-Rechner auf einen anderen.
- Beide Rechner haben:
- Windows NT 4.0 (Compilierung 1381: Service Pack 6).
- Delphi Version 5.0 (Compilierung 5.62) 1983, 1999 Enterprise
Probleme:
- Das Programm verhält sich auf den beiden Rechnern sehr unterschiedlich.
- auf dem 1. Rechner läuft es immer stabil
- auf dem 2. Rechner bringe ich es nicht zum Laufen
- Nach dem Kopieren der Datenbank kann ich sie nur öffnen, wenn ich in callDatabase
DAO.DBEngine.36 in DAO.DBEngine.35 ändere.
- db.OpenRecordSet kann einzelne Datensätze auf dem 2.Rechner nicht lesen, obwohl sie vorhanden sind.
Fragen:
- Läuft das Programm auf dem einen Rechner nur zufällig stabil?
- Sind die Funktionen unsauber programmiert?
function callDatabase(auf_str, datname: string): integer;
begin
try
DBEngine := CreateOleObject('DAO.DBEngine.36');
ws := DBEngine.Workspaces[0];
db := ws.OpenDatabase(datname);
except
Ptext := Format('Datenbank %s kann nicht geöffnet werden.',[datname]);
show_errmsg_fehler(Ptext);
DBFehler(trcname,auf_str);
result := 0;
exit;
end;
result := 1;
end;
function tryToReadDB(auf_str,auf_nr: string; pos_nr: integer; tabname,sql: string; var rs: variant): integer;
begin
result := 1;
try
VarClear(rs);
rs := db.OpenRecordSet(sql,dbOpenDynaset);
if (VarIsEmpty(rs) = TRUE) then exit;
if (VarIsNull(rs) = TRUE) then exit;
rs.MoveFirst;
except
Ptext := '';
if (Length(Trim(auf_nr)) <= 0) then
Ptext := Ptext + Format('%s ist in %s nicht bekannt.',[auf_nr,tabname])
else
Ptext := Ptext + Format('Auftrag %s und/oder Position %d sind in %s nicht bekannt. (%s)',
[auf_nr,pos_nr,tabname,auf_str]);
show_errmsg_fehler(Ptext);
DBFehler(trcname,auf_str);
result := 0;
end;
end;
</PRE>
Comment