왕초보입니다. 처음으로 어려운 상황에 봉착하게 되었습니다.
무림고수 여러분의 도움을 바랍니다. 도와주신다면 정말로
꾸벅꾸벅......
여기있는 예제는 아래 순서별로 처리했습니다만 예상대로 되지를 않습니다.
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) 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. 두개의 퀴리를 조인함
이 방법이 마음에 들지 않나요............