Q&A

  • 쿼리된 필드의 내용을 편집할 순 없을까요?
한 필드(pro_time)에 대해서 정렬하고, pro_time값을 누적해서 다른 필드(com)에 넣고싶은데.. 흑흑흑 제발요...다른 테이블이나 쿼리를 써야되는감요?





with query1 do

begin

close;

sql.Clear;

sql.Add('select * from "schedul.dbf" order by pro_time');

open;

end;

// 요까지는 됐거덩요..고담에 쿼리된 필드의 내용을 바꾸고 싶은데요..



i:= 0;

while not(query1.Eof) do

begin

i:= i+ query1.fieldbyname('pro_time').asinteger;

query1.FieldByName('com').asinteger := i;

query1.Next;

end;

//

3  COMMENTS
  • Profile
    고규인 1999.10.09 06:07
    강경범 wrote:

    > 한 필드(pro_time)에 대해서 정렬하고, pro_time값을 누적해서 다른 필드(com)에 넣고싶은데.. 흑흑흑 제발요...다른 테이블이나 쿼리를 써야되는감요?

    >

    >

    > with query1 do

    > begin

    > close;

    > sql.Clear;

    > sql.Add('select * from "schedul.dbf" order by pro_time');

    > open;

    > end;

    > // 요까지는 됐거덩요..고담에 쿼리된 필드의 내용을 바꾸고 싶은데요..

    >

    > i:= 0;

    > while not(query1.Eof) do

    > begin

    요기서... query1.edit;

    > i:= i+ query1.fieldbyname('pro_time').asinteger;

    > query1.FieldByName('com').asinteger := i;

    요기서... query1.post;

    > query1.Next;

    > end;

    > //



    query에 프로퍼티에 보면 requestlive 란 속성이 있는데..

    이것을 true로 설정하면.. 쿼리에서 바로 수정이 가능 합니다... ^^



    요기서... 처럼 하면 되지 않을 까요..



    아참.. 굴구... order by 문이 있으면.. 수정이 가능한지 안한지는

    잘 기억이 나질 않는군요..

    하여간에.. 수정이 가능 합니다...



    마지막으로.. 쿼리문이 복잡해 지거나.. 날짜 조건이 들어가면

    requestlive 값이 true가 되지 않습니다...

  • Profile
    이주흥 1999.10.08 19:38
    강경범 wrote:

    > 한 필드(pro_time)에 대해서 정렬하고, pro_time값을 누적해서 다른 필드(com)에 넣고싶은데.. 흑흑흑 제발요...다른 테이블이나 쿼리를 써야되는감요?

    >

    >

    > with query1 do

    > begin

    > close;

    > sql.Clear;

    > sql.Add('select * from "schedul.dbf" order by pro_time');

    > open;

    > end;

    > // 요까지는 됐거덩요..고담에 쿼리된 필드의 내용을 바꾸고 싶은데요..

    >

    > i:= 0;

    > while not(query1.Eof) do

    > begin

    > i:= i+ query1.fieldbyname('pro_time').asinteger;

    > query1.FieldByName('com').asinteger := i;

    > query1.Next;

    > end;

    > //



    안녕하세요

    제가 해본결과로는 일단 쿼리 컴포넌트를 두개 둬야합니다..

    하나는 select하는 거고 하나는 update용 입니다..

    그리고 다음과 같이 코딩하면 됩니다..

    procedure TForm1.Button1Click(Sender: TObject);

    var i,j,k : Integer;

    begin

    i := 1;

    j := 0;

    with query1 do begin

    close;

    sql.clear;

    sql.Add('select * from "schedul.dbf" order by pro_time');

    Open;

    First;

    while i <= RecordCount do begin

    j := j + FieldByName('pro_time').AsInteger;

    k := FieldByname('a').AsInteger;//여기서 a는 테이블의 키 입니다.

    with query2 do begin

    close;

    sql.clear;

    sql.add('update schedul.dbf');

    sql.add('set');

    sql.add('com = :com');

    sql.Add('where a = :a');

    ParamByName('a').AsInteger := k;

    ParamByName('com').AsInteger := j;

    i := i + 1;

    Execsql;

    end;

    next;

    end;



    with query1 do begin

    close;

    sql.clear;

    sql.add('select * from schedul.dbf');

    open;

    end;

    end;

    end;

    end.



    그럼 성공하시길....

  • Profile
    박윤종 1999.10.08 19:09
    강경범 wrote:

    > 한 필드(pro_time)에 대해서 정렬하고, pro_time값을 누적해서 다른 필드(com)에 넣고싶은데.. 흑흑흑 제발요...다른 테이블이나 쿼리를 써야되는감요?

    >

    >

    > with query1 do

    > begin

    > close;

    > sql.Clear;

    > sql.Add('select * from "schedul.dbf" order by pro_time');

    > open;

    > end;

    > // 요까지는 됐거덩요..고담에 쿼리된 필드의 내용을 바꾸고 싶은데요..

    >

    > i:= 0;

    > while not(query1.Eof) do

    > begin

    > i:= i+ query1.fieldbyname('pro_time').asinteger;

    > query1.FieldByName('com').asinteger := i;

    > query1.Next;

    > end;

    > //

    -----------------

    Query에 대한 직접적인 수정은 불가능 합니다.



    Tupdatesql을 사용하시면 됩니다.



    Q&A에서 updatesql을 검색해 보시면



    자료를 찾을수 있을 겁니다.



    도움이 되었길...