bannerbannerbanner
полная версияБазы данных на Delphi 7

Сергей Николаевич Талипов
Базы данных на Delphi 7

3. КАСКАДНОЕ УДАЛЕНИЕ ДАННЫХ С БД

Каскадное удаление данных – это удаление связанных между собой данных с разных таблиц одновременно.

procedure TForm1.Button6Click(Sender: TObject);

var k: integer;

begin

  ADOTable1.Filtered := False;

  k:=ADOTable2['Kod_firmi'];

  ADOTable2.Delete;

  ADOTable1.Filter := 'Kod_postavschika = '+IntToStr(k);

  ADOTable1.Filtered := True;

  ADOTable1.First;

  while not ADOTable1.Eof do ADOTable1.Delete;

  ADOTable1.Filtered := False;

  DBLookupComboBox3.KeyValue := ADOTable2['Nazv_firmi'];

end;

procedure TForm1.ADOTable2AfterScroll(DataSet: TDataSet);

begin

DBLookupComboBox3.KeyValue := ADOTable2['Nazv_firmi'];

end;

********

procedure TForm1.Button7Click(Sender: TObject);

begin

if Edit5.Text = '' then

  ShowMessage('Сначала нужно ввести телефон директора.')

else

  begin

    ADOConnection1.BeginTrans;

    try

      ADOQuery4.Close;

      ADOQuery4.SQL.Clear;

      ADOQuery4.SQL.Add('delete');

      ADOQuery4.SQL.Add('from Diski_CD');

      ADOQuery4.SQL.Add('where Kod_postavschika in (select Kod_firmi from Firmi_postavschiki where Tel_dir like '''+Edit5.Text+'%'')');

      ADOQuery4.ExecSQL;

      ADOQuery4.Close;

      ADOQuery4.SQL.Clear;

      ADOQuery4.SQL.Add('delete');

      ADOQuery4.SQL.Add('from Firmi_postavschiki');

      ADOQuery4.SQL.Add('where Tel_dir like '''+Edit5.Text+'%''');

      ADOQuery4.ExecSQL;

      ADOConnection1.CommitTrans;

    except

      ADOConnection1.RollbackTrans;

      ShowMessage('Произошла ошибка удаления, удаление записей отменено.');

    end;

*******

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;

begin

ADOConnection1.BeginTrans;

try

ADOQuery4.Close;

ADOQuery4.SQL.Clear;

ADOQuery4.SQL.Add('Delete ');

ADOQuery4.SQL.Add('From disc_1');

ADOQuery4.SQL.Add('where cod_firm in (select cod_firm from firm_2');

ADOQuery4.SQL.Add('Where firm_2.cod_city in (Select cod_city_proiz from city_3');

ADOQuery4.SQL.Add('Where (name_city like ''%-%'')and not(name_city like ''%,%'')))');

ADOQuery4.ExecSQL;

ADOQuery4.SQL.Clear;

ADOQuery4.SQL.Add('Delete');

ADOQuery4.SQL.Add('From firm_2');

ADOQuery4.SQL.Add('where firm_2.cod_city in (select cod_city_proiz from city_3');

ADOQuery4.SQL.Add('Where (name_city like ''%-%'')and not(name_city like ''%,%''))');

ADOQuery4.ExecSQL;

try

for i:=0 to ADOConnection1.DataSetCount do

ADOConnection1.DataSets[i].Requery;

except

end;

ADOConnection1.CommitTrans;

except

ADOConnection1.RollbackTrans;

ShowMessage('Произошла ошибка удаления, удаление записей отменено.');

end;

end;

ЛЕКЦИЯ № 10

1. СОЗДАНИЕ И РАБОТА С ОТЧЕТАМИ ДАННЫХ БД

1.1. Создание простейших отчетов бд через HTML

Uses …, shellapi;

procedure TForm1.Button8Click(Sender: TObject);

var tst: TStringList;

begin

tst:=TStringList.Create;

tst.Add('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >');

tst.Add('<HTML>');

tst.Add('<HEAD>');

tst.Add('<title>Пробная страничка</title>');

tst.Add('</HEAD>');

tst.Add('<BODY>');

tst.Add(DataSetTableProducer1.Content);

tst.Add('</BODY></HTML>');

tst.SaveToFile('htmldoc.html');

tst.Free;

ShellExecute(handle, 'open', 'htmldoc.html', nil, nil, SW_SHOWNORMAL);

end;

1.2. Создание простейших отчетов БД с помощью QReport

Для рассмотрения вопроса создания простейшего отчета БД необходимо сделать две формы. На первой форме необходимо:

нанести компонет Table1 и Button1;

настроить Table1 на конкретную таблицу данных и открыть ее;

сдетать следующую процедуру обработчик для кнопки:

procedure TForm1.Button1Click(Sender: TObject);

begin

  form2.QuickRep1.Preview;

end;

На второй форме необходимо:

подключить в разделе «Uses» модуль «unit1»;

нанести компонет «QuickRep1» из вкладки «QReport» палитры компонент. Настроить его свойства;

нанести на компонет «QuickRep1» шесть компонент типа QRBand;

настроить компоненты QRBand на нужные модификации;

нанести в нужные места отчета компоненты QRLabel, QRDBText, QRSysData и настроить их свойства;

QuickRep

Базовый компонент для создания отчетов. Пустая форма отчета.


СвойствоНазначение свойства
DataSetПривязка к таблице БД, для которой делается отчет. Это свойство должно быть корректно задано для нормальной работы отчета

QRBand

Из этих компонентов-контейнеров стоится скелет отчета. Отчет обычно состоит как минимум из шести таких компонентов-контейнеров. Компонент имеет множество модификаций, от которых зависит назначение компонента


Свойство BandTypeНазначение компонента
rbTitleверхняя шапка всего отчета, выдается вверху первой страницы
rbSummaryнижняя шапка всего отчета, выдается внизу последней страницы
rbPageHeaderверхняя шапка для каждой страницы (включая первую)
rbPageFooterнижняя шапка для каждой страницы (включая последнюю)
rbColumnHeaderверхняя шапка для области вывода данных, выдается на каждой странице перед данными
rbDetailконтейнер для компонент вывода данных из БД, область данных
rbGroupFooterконтейнер для компонент вывода данных БД для группировки

QRLabel

Отображает текстовые данные в указанном месте отчета. Эквивалент обычного «Label»


СвойствоНазначение свойства
Captionкомментарий (слева) к отображаемым данным

QRDBText

Отображает данное из поля БД в указанном месте отчета. Эквивалент обычного «DBEdit». Компонент наносится обычно на контейнер «QRBand->rbDetail »


СвойствоНазначение свойства
AligmenttaCenter, taLeftJustify, taRightJustify
DataSetуказание источника данных (ссылка на Table или Query). Данное значение обязательно должно быть точно такое же, как и свойство «DataSet» у компонента QuickRep
DataFieldимя поля таблицы БД

QRSysData

Компонент для отображения системных данных (текущего времени, даты, номера страницы и др.)


Свойство DataНазначение компонента
qrsDateTimeсистемная дата и время
qrsPageNumberномер печатаемой страницы
qrsDetailNoпорядковый номер записи БД из области данных (по всему отчету)
в событии «OnPrint» можно написать: Value:=inttostr(Form1.Table1.RecNo);
qrsDetailCountколичество отображаемых в отчете записей БД (по всему отчету)
rbGroupFooterнижний колонтитул группы. Контейнер для отображения значений суммы и др. по группировке данных


СвойствоНазначение свойства
Textкомментарий (слева) к отображаемым данным

QRShape

Компонент для рисования простейшей фигуры


Свойство ShapeНазначение компонента
qrsHorLineгоризонтальная линия
qrsVertLineвертикальная линия
qrsRectangleЧетырехугольник

QRExpr

Компонент отображения вычисляемого значения. Очень мощный компонент. Обычно располагается на контейнерах QRGroup, QRBand (вида rbGroupFooter) и др.


СвойствоНазначение свойства
Expressionвыражение отображения, например:
sum(query1.zarpl)
query1.fam+' ( '+query1.name+' )'
IF(query1sc<>0,100*((sum(query1.sv)+ query1.so)),0)
upper(query1.famil+' '+COPY(query1.ima, 1, 1)+'. '+COPY(query1.otch, 1, 1)+'.')
Maskмаска отображения значения, например ‘### ### ### ### ### ### ##0.00’ или ‘##0.0%’
MasterСсылка на компонент QuickRep, например «QuickRep1»

QRGroup

 

Компонент контейнер для группировки данных БД по полю.


СвойствоНазначение свойства
ExpressionИмя поля группировки, например «Table1.group». Выбранная таблица группировки должна быть открыта с индексом по такому же полю
FooterbandСсылка на компонент «QRBand-типа rbGroupFooter»

Рейтинг@Mail.ru