Q&A

  • 저의 문제는 아무도 해결할수 없나요? 답이 없어요~!
안녕하세요.

이 글을 읽고 계신 고수님과 여러분들에게 급하게 답을 구하고자 합니다. 제발..(TT)



현제 Delphi5를 사용하고 있으며 Paradox DB를 사용하고 있습니다.

Form상에 Edit Box, Table, DBGrid를 가지고 있습니다.

DBGrid의 내용은 Edit Box에서 입력된 값을 기준으로 Table을 Filter하여 보여주며

신규 Data의 입력시 또한 Edit Box의 값을 포함하여 Record를 등록하고 싶어요.

예를 들어 설명하겠습니다.

Kind, Code, Name으로 구성된 Table을 가지고 있으며 이중 Kind Field는 Edit Box로

입력 되어진 값과 같습니다.

DBGrid에 보여지는 값들은 Table Filter를 통하여 걸러진 상태 입니다.

그리고 Table의 Fields Edit를 이용하여 Kind Field는 프로퍼티에서 Read Only값을

True로 설정하여 사용자가 수정하지 못하게 하였습니다.

즉 사용자는 DBGrid에서 Code갑과 Name값만을 입력하고 프로그램에서 Kind값은 자동

적으로 입력되어 지도록 만들고 싶어요.

그런데 Table의 Filter는 되지만 새로운 Record의 추가시 Edit Box에 입력 되어진

값을 사용자가 입력한 Code와 Name값을 포함하여 등록을 하고 싶은데 계속 Error가

발생하는 군요.

전 Table Event의 BeforeInsert와 AfterInsert를 이용해 보았지만 달리 방법을 찾기

힘드네요.

무지 급한데 누구 아시는 분은 제발 빠른 답변을 부탁드립니다.

4  COMMENTS
  • Profile
    김광섭 2001.02.17 18:43
    궁금증 wrote:

    > 안녕하세요.

    > 이 글을 읽고 계신 고수님과 여러분들에게 급하게 답을 구하고자 합니다. 제발..(TT)

    >

    > 현제 Delphi5를 사용하고 있으며 Paradox DB를 사용하고 있습니다.

    > Form상에 Edit Box, Table, DBGrid를 가지고 있습니다.

    > DBGrid의 내용은 Edit Box에서 입력된 값을 기준으로 Table을 Filter하여 보여주며

    > 신규 Data의 입력시 또한 Edit Box의 값을 포함하여 Record를 등록하고 싶어요.

    > 예를 들어 설명하겠습니다.

    > Kind, Code, Name으로 구성된 Table을 가지고 있으며 이중 Kind Field는 Edit Box로

    > 입력 되어진 값과 같습니다.

    > DBGrid에 보여지는 값들은 Table Filter를 통하여 걸러진 상태 입니다.

    > 그리고 Table의 Fields Edit를 이용하여 Kind Field는 프로퍼티에서 Read Only값을

    > True로 설정하여 사용자가 수정하지 못하게 하였습니다.

    > 즉 사용자는 DBGrid에서 Code갑과 Name값만을 입력하고 프로그램에서 Kind값은 자동

    > 적으로 입력되어 지도록 만들고 싶어요.

    > 그런데 Table의 Filter는 되지만 새로운 Record의 추가시 Edit Box에 입력 되어진

    > 값을 사용자가 입력한 Code와 Name값을 포함하여 등록을 하고 싶은데 계속 Error가

    > 발생하는 군요.

    > 전 Table Event의 BeforeInsert와 AfterInsert를 이용해 보았지만 달리 방법을 찾기

    > 힘드네요.

    > 무지 급한데 누구 아시는 분은 제발 빠른 답변을 부탁드립니다.



    제가 제대로 이해했는지 글이 복잡하지만 간단한 내용같네요 ^^

    그리드에서 바로 입력하길 원한다는 말이죠.



    저두 경험이 많진 않지만 레코드 입력시에 그리드자체에서 입력받는 방법은 권할만한 사항은 아닙니다.

    처음 필드는 분류를 하기위한 키인가보죠. 그리고 파라독스에서는 프라이머리키가 항상 존재하는 테이블만을 생성하니 Kind필드앞에 단순히 프라이머리키로 필드타입중에 오토인크리즈(문자로는 +)를 사용하면 더 쉬워지겠죠.



    필드에 숫자와 문자만 있는건 아니라서 DBCOMBO로 선택할 수 있게 해주기도 하고 메모장으로 많은 글을 입력받게 만드등 다양한 입력형태가 있기 때문이죠.

    그래서, 동일폼이나 다른폼에서 대부분 필드는 DBEDIT박스를 써서 입력하시면 보다쉽게 될것입니다.



    끝으로 님의 글제목이 "저의 문제는 아무도 해결할수 없나요? 답이 없어요~!"

    실제로 질문을 읽어보니 이해하는데 시간이 좀 걸리더군요 ^^;;

    다음부터는 간단하면서(짧을수록 ^^) 예의를 갖춘글을 쓰신다면 누구나 님의 글의 쉽게 답변할 것입니다.

    다른분들도 님의 글을 보고 금방 이해가 안되서 답이 없었던것 같네요.

    그럼 , 항상 즐코~하세요 ^^

  • Profile
    궁금증 2001.02.17 20:15
    답변 감사합니다. 너무도..

    제가 문장력이 떨어져 새로이 질문을 하고자 합니다.

    전 Delphi5와 Paradox DB를 사용하고 있으며 DBGrid에서 자료를 입력받은 프로그램을

    만들려고 합니다.

    Table 구조는 다음과 같습니다.

    kind A(1), // key

    code A(5), // key

    name A(20) // data field

    구성은 매우 간단합니다. Primary Key로 kind와 Code 2개의 필드가 존재합니다.

    이 중에서 Kind는 자동적으로 입력이 되길 바라는 Field입니다.



    프로그램 작성 방법은 다음과 같습니다.

    1. Form 상에 Edit Box로 Kind를 입력받습니다.

    2. 입력 받은 Kind를 기준으로 Button을 Clidk하면 Table을 Filter하여 Data중에

    동일한 kind만을 추출하여 DBGrid에 보여지게 됩니다. 물론 DBGrid상에는

    Kind Field를 제외한 Code, Name만을 보여주게 합니다.

    3. 이제부터 자료의 입력을 받게 되면 입력받은 Code, Name과 더불어 Edit Box에서

    입력한 Kind값을 같이 등록하고자 합니다.



    예를 들어

    Kind : '1'

    Code : 'A0001'

    Name : '서울'

    위와 같다면 사용자가 입력하는것은 'A0001'과 '서울'만을 DBGrid에서 입력하겠죠.

    그럼 프로그램 내부에서 Kind 값인 '1'을 포함하여 자료가 등록되게 할려고 합니다.



    제 질문의 내용을 이해하실런지요?



    다음은 Table을 Filter하는 부분입니다.

    //-----------------------------------------------------------------------------//

    procedure TFaUsr.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);

    begin

    if edit1.Text <> '' then begin

    if Table1.FieldByName('kind').AsString = edit1.Text then

    Accept := True

    else Accept := False;

    end;

    end;



  • Profile
    최석기 2001.02.17 21:03
    TTable의 BeforeInsert 메소드를 사용해서 Insert 하기 전에 Kind 필드에 해당 값을 할당하면 될꺼 같네요.



    궁금증 wrote:

    > 답변 감사합니다. 너무도..

    > 제가 문장력이 떨어져 새로이 질문을 하고자 합니다.

    > 전 Delphi5와 Paradox DB를 사용하고 있으며 DBGrid에서 자료를 입력받은 프로그램을

    > 만들려고 합니다.

    > Table 구조는 다음과 같습니다.

    > kind A(1), // key

    > code A(5), // key

    > name A(20) // data field

    > 구성은 매우 간단합니다. Primary Key로 kind와 Code 2개의 필드가 존재합니다.

    > 이 중에서 Kind는 자동적으로 입력이 되길 바라는 Field입니다.

    >

    > 프로그램 작성 방법은 다음과 같습니다.

    > 1. Form 상에 Edit Box로 Kind를 입력받습니다.

    > 2. 입력 받은 Kind를 기준으로 Button을 Clidk하면 Table을 Filter하여 Data중에

    > 동일한 kind만을 추출하여 DBGrid에 보여지게 됩니다. 물론 DBGrid상에는

    > Kind Field를 제외한 Code, Name만을 보여주게 합니다.

    > 3. 이제부터 자료의 입력을 받게 되면 입력받은 Code, Name과 더불어 Edit Box에서

    > 입력한 Kind값을 같이 등록하고자 합니다.

    >

    > 예를 들어

    > Kind : '1'

    > Code : 'A0001'

    > Name : '서울'

    > 위와 같다면 사용자가 입력하는것은 'A0001'과 '서울'만을 DBGrid에서 입력하겠죠.

    > 그럼 프로그램 내부에서 Kind 값인 '1'을 포함하여 자료가 등록되게 할려고 합니다.

    >

    > 제 질문의 내용을 이해하실런지요?

    >

    > 다음은 Table을 Filter하는 부분입니다.

    > //-----------------------------------------------------------------------------//

    > procedure TFaUsr.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);

    > begin

    > if edit1.Text <> '' then begin

    > if Table1.FieldByName('kind').AsString = edit1.Text then

    > Accept := True

    > else Accept := False;

    > end;

    > end;

    >

  • Profile
    궁금증 2001.02.18 21:22
    감사합니다.



    하지만 TTable의 BeginInsert, AfterInsert,... 등 Table의 여러 Event를

    사용해 봤으나 Error가 발생하는군요.

    제가 사용을 잘 못해서 인지 몰라도 좀더 자세히 가르쳐 주시면 감사 하겠습니다.





    최석기 wrote:

    > TTable의 BeforeInsert 메소드를 사용해서 Insert 하기 전에 Kind 필드에 해당 값을 할당하면 될꺼 같네요.

    >

    > 궁금증 wrote:

    > > 답변 감사합니다. 너무도..

    > > 제가 문장력이 떨어져 새로이 질문을 하고자 합니다.

    > > 전 Delphi5와 Paradox DB를 사용하고 있으며 DBGrid에서 자료를 입력받은 프로그램을

    > > 만들려고 합니다.

    > > Table 구조는 다음과 같습니다.

    > > kind A(1), // key

    > > code A(5), // key

    > > name A(20) // data field

    > > 구성은 매우 간단합니다. Primary Key로 kind와 Code 2개의 필드가 존재합니다.

    > > 이 중에서 Kind는 자동적으로 입력이 되길 바라는 Field입니다.

    > >

    > > 프로그램 작성 방법은 다음과 같습니다.

    > > 1. Form 상에 Edit Box로 Kind를 입력받습니다.

    > > 2. 입력 받은 Kind를 기준으로 Button을 Clidk하면 Table을 Filter하여 Data중에

    > > 동일한 kind만을 추출하여 DBGrid에 보여지게 됩니다. 물론 DBGrid상에는

    > > Kind Field를 제외한 Code, Name만을 보여주게 합니다.

    > > 3. 이제부터 자료의 입력을 받게 되면 입력받은 Code, Name과 더불어 Edit Box에서

    > > 입력한 Kind값을 같이 등록하고자 합니다.

    > >

    > > 예를 들어

    > > Kind : '1'

    > > Code : 'A0001'

    > > Name : '서울'

    > > 위와 같다면 사용자가 입력하는것은 'A0001'과 '서울'만을 DBGrid에서 입력하겠죠.

    > > 그럼 프로그램 내부에서 Kind 값인 '1'을 포함하여 자료가 등록되게 할려고 합니다.

    > >

    > > 제 질문의 내용을 이해하실런지요?

    > >

    > > 다음은 Table을 Filter하는 부분입니다.

    > > //-----------------------------------------------------------------------------//

    > > procedure TFaUsr.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);

    > > begin

    > > if edit1.Text <> '' then begin

    > > if Table1.FieldByName('kind').AsString = edit1.Text then

    > > Accept := True

    > > else Accept := False;

    > > end;

    > > end;

    > >