Q&A

  • ㅠ,.ㅠ 오리지널 초보 사발임당...아래의 소스를 한번 봐줘엽 ㅠ.ㅠ


안뇽하신가엽 여러 고수님&중수님들 ^^ 전 초보 사발임당....^^



헐 지가 조인을 사용하다가 실패해서리 부득불 ㅠ.ㅠ 쿼릴 두개를 사용 하게 되었슴



당 ㅠ.ㅠ



그런디엽 스트리그리드에 지가 원하는 값들이 다 안나옴당 ㅠ.ㅠ



ㅠ.ㅠ 원래는 불량내역의 불량코드와 불량명세의 불량코드를 조인해서 불량부위와 불



량내역을 맹글어야



하는디 ㅠ.ㅠ 불량내역의 불량코드와 불량명세의 불량코드의 타입이 달라서 ㅠ.ㅠ



조인을 못하구 아래와 같이 속도도 느린 뽀록을 구사하고 있슴당 ㅠ.ㅠ



아래의 소스를 돌리면 값은 나오긴 한는디 ㅠ.ㅠ



값이 두개이상 나와야 하는디 하나만 달랑 남옴당...ㅠ.ㅠ



미티 미티 ㅠ.ㅠ 진짜루 환장 하겠슴당 ㅠ.ㅠ







아래의 소스를 보심 알겠쥐만엽 2번째 sql문의



where절 에서 불량코드를 k 로 하고 나온값을 다시



if not qur.eof then begin.....end;



이런식으로 했는디 ㅠ.ㅠ 값이 2개가 나와야 하는디 달랑 하난만 나옴당....



고수님들 도와 주이소 ㅠ.ㅠ 그럼 ㅠ.ㅠ 편안 하십쇼 ^^





procedure Tdeleteform.listbox1Click(Sender: TObject);

var

qur:Tquery;

i,j:integer;

K,m,n:string;



begin

i:=1;

j:=1;

qur:=Tquery.Create(self);

qur.DatabaseName:='연습데이터';

stringgrid1.ColCount:=7;



with qur do

begin

close;

sql.clear;

sql.add('select 검사번호,제조번호,순번,유발공정,조치내역,불량코드,조치일자 from 불량내역');

sql.Add('where 검사번호='''+edit1.Text+'''');

prepare;

open;



with stringgrid1 do

begin

rowcount := qur.RecordCount;

cells[0,0]:='제조번호';

cells[1,0]:='검사번호';

cells[2,0]:='순번';

cells[3,0]:='유발공정';

cells[4,0]:='조치일자';

cells[5,0]:='불량부위';

cells[6,0]:='불량내역';

end;



while not qur.Eof do

begin

stringgrid1.Cells[i,j]:=qur.fieldbyname('제조번호').asstring;

i:=0;

stringgrid1.Cells[i,j]:=qur.fieldbyname('검사번호').asstring;

i:=i+1;

stringgrid1.Cells[i,j]:=qur.fieldbyname('순번').asstring;

i:=i+1;

stringgrid1.Cells[i,j]:=qur.fieldbyname('유발공정').asstring;

i:=i+1;

stringgrid1.Cells[i,j]:=datetimetostr(qur.fieldbyname('조치일자').asdatetime);

i:=i+1;

k:=qur.fieldbyname('불량코드').asstring;

with qur do

begin

close;

sql.Clear;

sql.Add('select 불량부위,불량내역 from 불량명세');

sql.Add('where 불량코드='''+k+'''');

prepare;

open;

end;

if not qur.Eof then

begin

m:=qur.fieldbyname('불량부위').asstring;

n:=qur.fieldbyname('불량내역').asstring;

end;

stringgrid1.Cells[i,j]:=m;

i:=i+1;

stringgrid1.Cells[i,j]:=n;

i:=1;

j:=j+1;

stringgrid1.RowCount:=stringgrid1.RowCount+1;

qur.next;

end

end;

qur.Free;

end;

2  COMMENTS
  • Profile
    hugehead 2000.08.10 00:49
    사발우성님은 지금 쿼리 한개에다가 두개의 SQL문을 사용하는데 거기에서 문제가 발생합니다.



    우선 불량내역 테이블에서 값들을 가져오고, 그다음에 qur.next를 하기 전에 qur의 쿼리문을 바꿔서 다시 여는데, 그럼 나중에 next를 하는데 문제가 있지요.



    이럴 경우는 qur를 하나 선언해서 SQL문을 바꾸지 말고, 아예 TQuery 컴포넌트를 두개를 사용하셔야 합니다.



    왜냐하면, 첫번째 SQL문이 계속 살아 있어야 next를 할 수 있으니까요. 그렇지않으면 next는 불량명세를 가져온 SQL문의 결과를 가지고 next를 하게 됩니다.





    고친 소스:

    {참고: 이코드는 불량 명세를 쿼리 했을 때에는 레코드가 불량코드 1개당 1개의 레코드를 가지고 온다는 가정이 있는 것 같군요. 만약에 두번째 쿼리가 한개 이상의 레코드를 가지고 온다면 코드는 추가로 변경되어야 합니다.}





    procedure Tdeleteform.listbox1Click(Sender: TObject);

    var

    qur, qrySecond:Tquery;

    i,j:integer;

    K,m,n:string;



    begin

    i:=1;

    j:=1;

    qur:=Tquery.Create(self);

    ////////////////////////////////

    // 두번째 쿼리 생성

    qrySecond := TQuery.Create(Self);

    ////////////////////////////////



    qur.DatabaseName:='연습데이터';

    ////////////////////////////////

    // 두번째 쿼리 연결

    qrySecond.DatabaseName := '연습데이터';

    ////////////////////////////////



    stringgrid1.ColCount:=7;



    with qur do

    begin

    close;

    sql.clear;

    sql.add('select 검사번호,제조번호,순번,유발공정,조치내역,불량코드,조치일자 from 불량내역');

    sql.Add('where 검사번호='''+edit1.Text+'''');

    prepare;

    open;



    with stringgrid1 do

    begin

    rowcount := qur.RecordCount;

    cells[0,0]:='제조번호';

    cells[1,0]:='검사번호';

    cells[2,0]:='순번';

    cells[3,0]:='유발공정';

    cells[4,0]:='조치일자';

    cells[5,0]:='불량부위';

    cells[6,0]:='불량내역';

    end;



    while not qur.Eof do

    begin

    stringgrid1.Cells[i,j]:=qur.fieldbyname('제조번호').asstring;

    i:=0;

    stringgrid1.Cells[i,j]:=qur.fieldbyname('검사번호').asstring;

    i:=i+1;

    stringgrid1.Cells[i,j]:=qur.fieldbyname('순번').asstring;

    i:=i+1;

    stringgrid1.Cells[i,j]:=qur.fieldbyname('유발공정').asstring;

    i:=i+1;

    stringgrid1.Cells[i,j]:=datetimetostr(qur.fieldbyname('조치일자').asdatetime);

    i:=i+1;

    k:=qur.fieldbyname('불량코드').asstring;

    /////////////////////////////////////////////

    // 이부분은 없에고...

    // with qur do

    // begin

    // close;

    // sql.Clear;

    // sql.Add('select 불량부위,불량내역 from 불량명세');

    // sql.Add('where 불량코드='''+k+'''');

    // prepare;

    // open;

    // end;

    // if not qur.Eof then

    // begin

    // m:=qur.fieldbyname('불량부위').asstring;

    // n:=qur.fieldbyname('불량내역').asstring;

    // end;

    /////////////////////////////////////////////////////

    // 두번째 쿼리로 불량명세 작업

    with qrySecond do

    begin

    close;

    clear;

    sql.Add('select 불량부위,불량내역 from 불량명세');

    sql.Add('where 불량코드='''+k+'''');

    prepare;

    open;

    end;

    if not qrySecond.IsEmpty then

    begin

    m:=qrySecond.fieldbyname('불량부위').asstring;

    n:=qrySecond.fieldbyname('불량내역').asstring;

    end;

    /////////////////////////////////////////////////////

    stringgrid1.Cells[i,j]:=m;

    i:=i+1;

    stringgrid1.Cells[i,j]:=n;

    i:=1;

    j:=j+1;

    stringgrid1.RowCount:=stringgrid1.RowCount+1;

    qur.next;

    end;

    end;

    ////////////////////////

    // 깨끗한 끝처리

    qur.Close;

    qrySecond.Close;

    ////////////////////////

    qur.Free;

    ////////////////////////

    // 최종 두번째 쿼리 프리

    qrySecond.Free;

    ////////////////////////

    end;





    사발우성 wrote:

    >

    > 안뇽하신가엽 여러 고수님&중수님들 ^^ 전 초보 사발임당....^^

    >

    > 헐 지가 조인을 사용하다가 실패해서리 부득불 ㅠ.ㅠ 쿼릴 두개를 사용 하게 되었슴

    >

    > 당 ㅠ.ㅠ

    >

    > 그런디엽 스트리그리드에 지가 원하는 값들이 다 안나옴당 ㅠ.ㅠ

    >

    > ㅠ.ㅠ 원래는 불량내역의 불량코드와 불량명세의 불량코드를 조인해서 불량부위와 불

    >

    > 량내역을 맹글어야

    >

    > 하는디 ㅠ.ㅠ 불량내역의 불량코드와 불량명세의 불량코드의 타입이 달라서 ㅠ.ㅠ

    >

    > 조인을 못하구 아래와 같이 속도도 느린 뽀록을 구사하고 있슴당 ㅠ.ㅠ

    >

    > 아래의 소스를 돌리면 값은 나오긴 한는디 ㅠ.ㅠ

    >

    > 값이 두개이상 나와야 하는디 하나만 달랑 남옴당...ㅠ.ㅠ

    >

    > 미티 미티 ㅠ.ㅠ 진짜루 환장 하겠슴당 ㅠ.ㅠ

    >

    >

    >

    > 아래의 소스를 보심 알겠쥐만엽 2번째 sql문의

    >

    > where절 에서 불량코드를 k 로 하고 나온값을 다시

    >

    > if not qur.eof then begin.....end;

    >

    > 이런식으로 했는디 ㅠ.ㅠ 값이 2개가 나와야 하는디 달랑 하난만 나옴당....

    >

    > 고수님들 도와 주이소 ㅠ.ㅠ 그럼 ㅠ.ㅠ 편안 하십쇼 ^^

    >

    >

    > procedure Tdeleteform.listbox1Click(Sender: TObject);

    > var

    > qur:Tquery;

    > i,j:integer;

    > K,m,n:string;

    >

    > begin

    > i:=1;

    > j:=1;

    > qur:=Tquery.Create(self);

    > qur.DatabaseName:='연습데이터';

    > stringgrid1.ColCount:=7;

    >

    > with qur do

    > begin

    > close;

    > sql.clear;

    > sql.add('select 검사번호,제조번호,순번,유발공정,조치내역,불량코드,조치일자 from 불량내역');

    > sql.Add('where 검사번호='''+edit1.Text+'''');

    > prepare;

    > open;

    >

    > with stringgrid1 do

    > begin

    > rowcount := qur.RecordCount;

    > cells[0,0]:='제조번호';

    > cells[1,0]:='검사번호';

    > cells[2,0]:='순번';

    > cells[3,0]:='유발공정';

    > cells[4,0]:='조치일자';

    > cells[5,0]:='불량부위';

    > cells[6,0]:='불량내역';

    > end;

    >

    > while not qur.Eof do

    > begin

    > stringgrid1.Cells[i,j]:=qur.fieldbyname('제조번호').asstring;

    > i:=0;

    > stringgrid1.Cells[i,j]:=qur.fieldbyname('검사번호').asstring;

    > i:=i+1;

    > stringgrid1.Cells[i,j]:=qur.fieldbyname('순번').asstring;

    > i:=i+1;

    > stringgrid1.Cells[i,j]:=qur.fieldbyname('유발공정').asstring;

    > i:=i+1;

    > stringgrid1.Cells[i,j]:=datetimetostr(qur.fieldbyname('조치일자').asdatetime);

    > i:=i+1;

    > k:=qur.fieldbyname('불량코드').asstring;

    > with qur do

    > begin

    > close;

    > sql.Clear;

    > sql.Add('select 불량부위,불량내역 from 불량명세');

    > sql.Add('where 불량코드='''+k+'''');

    > prepare;

    > open;

    > end;

    > if not qur.Eof then

    > begin

    > m:=qur.fieldbyname('불량부위').asstring;

    > n:=qur.fieldbyname('불량내역').asstring;

    > end;

    > stringgrid1.Cells[i,j]:=m;

    > i:=i+1;

    > stringgrid1.Cells[i,j]:=n;

    > i:=1;

    > j:=j+1;

    > stringgrid1.RowCount:=stringgrid1.RowCount+1;

    > qur.next;

    > end

    > end;

    > qur.Free;

    > end;

  • Profile
    사발우성 2000.08.10 01:34
    ㅠ.ㅠ 님 잘도라 감당 ㅠ.ㅠ 넘넘 감솨 함당 ㅠ.ㅠ 진짜루 ㅠ.ㅠ



    헐 감동......



    헐 몇일동아 이거땜시 고생 했는디 ㅠ.ㅠ 감솨엽 감솨엽 진짜루



    오늘 일찍집에가서 발 닦구 잘수 있당 ㅠ.ㅠ 흐미 기뽀라 ㅠ.ㅠ



    님 정말 감솨 하구엽 나중에두 잘지도 부탁 함당..^^