Q&A

  • Varchar로 되어있는 필드의 내용을 dbmemo에 넣는방법좀가르쳐주세요..
또 질문을 올립니다.

현재 dbmemo에 뿌리고자하는 원본 table의 필드 type이 vachar입니다.

dbmemo1.datafield := 'course_id';

이런식으로 하면

총 6개의 데이타가 dbmemo에 한꺼번에 나와야 하는데 1개씩 밖에 안나옵니다.

dbnavigator로 이동하면 다음 데이타가 나옵니다.

제가 많이 몰라서 질문하기도 어렵네요...하~

a라는 사람이 6개의 강의를 듣고있습니다.

그리드에 출력되는것은

사용자 강의과목

1 A 국어

2 A 수학

3 A 영어

이걸 다음과 같은 형식으로 표현하고 싶어요...

사용자 강의과목

1 A 국어

수학

영어

2 B 국어

영어

수학

사용자 필드는 dbedit에 강의 과목은 dbmemo에

문제는 원본테이블의 type이 memo가 아니고 vachar입니다.

그럼 고수님의 조언부탁할게요....

새해 복많이 받으세요...





3  COMMENTS
  • Profile
    이재식 2000.02.09 23:37
    홍용희 wrote:

    > 또 질문을 올립니다.

    > 현재 dbmemo에 뿌리고자하는 원본 table의 필드 type이 vachar입니다.

    > dbmemo1.datafield := 'course_id';

    > 이런식으로 하면

    > 총 6개의 데이타가 dbmemo에 한꺼번에 나와야 하는데 1개씩 밖에 안나옵니다.

    > dbnavigator로 이동하면 다음 데이타가 나옵니다.

    > 제가 많이 몰라서 질문하기도 어렵네요...하~

    > a라는 사람이 6개의 강의를 듣고있습니다.

    > 그리드에 출력되는것은

    > 사용자 강의과목

    > 1 A 국어

    > 2 A 수학

    > 3 A 영어

    > 이걸 다음과 같은 형식으로 표현하고 싶어요...

    > 사용자 강의과목

    > 1 A 국어

    > 수학

    > 영어

    > 2 B 국어

    > 영어

    > 수학

    > 사용자 필드는 dbedit에 강의 과목은 dbmemo에

    > 문제는 원본테이블의 type이 memo가 아니고 vachar입니다.

    > 그럼 고수님의 조언부탁할게요....

    > 새해 복많이 받으세요...

    >

    >



    이재식 Wrote :

    안녕하세요?



    디비메모에 뿌릴때 테이블의 필드타입이 varchar2, varchar 상관없습니다.

    다만, 위의 형식의 문제에서 디비메모에 출력할때는 위에서 말씀하신대로

    하나의 레코드밖에 나오질 않습니다.

    그런데, 원하시는 형식으로 나오게 하려면 디비그리드를 쓰셔서

    그 안에서 나오게 하는방법이 가능합니다.(onDrawColumnCell이벤트 이용)

    그러나, 이건 순 조회용으만 사용하셔야 하고 DBGrid1의 enable 속성을

    false로 하셔서 사용자가 선택등을 못하게 해야 하는 단점이 있습니다.

    왜냐하면, 사용자가 클릭을 했을경우, 다소 모양이 좀 dirty해지는 경우가

    상황에따라 빈번히 발생을 하는 그런 문제가 있기 때문입니다.

    사실 이방법은 별로 권하고 싶지 않습니다.



    저라면 이렇게 하겠습니다.

    화면 인터페이스가 어떻게 구성되어 있는지 모르는 관계로

    막연히나마 이야기를 해보겠습니다.

    1. 디비메모를 쓰지않고 그냥 메모를 씁니다.

    해당 이름을 클릭할때마다 그 사람의 수강과목을 반복문 돌려서

    메모에 출력해주는 거죠.

    즉, 별도의 쿼리 컴포넌트를 더 쓰든가 아니면 기존의 쿼리 컴포넌트를 이용해서

    반복문 돌리든가요.

    만약 메모에 어떤 내용이 있고 사용자가 같은 이름의 수강과목을 출력하려면

    체크를 해서 괜시리 반복문 돌아가는것을 막아야 겠죠.



    2. 사실 저는 이 방법을 더 권하고 싶습니다.

    스트링 그리드나 formula를 써서 위의 결과형식 그대로 출력하는 방법을

    쓰겠습니다. 즉, 메모필드, 디비메모를 쓰지 않고 그냥 표형식으로

    출력을 하는거죠.







  • Profile
    홍용희 2000.02.10 00:21
    현재 폼구성은

    페이지 컨트롤 컴포넌트를 사용해서

    첫페이지는 dbedit컴포넌트로 디자인했습니다.

    물론 첫페이지에 dbmemo컴포넌트도 있구요.

    그리고 두번째 페이지에는 dbgrid가 있구요.

    제가 하고자하는게 첫 페이지는 한명씩 보구

    두번째 페이지는 전체로 보게할려구 합니다.

    만약 6개의 강의를 듣고 있다면 1사람이 6개의 레코드를 차지해서

    다음을 클릭하면 에디트에 또다시 그사람이 나오는 거죠

    그런데 이걸 6개의 강의를 듣고 있더라도 레코드는 1개만 차지하게 하면서 현재 듣고있는 6개의 강의를 보여주고 싶습니다.

    시간이 되신다면 폼을 캡춰해서 메일로 보내드려도 되는지요...

    답변 감사합니다.

  • Profile
    홍용희 2000.02.10 06:52
    안녕하세요. 자세히 가르쳐 주셔서 정말감사합니다.

    근데 한가지 이해가 잘 안가는 부분이 있어서 다시 질문합니다.

    아래처럼 다 했는데 저는 query가 조인이 3개가 됩니다.

    where절에서 다음과 같이요...

    form1.Query1.Close;

    form1.Query1.SQL.Clear;

    form1.Query1.SQL.Add('select name,web.users.user_id,telephone,post,address,sex,email,connect_no');

    form1.Query1.SQL.Add('from web.users,web.branch,web.user_connect');

    form1.Query1.SQL.Add('where web.branch.password='''+form2.edit2.text+''' and

    web.branch.branch_code='''+form2.edit1.text+''' and

    web.users.branch_code='''+edit1.Text+''' and

    web.users.user_id=web.user_connect.user_id');

    form1.Query1.Open;



    위의 조건을 만족하는사람만 뿌려줘야 하거든요....

    하~ 재식님께서 주신 where절에 별의 별 방법을 다써도 제가 원하는값이 안나오더군요..흑

    근데 딱한가지 나오는게 있었어요...

    paramByName('paramId').asstring := dbedit1.text;

    위부분을 빼니까 나오긴하는데

    모든사람의 데이터가 같게 출력이 되버리더군요...

    제 무지를 이해하시고 한번더 가르침 부탁합니다.

    스타는 잼있게 하셨는지...하~ 저도 스타 무지 좋아하는데... 시간이...

    제 질문이 부족하시다면 염치없지만 아예 소스전부를 보내드리겠습니다.

    그럼 안녕히 계세요...