Q&A

  • A:드라이브가 말썽 입니다.
수고 많습니다.



지금 데이타 백업하는 작업을 하고 있는데요,



타겟 디렉토리를 정하기 위해서 DirectoryListBox,DriveComboBox 두 놈을



쓰고 있습니다. 그래서 경로를 가져와서 백업을 하려하는데요,



백업은 성공적으로 되는데, DriveComboBox에서 A:드라이브를 선택하고 난후



디스켓이 없으면 아주 누워버립니다.



에러메시지 --> ElnOutError 'I/O error 21'



그래서 시작그리고완성에 있는 A:드라이브를 체크하는 함수를 갔다가



썼습니다.



function TData_Backup.DiskInDrive(Drive : String):Boolean;

var

ErrorMode : word;

Driver : Char;

begin

Driver := UpCase(Drive[1]);

if not (Driver in ['A'..'Z']) then

raise EConvertError.Create('Not a Valid drive id');

ErrorMode := SetErrorMode(SEM_FailCriticalErrors);

try

if DiskSize(Ord(Driver) - $40) = -1 then

DiskInDrive := False

else

DiskInDrive := True;

Finally

SetErrorMode(ErrorMode);

end;

end;



procedure TData_Backup.DriveComboBox1Click(Sender: TObject);

var i : integer;

begin

if DiskInDrive(DriveComboBox1.Text) = False then begin

ShowMessage('fuck'); <-- 딱 요기 까지 실행됨.

Exit;

end;

end;



그리고는 메세지 뿌려주고 확인버튼 누르면 당연하다는 듯이 누워버립니다



이 일을 어찌하면 좋겠습니까, 위대한 여러분들의 조언을 부탁드립니다.



아니면, DriveComboBox에서 아예 ComboBox에서 처럼 item추가 하듯이



A:드라이브를 빼버리는 방법이라도... 헐



데이타가 많아서 디스켓은 택도 없습니다.



4  COMMENTS
  • Profile
    구창민 2000.02.10 06:04
    최재원 wrote:

    > 수고 많습니다.

    >

    > 지금 데이타 백업하는 작업을 하고 있는데요,

    >

    > 타겟 디렉토리를 정하기 위해서 DirectoryListBox,DriveComboBox 두 놈을

    >

    > 쓰고 있습니다. 그래서 경로를 가져와서 백업을 하려하는데요,

    >

    > 백업은 성공적으로 되는데, DriveComboBox에서 A:드라이브를 선택하고 난후

    >

    > 디스켓이 없으면 아주 누워버립니다.

    >

    > 에러메시지 --> ElnOutError 'I/O error 21'

    >

    > 그래서 시작그리고완성에 있는 A:드라이브를 체크하는 함수를 갔다가

    >

    > 썼습니다.

    >

    > function TData_Backup.DiskInDrive(Drive : String):Boolean;

    > var

    > ErrorMode : word;

    > Driver : Char;

    > begin

    > Driver := UpCase(Drive[1]);

    > if not (Driver in ['A'..'Z']) then

    > raise EConvertError.Create('Not a Valid drive id');

    > ErrorMode := SetErrorMode(SEM_FailCriticalErrors);

    > try

    > if DiskSize(Ord(Driver) - $40) = -1 then

    > DiskInDrive := False

    > else

    > DiskInDrive := True;

    > Finally

    > SetErrorMode(ErrorMode);

    > end;

    > end;

    >

    > procedure TData_Backup.DriveComboBox1Click(Sender: TObject);

    > var i : integer;

    > begin

    > if DiskInDrive(DriveComboBox1.Text) = False then begin

    > ShowMessage('fuck'); <-- 딱 요기 까지 실행됨.

    > Exit;

    > end;

    > end;

    >

    > 그리고는 메세지 뿌려주고 확인버튼 누르면 당연하다는 듯이 누워버립니다

    >

    > 이 일을 어찌하면 좋겠습니까, 위대한 여러분들의 조언을 부탁드립니다.

    >

    > 아니면, DriveComboBox에서 아예 ComboBox에서 처럼 item추가 하듯이

    >

    > A:드라이브를 빼버리는 방법이라도... 헐

    >

    > 데이타가 많아서 디스켓은 택도 없습니다.

    >





    디스켓의 삽입여부만 판단하시기 위함이라면

    Try Except..End로 캡쳐하셔도 충분할거 생각됩니다.

    에러가 발생해서 Except로 진입하면

    장치가 준비되지 않았다는 메세지를 내 보내시면 될것같습니다.

    그럼, 즐거운 프로그래밍이 되시길~

  • Profile
    최재원 2000.02.10 20:39
    먼저 답변해 주신것 감사합니다.



    메세지 던져 주는 것은 가능한데요,



    문제는 한번 드라이브를 읽고, 메세지 뿌려주고 난 후 드라이브를



    한번 더 읽고 누워버립니다.



    왜 메세지에서 확인 버튼후 Exit, Close 가 전혀 안 먹을 까요?????



    할 일이 태산 같으데 정말 미치겠습니다.



    바쁘시겠지만 한번 더 조언을 부탁드립니다.

  • Profile
    구창민 2000.02.10 21:47
    최재원 wrote:

    > 먼저 답변해 주신것 감사합니다.

    >

    > 메세지 던져 주는 것은 가능한데요,

    >

    > 문제는 한번 드라이브를 읽고, 메세지 뿌려주고 난 후 드라이브를

    >

    > 한번 더 읽고 누워버립니다.

    >

    > 왜 메세지에서 확인 버튼후 Exit, Close 가 전혀 안 먹을 까요?????

    >

    > 할 일이 태산 같으데 정말 미치겠습니다.

    >

    > 바쁘시겠지만 한번 더 조언을 부탁드립니다.





    제가 똑같이 테스트를 한번 해 보았습니다.

    그러나 아무 문제없이 잘 작동하던걸요?

    아래 함수는 아무 문제가 없어 보입니다.

    다른 PC에서도 테스트를 한번 거쳐보세요.

    그럼, 즐거운 프로그래밍 하시구요~



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, FileCtrl;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    DriveComboBox1: TDriveComboBox;

    procedure DriveComboBox1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    function DiskInDrive(Drive : String):Boolean;

    var

    ErrorMode : word;

    Driver : Char;

    begin

    Driver := UpCase(Drive[1]);

    if not (Driver in ['A'..'Z']) then

    raise EConvertError.Create('Not a Valid drive id');

    ErrorMode := SetErrorMode(SEM_FailCriticalErrors);

    try

    if DiskSize(Ord(Driver) - $40) = -1 then

    DiskInDrive := False

    else

    DiskInDrive := True;

    Finally

    SetErrorMode(ErrorMode);

    end;

    end;



    procedure TForm1.DriveComboBox1Click(Sender: TObject);

    begin

    if DiskInDrive(DriveComboBox1.Text) = False then

    begin

    ShowMessage('디스켓을 꽂아줘..');

    Exit;

    ShowMessage('음냐리..');

    end;

    end;



    end.

  • Profile
    최재원 2000.02.10 23:13
    먼저 이렇게 직접 테스트 까지 해주시고, 두번씩이나 답변해 주신것 정말 감사합니다.



    제가 테스트 하던 경우는 델파이에서 기냥 RUN 후에, reset을 해야 하기 때문이어서



    .exe실행시에도 그렇게 되는 줄 알았는데요 밖에서 델파이 없이 직접 실행 하니까



    그냥 'I/O Error 21'만 나고 프로그램이 다운되지는 않는군요.



    정말 어처구니가 없습니다.



    근데 제가 어처구니 없는 초보라서 그러는데요, 'I/O Error'가 혹시 어떤 알수 없는



    에러의 원인이 되지 않을까 하면서 다시 한번 답변에 감사 드리며 어처구니 없는



    초보를 부디 이쁘게 봐주시기 바랍니다.



    감사합니다.





    • 김광섭
      2000.02.10 19:42
      초짜베기 wrote: > 제목으로 보아 조금 에메모호하죠. > 질문 내용은 다음과 같습니다. > > 즉, 특정 ...
    • 김광섭
      2000.02.10 19:52
      무림식객 wrote: > 델파이 무림식객입니다. > 테이블을 가장 빠르게 초기화 하려는데 어떻게 하여야 하는...
    • 김천식
    • 2000.02.10 18:07
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김광섭
      2000.02.10 19:58
      김천식 wrote: > 테이블의 특정필드 내용을 다른 필드로 일괄 복사하려는데 가장 효과적으로 > 복사하는 ...
    • 김천식
      2000.02.10 23:57
      테이블에서 테이블간의 필드 복사가 아니고 하나의 테이블에서 필드간 자료 교환이 방법입니다. 즉, A필...
    • 이영헌
    • 2000.02.10 16:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김광섭
      2000.02.10 20:07
      이영헌 wrote: > 안녕하십니까? 좋은 아침입니다. > > 퀵레포트 양식이 전체 30줄 인쇄할 크기입니다. ...
    • 김광섭
      2000.02.10 20:22
      전성환 wrote: > 안녕하십니까? > > 저는 퀵레포트를 처음 사용해봅니다. > 이러한 질문을 하는게 부...
    • 이재식
      2000.02.10 12:47
      무지한 wrote: > isam파일인지 정확히는 모르겠지만 아마 isam인걸루 알구있는 > > 파일이 하나 있는데...
    • 무지한
      2000.02.11 11:58
      > Isam파일은 어떤 툴을 이용해서 직접 디비화 하는 방법은 모르겠는데요, > 혹 그것이 cobol로 되어있...
    • 델초
    • 2000.02.10 08:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 배꼽
    • 2000.02.10 08:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2000.02.10 10:39
      배꼽 wrote: > 게시판의 글을 쭉~~~ 읽어 보니요. > 버튼을 실시간으로 움직일 수 있는 것이 있더라고요...
    • 민석이
    • 2000.02.10 07:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      2000.02.10 08:14
      민석이 wrote: > 다름이 아니라. 이미지 확대 축소를 할려고 하는데 > 화살표 키 값을 몰라 고생하고 있...
    • 초짜
    • 2000.02.10 05:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2000.02.10 06:09
      초짜 wrote: > 스피드버튼과 같은 윈도우 컨트롤에 키이벤트를 넣으려면 어찌해야 > 하나요? > 비튼 버...
    • 최종민
    • 2000.02.10 05:11
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      2000.02.10 07:03
      최종민 wrote: > 아...매일 질문하는 종민입니다... > 제가 form을 두개 만들었답니다... > 둘다 자동생...
    • 허진
    • 2000.02.10 04:27
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2000.02.10 06:08
      허진 wrote: > 프로그램에서 환경을 변경한 후에 > > 종료를 하고 다시 프로그램을 실행하고 싶거던요....
    • 이재식
      2000.02.10 06:05
      허진 wrote: > 프로그램에서 환경을 변경한 후에 > > 종료를 하고 다시 프로그램을 실행하고 싶거던요....
    • 최재원
    • 2000.02.10 03:55
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2000.02.10 06:04
      최재원 wrote: > 수고 많습니다. > > 지금 데이타 백업하는 작업을 하고 있는데요, > > 타겟 디렉토...
    • 최재원
      2000.02.10 20:39
      먼저 답변해 주신것 감사합니다. 메세지 던져 주는 것은 가능한데요, 문제는 한번 드라이브를 읽고, ...
    • 구창민
      2000.02.10 21:47
      최재원 wrote: > 먼저 답변해 주신것 감사합니다. > > 메세지 던져 주는 것은 가능한데요, > > 문제...
    • 최재원
      2000.02.10 23:13
      먼저 이렇게 직접 테스트 까지 해주시고, 두번씩이나 답변해 주신것 정말 감사합니다. 제가 테스트 하던...
    • 엄화용
    • 2000.02.10 03:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김광섭
      2000.02.10 23:34
      엄화용 wrote: > * 디비그리드를 이용해서 자료사전을 만들었습니다. > 디비그리드에 레코드수를 20개...
    • 이재식
      2000.02.10 08:13
      엄화용 wrote: > * 디비그리드를 이용해서 자료사전을 만들었습니다. > 디비그리드에 레코드수를 20개...