Q&A

  • 데이타 추출이 엄청 복잡해요 이문제 해결할 고수님 Help Me
왕초보입니다. 처음으로 어려운 상황에 봉착하게 되었습니다.

무림고수 여러분의 도움을 바랍니다. 도와주신다면 정말로

꾸벅꾸벅......

여기있는 예제는 아래 순서별로 처리했습니다만 예상대로 되지를 않습니다.



1) End.Db에서 Date를 일자별로 하나만 추출하여 Tdate 배열에다 대입했습니다.

2) 이 Tdate배열을 이용하여 SlipNo.db에서 각일자별로 가장 큰수(No Field)를

추출하여 TempslipNo에다 integer 배열로 처리하고자 하였습니다.



결과는 원하는 값이 나오질 않는다는 것입니다. 이러한 것을 처리할 좋은 방법이나

아니면 이 예제를 고쳐서 될 수 있도록 할 수 있는지 무림고수들의 지도편달을

바랍니다.



End.db Lay-Out



00-08-08

00-08-11

00-08-03

00-08-11

00-08-03

00-08-11

00-08-11

00-08-11

00-08-02

00-08-08

00-08-03

00-08-08

00-08-08

00-08-02

00-08-08

00-08-11

00-08-11

00-08-08

00-08-08

00-08-11

00-08-08

00-08-08



이 field 형식은 date 형입니다. 이를 Distinct(s."date")하여

각각의 한일자만 추출합니다.







SlipNo.db Lay-out





Date(Date형) No(integer형)

111 00-08-02 2 1 2

111 00-08-02 3 1 2

111 00-08-02 15 1 2

111 00-08-03 3 1 2

111 00-08-03 11 1 2

111 00-08-08 4 1 2

111 00-08-08 25 1 2

111 00-08-11 5 1 2



위에서 No field에서 가장 큰수를 가져와서 이 값을 이용하고자 합니다.











unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Db, DBTables, Grids, DBGrids;



type

TForm1 = class(TForm)

DBGrid1: TDBGrid;

DataSource1: TDataSource;

Query1: TQuery;

Button1: TButton;

Query2: TQuery;

Button2: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Button3: TButton;

Label5: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.DFM}



procedure TForm1.Button1Click(Sender: TObject);

var

i: integer;

Tempdate : Array [0..30] of Tdate;

TempSlipNo : Array [0..10] of integer;

result : integer;

begin

With Query1 do begin

Close;

Sql.Clear;

Sql.Add('Select distinct(E."date") from "c:mcend" E'); //End.db에서 date를 추출

prepare;

open;

i:=0;

while not Eof do begin

Tempdate[i]:=FieldValues['date'];//추출된 데이타를 배열에 대입함

inc(i);

Next;

end;

Query1.close;

end;



With Query2 do begin

for i:=0 to i-1 do begin

close;

Sql.Clear;

Sql.Add('Select max(s."No") from "c:mcslipNo" s');

Sql.add('where (s."chartno"="111") and');

Sql.add('(s."date">=:pTempDate) and (s."date"<:pTempDate1)');

//추출된 일자를 파라미터로 전달하여 다음 쿼리에 대입함

ParamByName('pTempdate').AsDate:=Tempdate[i];

ParamByName('pTempdate1').AsDate:=Tempdate[i]+1;

prepare;

open;

TempSlipNo[i]:=Query2.fieldvalues['no'];

// 한 값만 가져와 다시 Tempstrig에 대입함

end; //for 종료



label1.caption := IntToStr(TempSlipNo[0]);

label2.caption := IntToStr(TempSlipNo[1]);

label3.caption := IntToStr(TempSlipNo[2]);

label4.caption := IntToStr(TempSlipNo[4]);





end; //with 문 종료



Query2.close;





end;



procedure TForm1.Button2Click(Sender: TObject);

begin

close;

end;





end.



1  COMMENTS
  • Profile
    이선경 2000.08.16 23:01
    김상경 wrote:

    > 왕초보입니다. 처음으로 어려운 상황에 봉착하게 되었습니다.

    > 무림고수 여러분의 도움을 바랍니다. 도와주신다면 정말로

    > 꾸벅꾸벅......

    > 여기있는 예제는 아래 순서별로 처리했습니다만 예상대로 되지를 않습니다.

    >

    > 1) End.Db에서 Date를 일자별로 하나만 추출하여 Tdate 배열에다 대입했습니다.

    > 2) 이 Tdate배열을 이용하여 SlipNo.db에서 각일자별로 가장 큰수(No Field)를

    > 추출하여 TempslipNo에다 integer 배열로 처리하고자 하였습니다.

    >

    > 결과는 원하는 값이 나오질 않는다는 것입니다. 이러한 것을 처리할 좋은 방법이나

    > 아니면 이 예제를 고쳐서 될 수 있도록 할 수 있는지 무림고수들의 지도편달을

    > 바랍니다.

    >

    > End.db Lay-Out

    개인적인 생각인데요... 엄청 간단하게도 해결할수 있을것 같은데요..해보지는 않았음

    1. QUERY를 걸어서 END.DB에서 UNIQ한 날짜를 추출

    2. QUERY를 걸어서 SLIPNO.DB에서 일자별로 큰수를 추출함

    3. 두개의 퀴리를 조인함

    이 방법이 마음에 들지 않나요............