Как Сделать Выборку С Бд По Годам

  • Автор темы -
  • Дата начала

Гость
#1
Задали такую задачу: В реальной программе, сделать выборку записей с 2006 по текущий год в отдельные колонки. В программе уже есть возможность вывода данных за все года, а как сделать с промежутком ни как не додумаюсь. Пробовала менять даты где задаются переменные, не помогло.. Единственное на что меня хватило, сделать колонки для данных и всё ((( Помогите мне, плиз, заранее спс..

Код:
procedure TZTPF.Button2Click(Sender: TObject);
var
xa:variant;
j,yz,sz:integer;
iz,kz,izn:array[1990..2050,0..2] of real;
izm,kzm,izl,kzl:array[0..2] of real;
yzm,yzl:array[0..2] of integer;
sid:string;
begin
pb1.Visible:=true;
pb1.Max:=dm.TP.RecordCount;
pb1.Position:=0;
cursor:=crHourGlass;
xa:=CreateOleObject('Excel.Application');
xa.WorkBooks.Add();
xa.Visible:=true;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,1].Value:='№ п/п';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,2].Value:='№ E';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,3].Value:='1, кА';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,4].Value:='Тип 1';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,5].Value:='2, кА';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,6].Value:='Тип 2';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,7].Value:='Мах загр.1, А';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,8].Value:='Мах загр.2, А';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,9].Value:='Мах загр.E, А';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,10].Value:='Мах загр.1, %';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,11].Value:='Мах загр.2, %';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,12].Value:='Мах загр.E, %';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,13].Value:='V, В';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,14].Value:='Бал VN';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,15].Value:='Бал NN';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,16].Value:='ADD';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,17].Value:='Мах загр.1, А / 6 year'; // доп. колонки
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,18].Value:='Мах загр.2, А / 6 year';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,19].Value:='Мах загр.E, А / 6 year';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,20].Value:='Мах загр.1, % / 6 year';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,21].Value:='Мах загр.2, % / 6 year';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[1,22].Value:='Мах загр.E, % / 6 year';

DM.TP.Filtered:=false;
DM.TP.First;
j:=2;
while not DM.TP.Eof do
begin
pb1.StepBy(1);
refresh;
for yz:=1990 to 2050 do
for sz:=0 to 2 do
begin
iz[yz,sz]:=0;
kz[yz,sz]:=0;
izn[yz,sz]:=0;
izm[sz]:=0;
kzm[sz]:=0;
yzm[sz]:=0;
izl[sz]:=0;
kzl[sz]:=0;
yzl[sz]:=0;
end;

xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,1].Value:=inttostr(j-1);
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,2].Value:=DM.TP.FieldByName('Name').AsString;
if DM.TP.FieldByName('Street_ID').AsString<>'' then
begin
DM.Owners.Filtered:=false;
FilterDataSet(DM.Streets,'Street_ID='+DM.TP.FieldByName('Street_ID').AsString);
DM.Owners.Filtered:=true;
DM.Owners.First;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,16].Value:=DM.Streets.FieldByName('Name').AsString+', '+ DM.TP.FieldByName('House').AsString;
end;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,13].Value:=dm.TPUnom.AsInteger;


if DM.TP.FieldByName('OwnerRU610_ID').AsString<>'' then
begin
DM.Owners.Filtered:=false;
FilterDataSet(DM.Owners,'Owner_ID='+DM.TP.FieldByName('OwnerRU610_ID').AsString);
DM.Owners.Filtered:=true;
DM.Owners.First;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,14].Value:=DM.Owners.FieldByName('Name').AsString;
end;

if DM.TP.FieldByName('OwnerRU04_ID').AsString<>'' then
begin
DM.Owners.Filtered:=false;
FilterDataSet(DM.Owners,'Owner_ID='+DM.TP.FieldByName('OwnerRU04_ID').AsString);
DM.Owners.Filtered:=true;
DM.Owners.First;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,15].Value:=DM.Owners.FieldByName('Name').AsString;
end;

DM.SectTP.Filtered:=false;
FilterDataSet(DM.SectTP,'Object_ID='+DM.TP.FieldByName('Object_ID').AsString);
DM.SectTP.Filtered:=true;
DM.SectTP.First;
if DM.SectTP.RecordCount=1 then
begin
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,5].Value:='-';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,6].Value:='-';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,8].Value:='-';
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,11].Value:='-';
end;

if DM.SectTP.RecordCount<>0 then
begin
sid:=DM.SectTP.fieldbyname('Sect_ID').AsString;
sz:=dm.SectTP.RecNo;
FilterDataSet(DM.Trans,'Sect_ID='+sid);
FilterDataSet(DM.LoadTrans,'Sect_ID='+sid);
DM.LoadTrans.First;
while not DM.LoadTrans.Eof do
begin
iz[DM.LoadTrans.fieldbyname('Year').AsInteger,sz]:=DM.LoadTrans.fieldbyname('Imax').AsFloat;
kz[DM.LoadTrans.fieldbyname('Year').AsInteger,sz]:=DM.LoadTrans.fieldbyname('kz').AsFloat;
izn[DM.LoadTrans.fieldbyname('Year').AsInteger,sz]:=DM.LoadTrans.fieldbyname('Inom').AsFloat;
if DM.LoadTrans.fieldbyname('kz').AsFloat>kzm[sz] then
begin
kzm[sz]:=DM.LoadTrans.fieldbyname('kz').AsFloat;
izm[sz]:=DM.LoadTrans.fieldbyname('Imax').AsFloat;
yzm[sz]:=DM.LoadTrans.fieldbyname('Year').AsInteger;
end;
DM.LoadTrans.Next;
end;
//	kzl[sz]:=DM.LoadTrans.fieldbyname('kz').AsFloat;
//  izl[sz]:=DM.LoadTrans.fieldbyname('Imax').AsFloat;
//	yzl[sz]:=DM.LoadTrans.fieldbyname('Year').AsInteger;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,3].Value:=dm.Trans.FieldByName('Snom').AsFloat;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,4].Value:=dm.Trans.FieldByName('Type').AsString;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,7].Value:=izm[sz];
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,10].Value:=kzm[sz];
end;

if DM.SectTP.RecordCount>1 then
begin
DM.SectTP.Next;
sid:=DM.SectTP.fieldbyname('Sect_ID').AsString;
sz:=dm.SectTP.RecNo;
FilterDataSet(DM.Trans,'Sect_ID='+sid);
FilterDataSet(DM.LoadTrans,'Sect_ID='+sid);
DM.LoadTrans.First;
while not DM.LoadTrans.Eof do
begin
iz[DM.LoadTrans.fieldbyname('Year').AsInteger,sz]:=DM.LoadTrans.fieldbyname('Imax').AsFloat;
kz[DM.LoadTrans.fieldbyname('Year').AsInteger,sz]:=DM.LoadTrans.fieldbyname('kz').AsFloat;
izn[DM.LoadTrans.fieldbyname('Year').AsInteger,sz]:=DM.LoadTrans.fieldbyname('Inom').AsFloat;
if DM.LoadTrans.fieldbyname('kz').AsFloat>kzm[sz] then
begin
kzm[sz]:=DM.LoadTrans.fieldbyname('kz').AsFloat;
izm[sz]:=DM.LoadTrans.fieldbyname('Imax').AsFloat;
yzm[sz]:=DM.LoadTrans.fieldbyname('Year').AsInteger;
end;
DM.LoadTrans.Next;
end;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,5].Value:=dm.Trans.FieldByName('Snom').AsFloat;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,6].Value:=dm.Trans.FieldByName('Type').AsString;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,8].Value:=izm[sz];
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,11].Value:=kzm[sz];
end;


for yz:=1990 to 2050 do
begin
iz[yz,0]:=iz[yz,1]+iz[yz,2];
izn[yz,0]:=min(izn[yz,1],izn[yz,2]);
if izn[yz,0]=0 then izn[yz,0]:=max(izn[yz,1],izn[yz,2]);
if izn[yz,0]=0 then izn[yz,0]:=-1;
kz[yz,0]:=iz[yz,0]/(izn[yz,0])*100;
if kz[yz,0]>kzm[0] then
begin
kzm[0]:=kz[yz,0];
izm[0]:=iz[yz,0];
yzm[0]:=yz;
end;
end;
yzl[0]:=max(yzl[1],yzl[2]);
izl[0]:=iz[yzl[0],1]+iz[yzl[0],2];
izn[yzl[0],0]:=min(izn[yzl[0],1],izn[yzl[0],2]);
if izn[yzl[0],0]=0 then izn[yzl[0],0]:=max(izn[yzl[0],1],izn[yzl[0],2]);
if izn[yzl[0],0]=0 then izn[yzl[0],0]:=-1;
kzl[0]:=izl[0]/(izn[yzl[0],0])*100;

xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,9].Value:=izm[0];
kzm[0]:=round(kzm[0]*10)/10;
xa.Workbooks.Item[1].Worksheets.Item[1].Cells.Item[j,12].Value:=kzm[0];

inc(j);
DM.TP.Next;
end;

cursor:=crDefault;
pb1.Visible:=false;
end;

end.
 

Cambur

Active Member
20.06.2010
27
0
#2
это какое-то тяжёлое чтиво.. прям как достоевский и школьная программа
если вставишь комментарии и опишешь данные (структуру), вероятно, кто-нибудь даст хороший совет
в принципе, всё должна выполнять БД, а прога - только вывести результат...