Q&A

  • 제겐 어려운 질문인데여..
쿼리컴포넌트를 썼습니다.

그리고 4개의 필드가 있고 가상의 2개의 필드를 더 만들어서 DB그리드에 뿌리구요. 오픈한후에...

기존에 있는 4개의 필드중 2개씩 연산을 해서 가상의 필드에 넣으려고 합니다.

필드에 넣으려면 에디트 상태가 되어야 하니까 그렇게 만들고 연산후 넣으려고 하니까 에디트 상태가 아니라는데 어떻게 해야할지...

이게 안되면 다음 그 수많은 작업들이 한개도 안되거든요...

답 부탁드립니다...

이해를 돕기 위해 간단한 소스를 보내드립니다.

꼭 알려주셔야 되요...알았져?

//====================================================================

with 쿼리컴포넌트 do begin

close;

sql.clear;

sql.add('SELECT BON 측점본번, L_DIST 구간거리, ');

sql.add('C_FLOOD 계획홍수량, C_EL 계획홍수위, ');

sql.Add('''AA'' 여유고기준'); //----가상필드

sql.add('FROM HYD_PLAN');

open;



edit;

while not EOF do begin

c_Flood := FieldByName('계획홍수량').AsFloat;

if c_Flood <200 then

FieldByName('여유고기준').AsFloat := 0.6

else if (200 <= c_Flood) and (c_Flood < 500) then

FieldByName('여유고기준').AsFloat := 0.8

else if (500 <= c_Flood) and (c_Flood < 2000) then

FieldByName('여유고기준').AsFloat := 1.0

else if (2000 <= c_Flood) and (c_Flood < 5000) then

FieldByName('여유고기준').AsFloat := 1.2

else if (5000 <= c_Flood) and (c_Flood < 10000) then

FieldByName('여유고기준').AsFloat := 1.5

else

FieldByName('여유고기준').AsFloat := 2.0;

next;

end;

end;

//===============================================================

이렇게 하는거 아닌가여?

부탁드립니다.

그럼 수고하세요...

3  COMMENTS
  • Profile
    aparadin 2001.08.31 09:30
    우비소녀 wrote:

    > 쿼리컴포넌트를 썼습니다.

    > 그리고 4개의 필드가 있고 가상의 2개의 필드를 더 만들어서 DB그리드에 뿌리구요. 오픈한후에...

    > 기존에 있는 4개의 필드중 2개씩 연산을 해서 가상의 필드에 넣으려고 합니다.

    > 필드에 넣으려면 에디트 상태가 되어야 하니까 그렇게 만들고 연산후 넣으려고 하니까 에디트 상태가 아니라는데 어떻게 해야할지...

    > 이게 안되면 다음 그 수많은 작업들이 한개도 안되거든요...

    > 답 부탁드립니다...

    > 이해를 돕기 위해 간단한 소스를 보내드립니다.

    > 꼭 알려주셔야 되요...알았져?

    > //====================================================================

    > with 쿼리컴포넌트 do begin

    > close;

    > sql.clear;

    > sql.add('SELECT BON 측점본번, L_DIST 구간거리, ');

    > sql.add('C_FLOOD 계획홍수량, C_EL 계획홍수위, ');

    > sql.Add('''AA'' 여유고기준'); //----가상필드

    > sql.add('FROM HYD_PLAN');

    > open;

    > edit;

    > while not EOF do begin

    > c_Flood := FieldByName('계획홍수량').AsFloat;

    > if c_Flood <200 then

    > FieldByName('여유고기준').AsFloat := 0.6

    > else if (200 <= c_Flood) and (c_Flood < 500) then

    > FieldByName('여유고기준').AsFloat := 0.8

    > else if (500 <= c_Flood) and (c_Flood < 2000) then

    > FieldByName('여유고기준').AsFloat := 1.0

    > else if (2000 <= c_Flood) and (c_Flood < 5000) then

    > FieldByName('여유고기준').AsFloat := 1.2

    > else if (5000 <= c_Flood) and (c_Flood < 10000) then

    > FieldByName('여유고기준').AsFloat := 1.5

    > else

    > FieldByName('여유고기준').AsFloat := 2.0;

    > next;

    > end;

    > end;

    > //===============================================================

    > 이렇게 하는거 아닌가여?

    > 부탁드립니다.

    > 그럼 수고하세요...

    ==================================================================================

    계획홍수량으로 여우고기준을 정하는군요..그렇다면.

    CalcField를 사용하세요

    내일까지 해결이 안되면 소스를 보내주시던가 아니면 메일주시면

    대충예제같은걸 만들어보내드리져 그럼

    Calc필드에대한걸 검색해서 읽어보세요 의외로 간단합니다.



  • Profile
    stoney 2001.08.30 03:10
    가상의 필드라면 테이블에는 없고 쿼리시에 가상으로 만들어 내는 필드라는 소린가요??



    그러면 쿼리 콤포넌트에서 Calculate Field 두개를 만드시고 OnCalcFields라는 이벤트에서 다음 코딩을 옮겨주면 되는데요..



    Claulate Field가 '여유고기준'이라면.



    procedure TForm1.Query1CalcFields(DataSet: TDataSet);

    var

    c_Flood: real;

    begin

    c_Flood := FieldByName('계획홍수량').AsFloat;

    if c_Flood <200 then

    FieldByName('여유고기준').AsFloat := 0.6

    else if (200 <= c_Flood) and (c_Flood < 500) then

    FieldByName('여유고기준').AsFloat := 0.8

    else if (500 <= c_Flood) and (c_Flood < 2000) then

    FieldByName('여유고기준').AsFloat := 1.0

    else if (2000 <= c_Flood) and (c_Flood < 5000) then

    FieldByName('여유고기준').AsFloat := 1.2

    else if (5000 <= c_Flood) and (c_Flood < 10000) then

    FieldByName('여유고기준').AsFloat := 1.5

    else

    FieldByName('여유고기준').AsFloat := 2.0;

    end;



    우비소녀 wrote:

    > 쿼리컴포넌트를 썼습니다.

    > 그리고 4개의 필드가 있고 가상의 2개의 필드를 더 만들어서 DB그리드에 뿌리구요. 오픈한후에...

    > 기존에 있는 4개의 필드중 2개씩 연산을 해서 가상의 필드에 넣으려고 합니다.

    > 필드에 넣으려면 에디트 상태가 되어야 하니까 그렇게 만들고 연산후 넣으려고 하니까 에디트 상태가 아니라는데 어떻게 해야할지...

    > 이게 안되면 다음 그 수많은 작업들이 한개도 안되거든요...

    > 답 부탁드립니다...

    > 이해를 돕기 위해 간단한 소스를 보내드립니다.

    > 꼭 알려주셔야 되요...알았져?

    > //====================================================================

    > with 쿼리컴포넌트 do begin

    > close;

    > sql.clear;

    > sql.add('SELECT BON 측점본번, L_DIST 구간거리, ');

    > sql.add('C_FLOOD 계획홍수량, C_EL 계획홍수위, ');

    > sql.Add('''AA'' 여유고기준'); //----가상필드

    > sql.add('FROM HYD_PLAN');

    > open;

    >

    > edit;

    > while not EOF do begin

    > c_Flood := FieldByName('계획홍수량').AsFloat;

    > if c_Flood <200 then

    > FieldByName('여유고기준').AsFloat := 0.6

    > else if (200 <= c_Flood) and (c_Flood < 500) then

    > FieldByName('여유고기준').AsFloat := 0.8

    > else if (500 <= c_Flood) and (c_Flood < 2000) then

    > FieldByName('여유고기준').AsFloat := 1.0

    > else if (2000 <= c_Flood) and (c_Flood < 5000) then

    > FieldByName('여유고기준').AsFloat := 1.2

    > else if (5000 <= c_Flood) and (c_Flood < 10000) then

    > FieldByName('여유고기준').AsFloat := 1.5

    > else

    > FieldByName('여유고기준').AsFloat := 2.0;

    > next;

    > end;

    > end;

    > //===============================================================

    > 이렇게 하는거 아닌가여?

    > 부탁드립니다.

    > 그럼 수고하세요...

  • Profile
    초보의비애 2001.08.30 02:29
    Edit를 While문안에 포함시키면 될거 같은데염.

    While 쿼리컴포넌트 do begin

    Edit;

    .

    .

    .

    Post;

    next

    end;





    우비소녀 wrote:

    > 쿼리컴포넌트를 썼습니다.

    > 그리고 4개의 필드가 있고 가상의 2개의 필드를 더 만들어서 DB그리드에 뿌리구요. 오픈한후에...

    > 기존에 있는 4개의 필드중 2개씩 연산을 해서 가상의 필드에 넣으려고 합니다.

    > 필드에 넣으려면 에디트 상태가 되어야 하니까 그렇게 만들고 연산후 넣으려고 하니까 에디트 상태가 아니라는데 어떻게 해야할지...

    > 이게 안되면 다음 그 수많은 작업들이 한개도 안되거든요...

    > 답 부탁드립니다...

    > 이해를 돕기 위해 간단한 소스를 보내드립니다.

    > 꼭 알려주셔야 되요...알았져?

    > //====================================================================

    > with 쿼리컴포넌트 do begin

    > close;

    > sql.clear;

    > sql.add('SELECT BON 측점본번, L_DIST 구간거리, ');

    > sql.add('C_FLOOD 계획홍수량, C_EL 계획홍수위, ');

    > sql.Add('''AA'' 여유고기준'); //----가상필드

    > sql.add('FROM HYD_PLAN');

    > open;

    >

    > edit;

    > while not EOF do begin

    > c_Flood := FieldByName('계획홍수량').AsFloat;

    > if c_Flood <200 then

    > FieldByName('여유고기준').AsFloat := 0.6

    > else if (200 <= c_Flood) and (c_Flood < 500) then

    > FieldByName('여유고기준').AsFloat := 0.8

    > else if (500 <= c_Flood) and (c_Flood < 2000) then

    > FieldByName('여유고기준').AsFloat := 1.0

    > else if (2000 <= c_Flood) and (c_Flood < 5000) then

    > FieldByName('여유고기준').AsFloat := 1.2

    > else if (5000 <= c_Flood) and (c_Flood < 10000) then

    > FieldByName('여유고기준').AsFloat := 1.5

    > else

    > FieldByName('여유고기준').AsFloat := 2.0;

    > next;

    > end;

    > end;

    > //===============================================================

    > 이렇게 하는거 아닌가여?

    > 부탁드립니다.

    > 그럼 수고하세요...