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

Тема в разделе "Pascal and Delphi", создана пользователем -, 12 июл 2012.

  1. Гость

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

    Код (Text):
    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.
     
  2. Cambur

    Cambur Active Member

    Регистрация:
    20 июн 2010
    Сообщения:
    27
    Симпатии:
    0
    это какое-то тяжёлое чтиво.. прям как достоевский и школьная программа
    если вставишь комментарии и опишешь данные (структуру), вероятно, кто-нибудь даст хороший совет
    в принципе, всё должна выполнять БД, а прога - только вывести результат...
     
Загрузка...

Поделиться этой страницей