Q&A

  • dbgrid 엑셀로 저장할때 예외처리
<!--CodeS-->
procedure TForm1.Button12Click(Sender: TObject); //엑셀로 저장
var
XL, XArr, XTitle: Variant;
i, j, k: Integer;
begin
     SaveDialog1.Execute;
with DataModule3.Query1 do begin

//타이틀 처리변수
//showmessage('필드 카운트:'+intTostr(DataModule3.Query1.FieldCount));

XTitle := VarArrayCreate([1, FieldCount], VarVariant);
//데이타 처리변수
XArr := VarArrayCreate([1, FieldCount], VarVariant);

try
//엑셀을 실행
XL := CreateOLEObject('Excel.Application');

except
MessageDlg('Excel이 설치되어 있지 않습니다.', MtWarning, [mbok], 0);
Exit;
end;

XL.WorkBooks.Add; //새로운 페이지 생성
XL.Visible := False;
XL.WorkSheets[1].Cells.NumberFormatLocal := '@';  //문자형으로 저장
i := 1;
k := 1;

while i <= FieldCount-1 do begin              //마지막 필드한개 엑셀저장 제외
XTitle[i] := Fields[i-1].FieldName; //필드네임
Inc(i);
end;

//타이틀처리
XL.Range['A1', CHR(64 + FieldCount)+'1'].Value := XTitle;
First;

while Not EOF do begin
j := 1;
while j <= FieldCount-1 do begin            //마지막 필드한개 엑셀저장 제외
if Fields[j-1].DataType = ftString then
//실제 값을 넣는 부분
XArr[j] := Fields[j-1].Value
else
XArr[j] := Fields[j-1].Value;
Inc(j);

end;
//셀에 값을 넣는다.
XL.Range['A' + IntToStr(k+1), CHR(64 + FieldCount) + IntToStr(k+1)].value := XArr;

Next;
Inc(k);
end;
//XL.Range[XL.WorkSheets[1].Cells[1, 1], XL.WorkSheets[1].Cells[1,6]].Interior.Color := clYellow;
//셀 크기 조정

XL.Range['A1', CHR(64 + FieldCount) + IntToStr(k)].select;
XL.Selection.Columns.AutoFit;
XL.Range['A1', 'A1'].select;
First;
if (SaveDialog1.FileName <> '') then                     //예외 처리
  begin
    XL.ActiveWorkbook.saveas(SaveDialog1.FileName);
    XL.ActiveWorkbook.Close;
  end
  else
    XL.ActiveWorkbook.Close;
    XL.quit;
  end;
end;
<!--CodeE-->

savedialog로 파일명 입력받아 저장하는 기능은 잘됩니다.
다만 예외처리라고 써있는 부분이 잘안되네요
savedialog에서 저장을 누르지 않고 취소를 눌렀을때 저장을 하지 않고 취소해야되는데
이부분을 잘모르겠어요 좀 도와주세요ㅜ
3  COMMENTS
  • Profile
    최용일 2008.10.24 00:28
    예외처리라고 쓰인 부분에서 하시는것이 아니라 TSaveDialog.Execute에서 하시는것이 맞습니다.
    if SaveDialog1.Execute = mrOK then // OK 버튼을 눌렀을 때...
    begin
    ......
    if (SaveDialog1.Filename ....)
    ...
    end;
  • Profile
    장진환 2008.10.24 01:10
    if SaveDialog1.Execute = mrOK then // OK 버튼을 눌렀을 때...

    if SaveDialog1.Execute = true then //savedialog에서 저장이 눌리면..

    mrok에서 에러나길래 검색해보니 나오네요 true, false로 반환하는군요~ 또 하나 배워갑니다 감사합니다 ^^
  • Profile
    최용일 2008.10.24 02:19
    이런... 실수했군요... ^^
    • TOMATO
    • 2008.10.24 19:26
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.10.24 19:34
      Test.exe 핸들을 가지고 메시지를 보내면 되지 않을까요.
    • 정경철
    • 2008.10.24 05:13
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.10.24 16:49
      pChar 말고 로컬 변수로 Array of Char[크기] 로 선언 후 사용해 보세요. 알아서 관리 됩니다. ^^
    • 이정욱
      2008.10.24 16:50
      사실 위의 에러에 관련된 부분은 윗 부분의 소스만을 가지고는 판단하기 어려울 것 같습니다.
    • 정경철
      2008.10.24 19:00
      DLL 함수 원형에 파라미터값이 char *out_print_flag 이처럼 되어 있어서 델파이에서 PChar 로 받...
    • 이정욱
      2008.10.24 19:55
      제 뜻이..그거였습니다. ^^ Array[크기] of Char...
    • 이정욱
      2008.10.24 16:54
      보통 Timeout 속성을 설정하고 사용하게 되죠.. 혹시 .socket.close 는 사용해 보셨나요?
    • 이승현
      2008.10.28 21:47
      넵 다 안됩니다. ㅜ.ㅜ
    • 아르스
    • 2008.10.24 03:06
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 아르스
      2008.10.24 03:20
      ExtractICon(HInstance, 'C:\icon.dll', 0); 이런식으로 뽑아서 쓰면 되네요 ^^
    • 아르스
      2008.10.28 18:48
      음... 뭐가 문제인지 몰라도 아이콘이 추출되었다 안되었다 하는거 같네요..
    • TOMATO
    • 2008.10.24 00:00
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2008.10.24 00:28
      예외처리라고 쓰인 부분에서 하시는것이 아니라 TSaveDialog.Execute에서 하시는것이 맞습니다. if Save...
    • 장진환
      2008.10.24 01:10
      if SaveDialog1.Execute = mrOK then // OK 버튼을 눌렀을 때... if SaveDialog1.Execute = true the...
    • 최용일
      2008.10.24 02:19
      이런... 실수했군요... ^^
    • 황성일
    • 2008.10.23 02:59
    • 0 COMMENTS
    • /
    • 0 LIKES
    • phono
      2008.10.23 21:56
      기본 데이터 컨트롤에 있는 그리드로는 안되구요.. 그래서 그리드보다는 db 컨트롤 그리드가 마련되...
    • 소울해커
      2008.10.24 02:06
      DBGrid 안에 라디오버튼을 넣으실려면 상당히 복잡합니다. 대충 그려보면 private rdFirst,...
    • 장성호
      2008.10.23 00:38
      뭐 대부분 다음과 같이 하면 됩니다. WebBroswer1.OleObject.Document.ParentWindow.ScrollTo( Y ...
    • 이강석
      2008.10.23 00:46
      음....근데 Y, X의 좌표는 어디서 나오는건지 제가 무식해서~~ㅠㅠ
    • 장성호
      2008.10.23 01:07
      기냥 맨 마지막으로 보내려면 WebBrower1.OleObject.Document.DocumentElement.scrollTop :=20000000...
    • 이강석
      2008.10.23 01:56
      음..위에처럼 엄청 큰숫자를 줬어도..... 스크롤을 중간에다가 놓고... 저 조건을 타면 중간정도로...
    • 장성호
      2008.10.23 02:52
      테스트 해보니 Naver.com , daum.net ,paran.com 은 되구.. empas.com 은 안되구 http://ww...
    • 이강석
      2008.10.23 03:01
      아...^^ 넵 감사합니다...찾아볼꼐요...^^
    • 이강석
      2008.10.24 02:08
      OleDocument.body.scrollTop := OleDocument.body.scrollHeight; 이렇게 하니깐 되긴 되는데...제대...
    • 이정욱
      2008.10.25 09:06
      Fields Edit에서 아예 설정 하지 않으면 저절로 모든 필드가 세팅됩니다. 그렇게 사용하시면 될거 같은데...
    • 정경철
      2008.11.13 06:32
      Fields Edit에서 표시 형식이나... Excel 로 변환 할때 Field 순서등을 지정 하기 위에서 설정을 하였습...
    • 소울해커
      2008.10.24 01:41
      그리드에 piter 여부 사과 감 귤 001 Y ㅁ <-체크 ㅁ ...
    • 꼬꼬마
      2008.10.24 20:38
      감사합니다~~ 한가지 질문이 있는데요~~ grid.SetCheckBoxState(3, i, (grid.Cells[0, i] = '001')...
    • 소울해커
      2008.10.24 21:38
      grid.SetCheckBoxState(3, i, (grid.Cells[0, i] = '001') and (grid.Cells[1, i] = 'Y') ); grid.Se...
    • 꼬꼬마
      2008.10.25 00:00
      점심 식사는 하셨나요^^ 좋은 정보 많이 주시는데... 갑자하 하다가 궁금증이 생겨서요... 날...
    • 소울해커
      2008.10.25 00:47
      쿼리에서 날짜와 지역으로 DISTINCT 해서 불러오거나 GROUP BY로 불러오거나 ROWNUM 으로 중복값을...
    • 꼬꼬마
      2008.10.25 01:13
      근데요... 중복값을 제가한다는게... 어떻게 보면 중복값이 아니지 않나여? 날짜 ...
    • 소울해커
      2008.10.25 01:59
      셀병합을 말씀하시는 것 같은데... 그거라면 위에 쓴건 필요없구요. 일단 쿼리에서 정렬순서를 날짜...
    • • • •
    • 정경철
      2008.10.22 20:07
      이 메시지만 보면.. SQL 문장이 잘못 된것 같은데 SQL 조건절이나 ODBC를 다시 한번 확인 해 보십시오.
    • 가르쳐주삼
      2008.10.22 23:29
      ODBC 문제였네요~^^ 감사합니다.
    • 홍성락
      2008.10.23 04:42
      아마! 인덱스가 넘는다는 건데요. 소스상에서 ...Bitmap.Scanline[인덱스]의 소스를 디버깅 해보세요. ...
    • 정경철
      2008.10.22 20:05
      혹시..전송속도가 많지 않을 싶은데 전송속도를 한번 맞춰 보십시오. 보통 9600bps 로 되어 있는데 48...
    • 황성일
      2008.10.22 20:13
      9600bps로 해야지만 저렇게 숫자가 제대로 나오고요 나머지는 다 이상한 외계어 문자들이 찍히내요
    • 이정욱
      2008.10.22 20:55
      저것은 외계어가 아닌 프로토콜 상의 시작과 끝을 알려주는 문자 같습니다. 숫자가 제데로 들어오니까요....
    • 석주현
      2008.10.22 21:30
      개발사에 프로토콜을 의뢰 하시는게 맞을 겁니다. 달랑 저거 하나만 쓰는 경우라면 모르지만 보통 다...
    • 황성일
      2008.10.22 21:48
      아 답변들 감사합니다. 머라고 말하긴 점 그렇지만-.- 당황스럽게도 이 리더기 개발사 망했더군요;; ...
    • 장성호
      2008.10.22 05:18
      가능합니다. var fZoom: Double; // 축소하기 (Zoom-Out) procedure TForm1.Button2Click...
    • 이강석
      2008.10.22 18:48
      감사합니다...^^
    • 문형국
    • 2008.10.21 23:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.10.22 08:01
      이건 보통dll이 아니네요, Register에 등록 부터하여야 합니다. 델파이에서 'import Type Library'로 dll...
    • 문형국
      2008.10.30 10:58
      답변 감사드립니다. 시도해 보겠습니다. 꾸벅~
    • 이정욱
      2008.10.25 09:08
      TBX툴바에 대해 조금 더 자세한 정보를....
    • 아르스
      2008.10.27 20:38
      아... TBX가 Toolbar2000이(tb2k)이랑 서로 호환되지 않으면(패치를 했다손 치더라도) 이런 문제가 발...
    • 델파인
    • 2008.10.21 20:03
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2008.10.21 19:31
      간단하게 실행파일명 뒤에 파라매터를 추가하세요 Winexec('xxx.exe parameter1 parameter2', SW_SHOW...
    • 장성호
      2008.10.21 20:52
      WinExec보다는 ShellExecute 나 CreateProcess 를 이용하는것이 좋습니다. 참조 http://blog.naver...