Q&A

  • 임의수의 최대값 구하기 갈켜 주실 분???
======================================================================
QueryTemp.Close;
QueryTemp.SQL.Clear;
QueryTemp.SQL.Add(' SELECT MAX(sawoncode) As ExSawon, Max(bonbong + (sudang*0.1) - bonbong) AS EXVAL ');
QueryTemp.SQL.Add(' FROM SAL_KUB');
QueryTemp.SQL.Add(' WHERE Sudang<=200 ');
QueryTemp.Open;

fno := QueryTemp.Fieldbyname('EXVAL').asinteger;  // 첫번째 숫자

QueryTemp.Close;
QueryTemp.SQL.Clear;
QueryTemp.SQL.Add(' SELECT MAX(sawoncode) As ExSawon, Max(bonbong+(sudang*0.15)- (bonbong*0.03)) AS EXVAL ');
  QueryTemp.SQL.Add(' FROM SAL_KUB');
  QueryTemp.SQL.Add(' WHERE Sudang Between 201 and 300 ');
  QueryTemp.Open;

sno := QueryTemp.Fieldbyname('EXVAL').asinteger; //두번째 숫자

  QueryTemp.Close;
  QueryTemp.SQL.Clear;
  QueryTemp.SQL.Add(' SELECT MAX(sawoncode) As ExSawon, Max(bonbong+(sudang*0.18)- (bonbong*0.05)) AS EXVAL ');
QueryTemp.SQL.Add(' FROM SAL_KUB');
QueryTemp.SQL.Add(' WHERE Sudang Between 301 and 400 ');
QueryTemp.Open;

  tno := QueryTemp.Fieldbyname('EXVAL').asinteger; //세번째 숫자


QueryTemp.Close;
QueryTemp.SQL.Clear;
QueryTemp.SQL.Add(' SELECT MAX(sawoncode) As ExSawon, Max(bonbong+(sudang*0.19)- (bonbong*0.07)) AS EXVAL ');
  QueryTemp.SQL.Add(' FROM SAL_KUB');
  QueryTemp.SQL.Add(' WHERE Sudang >= 400 ');
  QueryTemp.Open;

  fono := QueryTemp.Fieldbyname('EXVAL').asinteger; //네번째 숫자

======================= 소스 임다.===================================
위에서 처럼 디비에서 계산하여 나온 임의의 네가지 숫자의 최대값을 어떻게 구하면 될까요?? (단,네숫자 모두 얼마 인지는 정확히 모르는 상황임)
제발 고수님들 갈켜 주세요??
급합니다.... 제발 플리즈~!~!~!~
3  COMMENTS
  • Profile
    김기수 2002.05.12 18:35
    var
      MaxValue:integer;
    ...

    ..
      MaxValue:=fno; //가장 크다고 가정
    ..
      if MaxValue<sno then
        MaxValue:=sno;

      if MaxValue<tno then
        MaxValue:=tno;
    ..

      if MaxValue<fono then
        MaxValue:=fono;

    이렇게 할수도 있지만 배열을 이용하는게 더 간단하겠군요.

    const
      sudangR:array[0..3] of real=(0.1,0.15,0.18,0.19);
      BonBongR:array[0..3] of real=(1,0.03,0.05,0.07);
    var
      MaxValue:integer;
      myVar:array [0..3]of integer;
      cnt:byte;
    ...
      MaxValue:=0;
       for cnt:=0 to 3 do begin
         QueryTemp.Close;
         QueryTemp.SQL.Clear;
         QueryTemp.SQL.Add(' SELECT MAX(sawoncode) As ExSawon,
              Max  (bonbong + (sudang*sudangR[cnt]) - (bonbong*bonBongR[cnt])) AS EXVAL ');
         QueryTemp.SQL.Add(' FROM SAL_KUB');
         case cnt of
           0: QueryTemp.SQL.Add(' WHERE Sudang<=200 ');
           1: QueryTemp.SQL.Add(' WHERE Sudang Between 201 and 300 ');
           2: QueryTemp.SQL.Add(' WHERE Sudang Between 301 and 400 ');
           // 401 아닐까요? 아님 >400 이던가.
           3: QueryTemp.SQL.Add(' WHERE Sudang >= 400 ');
      
         end;
         QueryTemp.Open;
         myVar[cnt] := QueryTemp.Fieldbyname('EXVAL').asinteger;
         if MaxValue<myVar[cnt] then
          MaxValue:= myVar[cnt];
      end;

  • Profile
    델피초짜 2002.05.13 09:28




       QueryTemp.SQL.Add(' SELECT MAX(sawoncode) As ExSawon, Max  (bonbong + (sudang*sudangR[cnt]) - (bonbong*bonBongR[cnt])) AS EXVAL ');  <== 이부분에서 SQL 에러가 뜹니다....  ㅜ.ㅜ;
    소스내의 변수가 SQL 문장안에서 먹나요?? 아닌걸루 알고 있는데.....
    뭐가 잘못 되었는지..에공~
  • Profile
    김기수 2002.05.13 22:37
    실수했군요. 생각나는대로 적다보니...
    아래와 같이 바꾸십시오.

                Max  (bonbong + (sudang*:sudangR) - (bonbong*:bonBongR)) AS EXVAL '); //이부분 수정
    //--- 추가
      QueryTemp.Parambyname('sudangR').asFloat:=sudangR[cnt]);
      QueryTemp.Parambyname('bonBongR').asFloat:=bonBongR[cnt]));
    //--여기까지