Q&A

  • 'Accessviolation at address ...'에러 해결을 좀,,,ㅠ.ㅠ
이런 에러가 나오는데 어떻게 해결할까여??



Project Sibis.exe raised exception class EAccessViolation with message

'Accessviolation at address 0043995B in module 'SIBIS.EXE'. Read or address FFFFFFFF.

Process stopped. Use Step or Run to continue.





procedure TfmMain.FormCreate(Sender: TObject);

var

TheReg: TRegistry;

KeyName: String;

//ValueStr: String;

begin

if MessageDlg('데이터베이스를 선택하시겠습니까?',mtInformation,[mbYes,mbNo],0)= mrYes then

begin

TheReg := TRegistry.Create;

try

TheReg.RootKey := HKEY_CURRENT_USER;

KeyName := 'SoftwareODBCODBC.INISiBeeODBC';

if TheReg.OpenKey(KeyName, False) then

begin

if OpenDialog1.Execute then <--------- 이부분에서 오류가 나네여???

begin

TheReg.WriteString('DBQ',OpenDialog1.FileName);

TheReg.CloseKey;

end;

end;

finally

TheReg.Free;

end;

fmMain.StatusBar1.SimpleText:= '현재 작업중인 데이터베이스는 '+OpenDialog1.FileName+ ' 입니다';

end;

Database1.Open;

//OpenDialog1.FileName;

GetConfiguration;

end;

3  COMMENTS
  • Profile
    최용일 2000.05.02 23:29
    안녕하세요. 최용일입니다.



    예전에도 말씀드렸지만 위의 에러는 디버깅해보기 전에는 알수없는 경우가 많습니다.



    김일영님의 말씀처럼 OpenDialog1이 없을 수도 있습니다.



    이렇게 한번해보세요. 이렇게 디버깅했는데도 Accessviolation 에러가 난다면 이문제는



    다른곳에서 일어난 에러입니다. Accessviolation에러는 어쩔땐 전혀 엉뚱한 위치를



    알려줄 수도 있으므로 착실히 디버깅해보세요...



    if TheReg.OpenKey(KeyName, False) then

    begin

    // if OpenDialog1.Execute then

    begin

    TheReg.WriteString('DBQ',여기에 풀패스 파일이름을 적어주세요);

    // 예) TheReg.WriteString('DBQ','c:abc.db');

    TheReg.CloseKey;

    end;

    end;



    차니 wrote:

    > 이런 에러가 나오는데 어떻게 해결할까여??

    >

    > Project Sibis.exe raised exception class EAccessViolation with message

    > 'Accessviolation at address 0043995B in module 'SIBIS.EXE'. Read or address FFFFFFFF.

    > Process stopped. Use Step or Run to continue.

    >

    >

    > procedure TfmMain.FormCreate(Sender: TObject);

    > var

    > TheReg: TRegistry;

    > KeyName: String;

    > //ValueStr: String;

    > begin

    > if MessageDlg('데이터베이스를 선택하시겠습니까?',mtInformation,[mbYes,mbNo],0)= mrYes then

    > begin

    > TheReg := TRegistry.Create;

    > try

    > TheReg.RootKey := HKEY_CURRENT_USER;

    > KeyName := 'SoftwareODBCODBC.INISiBeeODBC';

    > if TheReg.OpenKey(KeyName, False) then

    > begin

    > if OpenDialog1.Execute then <--------- 이부분에서 오류가 나네여???

    > begin

    > TheReg.WriteString('DBQ',OpenDialog1.FileName);

    > TheReg.CloseKey;

    > end;

    > end;

    > finally

    > TheReg.Free;

    > end;

    > fmMain.StatusBar1.SimpleText:= '현재 작업중인 데이터베이스는 '+OpenDialog1.FileName+ ' 입니다';

    > end;

    > Database1.Open;

    > //OpenDialog1.FileName;

    > GetConfiguration;

    > end;

  • Profile
    김일영 2000.05.02 22:45
    에러가 생긴 곳으로 봐서는 영 이해가 안되긴 하네요...

    원래 Access Violation 에러는 원인을 잘 알 수가 없잖아요.

    하지만 일단 OpenDialog1에서 에러가 나는 것이니까

    메인 폼에 OpenDialog1이 없을 가능성도 있네요.

    (그럴 가능성이 아주 작긴 해도) frmMain에 있는 TOpenDialog 컴포넌트의

    Name이 OpenDialog1이 맞는건지 모르겠네요.

    이거, 너무 기본적인걸 짚어서 실례인지는 모르겠지만... 올려주신

    내용만으로는 다른건 짐작할 수가 없어서요.

    아마도 아니실 것 같긴 한데... 좀 더 자세한 상황을 알려주시면

    더 생각해 보겠습니다.

    =======================================================================

    차니 wrote:

    > 이런 에러가 나오는데 어떻게 해결할까여??

    >

    > Project Sibis.exe raised exception class EAccessViolation with message

    > 'Accessviolation at address 0043995B in module 'SIBIS.EXE'. Read or address FFFFFFFF.

    > Process stopped. Use Step or Run to continue.

    >

    >

    > procedure TfmMain.FormCreate(Sender: TObject);

    > var

    > TheReg: TRegistry;

    > KeyName: String;

    > //ValueStr: String;

    > begin

    > if MessageDlg('데이터베이스를 선택하시겠습니까?',mtInformation,[mbYes,mbNo],0)= mrYes then

    > begin

    > TheReg := TRegistry.Create;

    > try

    > TheReg.RootKey := HKEY_CURRENT_USER;

    > KeyName := 'SoftwareODBCODBC.INISiBeeODBC';

    > if TheReg.OpenKey(KeyName, False) then

    > begin

    > if OpenDialog1.Execute then <--------- 이부분에서 오류가 나네여???

    > begin

    > TheReg.WriteString('DBQ',OpenDialog1.FileName);

    > TheReg.CloseKey;

    > end;

    > end;

    > finally

    > TheReg.Free;

    > end;

    > fmMain.StatusBar1.SimpleText:= '현재 작업중인 데이터베이스는 '+OpenDialog1.FileName+ ' 입니다';

    > end;

    > Database1.Open;

    > //OpenDialog1.FileName;

    > GetConfiguration;

    > end;

  • Profile
    차니 2000.05.02 23:32
    답변 감사합니다...폼에는 TOpenDialog 컴포넌트가 있구여 name두 맞구여...

    프로그램을 실행시키면 첫 부분이거든여....

    데이터 베이스를 선택하시겠습니까에서 NO를 선택하면 문제가 없는데...YES를 선택하면 에러가 나더군여...디비는 accesse DB구여...

    ==================================================================



    Project Sibis.exe raised exception class EAccessViolation with message

    'Accessviolation at address 0043995B in module 'SIBIS.EXE'. Read or address FFFFFFFF.

    Process stopped. Use Step or Run to continue.





    procedure TfmMain.FormCreate(Sender: TObject);

    var

    TheReg: TRegistry;

    KeyName: String;

    //ValueStr: String;

    begin

    if MessageDlg('데이터베이스를 선택하시겠습니까?',mtInformation,[mbYes,mbNo],0)= mrYes then <---- YES를 선택하면 밑에서 에러 NO를 선택하면 문제 없음

    begin

    TheReg := TRegistry.Create;

    try

    TheReg.RootKey := HKEY_CURRENT_USER;

    KeyName := 'SoftwareODBCODBC.INISiBeeODBC';

    if TheReg.OpenKey(KeyName, False) then

    begin

    if OpenDialog1.Execute then <--------- 이부분에서 오류가 나네여???

    begin

    TheReg.WriteString('DBQ',OpenDialog1.FileName);

    TheReg.CloseKey;

    end;

    end;

    finally

    TheReg.Free;

    end;

    fmMain.StatusBar1.SimpleText:= '현재 작업중인 데이터베이스는 '+OpenDialog1.FileName+ ' 입니다';

    end;

    Database1.Open;

    //OpenDialog1.FileName;

    GetConfiguration;

    end;