05. januar 2005 - 15:55Der er
4 kommentarer og 1 løsning
Runtime error på vej ud af programmet
Mojn,
Jeg er rendt ind i et mærkeligt problem.
Mit program modtager et brugernavn og fosøger at logge på en Oracle database :
try ADOConnection.Open(..); except
end;
For at brugeren ikke skulle kunne angive et tomt brugernavn, kører programmet den her :
if Uppercase(Trim(s_usrName)) = '' then
og spørger brugeren, om han vil forsøge at indtaste brugernavnet igen eller vil fortryde.
Hvis brugeren vælger det sidste, skal programmet bare afslutte. Problemet er, at der kommer en "Runtime error 216" - access violation under de afsluttende manøvrer.
Jeg har forsøgt at steppe mig igennem koden, men fejlen opstår et sted efter den følgende kodeblok :
... if FormMain.ADOConnection.Connected then Application.Run else Application.Terminate end.
Siden brugeren ikke har angivet noget brugernavn, er der ikke blevet oprettet nogen forbindelse til databasen, så programmet hopper ned til Terminate, som er den allersidste linie i '.dpr' filen.
Mit umiddelbare bud er, at programmet forsøger at frigive noget allerede frigivne hukommelse, men hvordan kontrollerer jeg det ?
koden, hvor brugeren skal angive brugernavnet kører i en løkke, indtil der kommer et gyldgt eet, eller brugeren fortryder.
Hvis brugeren angiver et ugyldigt brugernavn og programmet forsøger at logge på databasen, vil det ikke lykkes. Programmet vi så vende tilbage til "Angiv brugernavn". Hvis brugeren i andet forsøg angiver et "tomt" eet og derefter fortryder efter at have fået at vide, at brugernavnet skal angives, så afslutter programmet, som det skal.
Kaldet til Application.Terminate satte jeg ind som et forsøg - fejlen kommer uanset, om den linie er der eller ej.
Jeg har prøvet med
begin Application.Initialize; Application.CreateForm(TFormMain, FormMain); if FormMain.ADOConnection.Connected then try Application.CreateForm(..); Application.CreateForm(..); Application.CreateForm(..); Application.CreateForm(..); Application.Run; except ShowMessage('Error in "try..except" block'); end else ShowMessage('Error in "else" block'); end.
Samme resultat. Programmet når ned til min egen fejlmelding 'Error in "else" block'. Det er først derefter toget kører af skinnerne.
Jeg har også prøvet at flytte oprettelsen af alle forme på nær Main ind i 'if' blokken. Så det må være noget på FormMain. Jeg vil skyde på 'ADOConnection' eller noget, der er knyttet til den. Hvis man indtaster et forkert brugernavn og derefter fortryder, kommer der ingen fejl.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.