Q&A

  • 인재씨의 도움이 필요
그동안의 답변에 깊은 감사를 드리며

한번더 질문을 드립니다.



한 테이블에 자료가 약 3백만건이 있습니다.

무리인것은 알지만 database는 MS_ACCESS를 이용하구요.



이 테이블에 약 3만건의 자료를 넣을려고 하는데

자료가 있는지 없는지를 FindKey를 쓰지 않고(검색시간이 많이 걸리므로)



try..except or Finally 를 이용하려고 합니다.



즉 현재 저장하고자 하는 자료가 있으면 예외처리를 하여



TRY

Table.open





while not table.eof do

begin



try

table.append

:

:

:

table.post



finally

table.next

end;



FINALLY

Table.close

AND;





위와 같은 방법으로 처리를 할 생각이었는데

(위으 코드 처럼 같은 key가 있을 경우는 저장하지 않습니다.)



기존의 같은 Primary Key가 있을 경우 table.next가 있는 구문으로

finally로 가서 다시 while문으로 가지 않고 바로 while문을 벗어나서



끝에 있는 FINALLY문으로 가버립니다.



제가 원하는 것은 같은 key가 있더라도 next가 실행하고 다시 다음 값을



저장하고 싶은데 말입니다.



너무 많은 것을 원하는 것 같아 죄송합니다만



답변을 해 주신다면 정말 고맙겠군요...



3  COMMENTS
  • Profile
    한재아 1999.07.19 19:24
    DbGrid상에 ComboBox를 넣어서 데이터를 바꾸어줄 수 있는지 알고싶습니다.

    자료를 DbGrid상에서도 바꾸어 주고싶은데 방법을 잘 모르겠어요

    어떻게 하면 좋은지 말씀해 주세요.

    재아올림

  • Profile
    신인재 1999.05.05 04:36
    <** 에구.... 지정 질문은 사양입니다. 저보다 뛰어나신 분들의

    도움을 받으시는데 지장이 있으니까요..... ***>



    아래의 내용을 살펴보니..

    try ...finally.. 의 사용에 대해 이해가 조금 부족한듯 싶습니다.

    finally는 예외처리 구문이라기 보다는 반다시 수행이 되어야 하는

    구문을 정의 하는 것입니다.

    예외 처리는 try... except로 하셔야 합니다. 따라서 제공하신 소스는

    아래와 같이 수정이 되어야 할 꺼 같습니다.



    TRY

    Table.open

    while not table.eof do

    begin

    try

    table.append

    :

    :

    :

    table.post



    except

    // do something or don't something

    end;

    table.next

    end; {end of while}

    FINALLY

    Table.close

    AND;





    음냐 오류가 있을 수도 있는데 걍 참고 하세요......

    다시한번 지정 질문 사양 입니다.....^^;

    배재민 wrote:

    > 그동안의 답변에 깊은 감사를 드리며

    > 한번더 질문을 드립니다.

    >

    > 한 테이블에 자료가 약 3백만건이 있습니다.

    > 무리인것은 알지만 database는 MS_ACCESS를 이용하구요.

    >

    > 이 테이블에 약 3만건의 자료를 넣을려고 하는데

    > 자료가 있는지 없는지를 FindKey를 쓰지 않고(검색시간이 많이 걸리므로)

    >

    > try..except or Finally 를 이용하려고 합니다.

    >

    > 즉 현재 저장하고자 하는 자료가 있으면 예외처리를 하여

    >

    > TRY

    > Table.open

    >

    >

    > while not table.eof do

    > begin

    >

    > try

    > table.append

    > :

    > :

    > :

    > table.post

    >

    > finally

    > table.next

    > end;

    >

    > FINALLY

    > Table.close

    > AND;

    >

    >

    > 위와 같은 방법으로 처리를 할 생각이었는데

    > (위으 코드 처럼 같은 key가 있을 경우는 저장하지 않습니다.)

    >

    > 기존의 같은 Primary Key가 있을 경우 table.next가 있는 구문으로

    > finally로 가서 다시 while문으로 가지 않고 바로 while문을 벗어나서

    >

    > 끝에 있는 FINALLY문으로 가버립니다.

    >

    > 제가 원하는 것은 같은 key가 있더라도 next가 실행하고 다시 다음 값을

    >

    > 저장하고 싶은데 말입니다.

    >

    > 너무 많은 것을 원하는 것 같아 죄송합니다만

    >

    > 답변을 해 주신다면 정말 고맙겠군요...

    >





  • Profile
    데빠이 1999.07.19 19:41
    한재아 께서 말씀하시기를...

    > DbGrid상에 ComboBox를 넣어서 데이터를 바꾸어줄 수 있는지 알고싶습니다.

    > 자료를 DbGrid상에서도 바꾸어 주고싶은데 방법을 잘 모르겠어요

    > 어떻게 하면 좋은지 말씀해 주세요.

    > 재아올림



    제가 가지고 있는 자료를 보니 있더군요. 도움이 되시길....



    출처: DSPF

    이것은 생각보다 아주 간단한 방법으로 구현할 수 있다. 즉 임의의 셀에 포커스가 도달하면 현재 셀의 위치로 콤보박스의 위치를 재설정하는 것이다. 물론 콤보박스의 Visible 속성은 기본적으로 False이며,포커스에 따라 조정할 수 있다. 간단히 소스가 위치할 이벤트와 해당 코드는 다음과 같으며, 디자인 시에 단지 DBLookupComboBox 하나를 임의의 위치로 놓아 둔다.



    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;

    const Rect: TRect; DataCol: Integer; Column: TColumn;

    State: TGridDrawState);

    begin

    if ( gdFocused in State ) then begin

    if ( Column.FieldName = DBLookupComboBox1.DataField

    ) then begin

    with DBLookupComboBox1 do begin

    Left := Rect.Left + DBGrid1.Left;

    Top := Rect.Top + DBGrid1.Top;

    Width := Rect.Right - Rect.Left;

    Visible := True;

    end;

    end;

    end;

    end;





    다단계 룩업 콤보박스 구현

    다단계 룩업 콤보박스를 쉽게 이해하기 위해 두 가지 예를 들어 보겠다.

    먼저 우편번호의 입력 과정을 생각해 보면, 도/시를 선택하고, 선택된 도/시에 속하는 군/구만을 두번째 콤보박스로 구성하고, 다시 선택된 군/구에 속하는 읍/동만을 콤보박스로 구성하는 것이다.

    둘째는 단지 우편번호 입력 뿐만 아니라 직업별 직급 선택 작업이다.

    금융기관처럼 많은 고객을 관리하면서 세부적인 인적사항까지 관리하는 업체는 직급을 정확히 기록하기 위해 직업별(계층별)로 직급을 조사해 DB화하고 있기 때문에 입력 과정에서도 이 분류를 실제로 이용하려고 한다.

    단적으로 두 가지 예만 들었지만, 이밖에도 다단계 룩업 콤보박스를 활용할 수 있는 부분은 많을 것이다. 참고로 다단계 룩업 콤보박스 외에 동적으로 생성시키는 방법으로 윈도우 95의 시작 메뉴 방식을 사용해도 좋을 것이다. 다음의 소스 코드와 <화면 3>은 우편번호를 콤보박스를 이용해 선택하는

    것을 보여준다.





    procedure TForm1.DBLookupComboBox1CloseUp(Sender: TObject);

    begin

    Edit1.Text := DBLookupComboBox1.Text;

    with Query2 do begin

    Close;

    SQL.Clear;

    SQL.Add('SELECT SI FROM ZIP9509 WHERE DOU =

    :DOU GROUP BY SI');

    ParamByName('DOU').AsString := Query1.FieldByName(

    'DOU').AsString;

    DBLookupComboBox2.KeyField := 'SI';

    DBLookupComboBox2.ListField := 'SI';

    Open;

    if RecordCount = 1 then begin

    Close;

    SQL.Clear;

    SQL.Add('SELECT GU FROM ZIP9509 WHERE DOU

    = :DOU GROUP BY GU');

    ParamByName('DOU').AsString := Query1.FieldByName(

    'DOU').AsString;

    DBLookupComboBox2.KeyField := 'GU';

    DBLookupComboBox2.ListField := 'GU';

    Open;

    end;

    DataSource3.Enabled := False;

    end;

    end;



    procedure TForm1.DBLookupComboBox2CloseUp(Sender: TObject);

    begin

    Edit1.Text := DBLookupComboBox1.Text + #32 +

    DBLookupComboBox2.Text;

    DataSource3.Enabled := True;

    with Query3 do begin

    Close;

    SQL.Clear;

    SQL.Add('SELECT DONG,ZIP FROM ZIP9509 WHERE DOU = :DOU ');

    if DBLookupComboBox2.KeyField = 'GU'

    then SQL.Add('AND GU = :GU')

    else SQL.Add('AND SI = :SI');

    ParamByName('DOU').AsString := Query1.FieldByName(

    'DOU').AsString;

    if DBLookupComboBox2.KeyField = 'GU'

    then

    ParamByName('GU').AsString := Query2.FieldByName(

    'GU').AsString

    else

    ParamByName('SI').AsString := Query2.FieldByName(

    'SI').AsString;

    Open;

    end;

    end;



    procedure TForm1.DBLookupComboBox3CloseUp(Sender: TObject);

    begin

    Edit1.Text := Edit1.Text + #32 +

    DBLookupComboBox3.Text;

    end;



    procedure TForm1.FormShow(Sender: TObject);

    begin

    with Query1 do begin

    Close;

    SQL.Clear;

    SQL.Add('SELECT DOU FROM ZIP9509 GROUP BY DOU');

    Open;

    end;

    Application.ProcessMessages;

    end;





    • 난 나
    • 1999.05.04 10:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영해
      1999.05.05 06:47
      난 나 wrote: > 퀵레포트에서요.. > 선처리를 점선으로 하고 싶거든요.. > > =======================...
    • 문보석
    • 1999.07.19 23:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.07.20 02:52
      VCL은 없구 API로는 구현이 가능합니다. 하지만 만만치 않은 작업이 되겠죠. 참고가 될 API들을 말씀드리...
    • 고혜정
      1999.05.05 03:58
      QRReport를 이용해서 보고서를 만들고 있는데, 자료가 출력될때 5개 나오고 선나오고 그리고 계속해서 이런...
    • 신인재
      1999.05.05 05:08
      음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... QRShape를 이용하는 방법인데 이것...
    • 김영해
      1999.05.05 06:34
      신인재 wrote: > 음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... > > QRShape를 이...
    • 강경중
    • 1999.05.05 04:14
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 권도은
      1999.07.19 22:31
      시리얼 통신을 하는 중 CE_OVERRUN 이라는 에러 메세지가 자꾸 뜨면서 통신 불능상태가 되어버리는데 이...
    • 1999.05.05 06:23
      강경중 wrote: > 저는 네트웍 체팅 프로르램을 짤려고 하는 초보 델피언 입니다. > 채팅 클라이언트가 실...
    • 정윤옥
    • 1999.07.19 22:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      1999.07.20 00:31
      정윤옥 께서 말씀하시기를... > 버튼에 클릭이벤트를 강제로 보낼려고 합니다 > sendmessage(button1.Ha...
    • 이상철
    • 1999.05.05 06:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.06 06:10
      이상철 wrote: > 안녕하세요 델파이 를 무지 좋아하는 상철입니당 > 소스는 정확히 몰르구요 하지만 대충...
    • 고혜정
    • 1999.05.05 03:58
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 정호창
      1999.07.19 21:46
      델파이 응용프로그램 실행중 Query, Table의 Data를 dbf로 만들어낼 수 있는지 있다면 방법을 알려주심 고...
    • 신인재
      1999.05.05 05:08
      음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... QRShape를 이용하는 방법인데 이것...
    • 김영해
      1999.05.05 06:34
      신인재 wrote: > 음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... > > QRShape를 이...
    • 배재민
    • 1999.05.05 00:28
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 한재아
      1999.07.19 19:24
      DbGrid상에 ComboBox를 넣어서 데이터를 바꾸어줄 수 있는지 알고싶습니다. 자료를 DbGrid상에서도 바꾸어...
    • 신인재
      1999.05.05 04:36
      아래의 내용을 살펴보니.. try ...finally.. 의 사용에 대해 이해가 조금 부족한듯 싶습니다. finall...
    • 데빠이
      1999.07.19 19:41
      한재아 께서 말씀하시기를... > DbGrid상에 ComboBox를 넣어서 데이터를 바꾸어줄 수 있는지 알고싶습니다...
    • 강경중
    • 1999.05.05 04:14
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 남윤혁
      1999.07.19 18:32
      질문입니다. DBGrid에서 만약 ID와 NAME이 있다면 저는 ID는 기존의 값을 그냥 이용하고 NAME만 ...
    • 1999.05.05 06:23
      강경중 wrote: > 저는 네트웍 체팅 프로르램을 짤려고 하는 초보 델피언 입니다. > 채팅 클라이언트가 실...
    • 유도삼
      1999.07.31 05:41
      남윤혁 께서 말씀하시기를... > 질문입니다. > > DBGrid에서 만약 ID와 NAME이 있다면 > > 저는 ID...
    • 고혜정
      1999.05.05 03:58
      QRReport를 이용해서 보고서를 만들고 있는데, 자료가 출력될때 5개 나오고 선나오고 그리고 계속해서 이런...
    • 신인재
      1999.05.05 05:08
      음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... QRShape를 이용하는 방법인데 이것...
    • 김영해
      1999.05.05 06:34
      신인재 wrote: > 음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... > > QRShape를 이...
    • 김종성
    • 1999.07.19 10:51
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 왕초보
      1999.05.05 01:56
      프로젝트를 진행할때 필요에 따라 새로운 폼을 만들고 저의 경우에는 폼 레벨에서 font를 굴림체로 지정하...
    • 권경부
      1999.07.20 08:35
      아래의 내용만가지고는 어디가 잘못되었는지 알수 없습니다. SaveAsClick 이벤트역시 봐야 하구요... '제...
    • 안치봉
      1999.05.05 02:28
      왕초보 wrote: > 프로젝트를 진행할때 필요에 따라 새로운 폼을 만들고 저의 경우에는 > 폼 레벨에서 fon...
    • 이호선
      1999.05.05 02:24
      안녕하세요. Lightlib상용버전에 대하여 가격이 궁금합니다. 나이렉스가 총판이라 알고 있습니다. Delph...
    • jini
      1999.07.19 18:25
      신은석 께서 말씀하시기를... > 안녕하십니까? 혹시 방법을 알고 계시는 분은 빠른 답변을 주세요. > 보...
    • 이정욱
      1999.05.06 11:46
      LightLib의 Image를 말씀하시는것입니까? 그렇다면 그것보다는 ImageLib를 추천해 드립니다. LightLib의 ...
    • 박홍석
      1999.07.19 08:19
      안녕하세요. 미리보기 화면을 구현하고 있는데 Label에 폰트와 크기를 지정하고 PaintBox에 TextOut을 ...
    • 안치봉
      1999.05.05 02:28
      왕초보 wrote: > 프로젝트를 진행할때 필요에 따라 새로운 폼을 만들고 저의 경우에는 > 폼 레벨에서 fon...
    • 장영철
    • 1999.07.19 04:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 유도삼
      1999.07.31 10:25
      장영철 께서 말씀하시기를... > 며칠을 고민하고 고민하고 했지만 도저히 > 해결못할 문제라 여러 도사...
    • 안치봉
      1999.05.05 01:25
      하윤철 wrote: > 1. Tab control을 올려놓고 폼 색상을 바꾸면... > 텝들의 색상은 따라서 안바뀌고 ...
    • 1999.05.05 01:04
      김지건 wrote: > 프로그램이 실행중에 있을때 TalNet.exe라를 실행화일이 > > 죽는 것을 방지하고 싶...
    • 1999.07.20 00:01
      김창환 께서 말씀하시기를... > 서버 어플리케이션에 Query가 있습니다. > 클라이언트에서 검색하고자 하...