Использование преимуществ клиент-серверной архитектуры при проектировании приложений БД в Delphi, страница 5

procedureTSDIAppForm.Button1Click(Sender: TObject);

varF: textFile;

h: hwnd;  //переменная описывающая динамически открываемое окно

s, ball,chislo: string;

i:integer;

begin

assignFile(f,'C:\temp\vedom1.html'); // {*} создадим временный html-файл

rewrite(f); //Откроем его на запись

With DataModule1 do

   begin

    TempSQL.Close;

    TempSQL.SQL.Clear;

    TempSQL.SQL.Add('Select * from Session_Result ');

    TempSQL.SQL.Add(' where (Dis_shifr =' + chr($27)+ Disc_table.FieldByName ('Dis_Shifr').value +chr($27)+')');

    TempSQL.SQL.Add(' and (forma_otchetnosti ='+chr($27)+SDIAppForm.Otchetnost.Text +chr($27)+')');

    TempSQL.SQL.Add(' and (st_bilet in ');

   TempSQL.SQL.Add('(Select Student.st_bilet from student where gruppa='+chr($27) +SDIAppForm.GrName.Text +chr($27)+'));');

//    SDIAppForm.Memo1.lines.Assign(TempSQL.SQL);

    TempSQL.Open;

TempSQL.First;

    //строки ниже формируют заголовок html-документа.

// т.е. шапку ведомости

Write(f,'<html><title> экзаменационная ведомость </title>');

write(f,'<body><h2> <center>Федеральное агентство по образованию<br>  ');

write(f,'Московский государственный университет <br>  ');

write(f,'Приборостроения и информатики. <br>  ');

    write(f,'');

    write(f,' </h2>  ');

    write(f,' <h3> Ведомость  ('+otchetnost.Text+')<br>');

    write(f,' по дисциплине: '+dm1.Disc_table.FieldByName('Dis_name').Value+'<br>');

    write(f,' преподаватель:  '+TempSQL.FieldByName('teacher').value +'<br></h3>');

    write(f,'</center><br>');

    //рисуем шапку таблицы

    if  NoGrid.Checked then //без прорисовки сетки

    s:='<table border="0"> <tr><td width="5%"> №</td>'

    else    // и с таковой

    s:='<table border="1"> <tr><td width="5%"> №</td>';

    s:=s+'<td width="40%"> ФИО</td>';

    s:=s+'<td width="10%"> № ст. билета</td>';

    s:=s+'<td width="15%"> Оценка</td>';

    s:=s+'<td width="15%"> Подпись</td>';

    s:=s+'<td width="15%"> Дата</td></tr>';

    write (f,s);

i:=1;  // первый студент в списке

whilenotTempSQL.Eofdo  // пока не закончилось содержимое запроса

begin

    if empty.Checked then

     begin

       ball:='&nbsp;';

       chislo:='&nbsp;';

     end

      else

      begin

       ball:=TempSQL.FieldByName('ozenka').value;

       chislo:=DateToStr(TempSQL.FieldByName('Data_sdachi').value);

      end;

      s:='<tr><td>'+IntTostr(i)+'</td><td> '+ TempSQL.FieldByName('Surname').value;

      s:=s+' '+copy((TempSQL.FieldByName('FirstName').value),1,1)+'.';

      s:=s+' '+copy((TempSQL.FieldByName('otch').value),1,1)+'.</td>';

      s:=s+'<td>'+ TempSQL.FieldByName('st_bilet').value+'</td>';

      s:=s+'<td>'+ ball+'</td>';

      s:=s+'<td> &nbsp; </td>'; //это графа для подписи

s:=s+'<td>'+ chislo+'</td>';

      s:=s+'</tr>';

      Write(f, s);

      TempSQL.Next;

    end;

    write(f,'</table></body></html>');

   end;

   closeFile(f);

   ShellExecute(h,'open', pchar('winword.exe'), pchar('C:\temp\vedom1.html'),nil, SW_ShowNormal);

End;

Последняя строка (с ShellExecute) имеет следующую особенность: файл, имеющий структуру html- документа сохраняется с расширением *.doc для того, чтобы по завершении работы программы двойным щелчком по файлу можно было открыть его для редактирования, например, в  MS Word. Сохранив файл с расширением *.html, двойным щелчком мы сможем только просмотреть   наш отчёт в броузере без возможности редактирования (если настройками ОС Windows не определено открывать локальные html-файлы с помощью Word).