Каскадное удаление данных – это удаление связанных между собой данных с разных таблиц одновременно.
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;
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 »
Свойство | Назначение свойства |
Aligment | taCenter, 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» |