Разработка и эксплуатация АИС: Методическое пособие для выполнения лабораторных работ № 9-15, страница 9

procedure TForm1.btnDelClientsClick(Sender: TObject);

var

i, j: Integer;

IDs: string;

begin

if DBGrid1.SelectedRows.Count>0 then begin

if Application.MessageBox('Удалить информацию из БД',

'Подтверждение удаления',

MB_YESNO+MB_ICONQUESTION) = IDYES then begin

IDs:='';

with DBGrid1.DataSource.DataSet do

for i:=0 to DBGrid1.SelectedRows.Count-1 do begin

GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));

if IDs='' then

IDs:=FieldByName('id').AsString

else

IDs:=IDs+','+FieldByName('id').AsString;

end;

end;

table1.Close;

query1.SQL.Text:='DELETE FROM clients WHERE id IN ('+IDs+');';

query1.ExecSQL;

query1.Close;

table1.Open;

end;

end;

Иногда может потребоваться заполнить какой-то список (например значения в компонентах TComboBox, TListBox, TRadioGroup, TStrings, и т.д.) значениями определенного поля таблицы БД. Например, это может быть нужно, когда в таблицу, содержащую внешний ключ, нужно добавить запись, обеспечив при этом целостность данных. Во всех перечисленных выше компонентах значения хранятся в свойстве Items, представляющем собой объект класса TStrings, в котором каждая хранимая строка имеет свой уникальный индекс (подобно массиву строк). Соответственно, можно сохранять в нем строки из БД под номерами, соответствующими их идентификаторам. А затем подставлять в запрос вставки данных (INSERT) идентификатор выбранной пользователем строки. Но если в БД идентификаторы не идут последовательно, то при указанном методе в списке строк будут пропуски, что выглядит не очень хорошо. В этом случае можно заполнить список строк значениями из БД в произвольном порядке, а затем сделать запрос к БД на выборку идентификатора нужной строки.

Для примера создадим процедуру, заполняющую переданный ей в качестве параметра список строк значениями поля “tip_name” таблицы “types” (тип номера):

procedure getRoomsTypes(rtypes: TStrings);

begin

query1.Close;

query1.SQL.Text:= 'SELECT tip_name FROM types';

query1.Open;

query1.First;

rtypes.Clear;

while not query1.Eof do begin

rtypes.Lines.Add(query1.Fields[0].AsString);

query1.Next;

end;

query1.Close;

end;

Задания:

1)  Изучите пример выполнения задания.

2)  Добавьте в программу, созданную Вами при выполнении лабораторных работ №9-10, следующие возможности:

Для всех вариантов:  автоматическая генерация значения ключей для добавляемых строк.

Вариант 1:  добавление нового заказа на имеющуюся продукцию с возможностью выбора типа продукции из списка имеющейся и автоматического расчета стоимости покупки; удаление ненужных заказов как с возможностью выбора удаляемых заказов, так и с возможностью удаления заказов по маске даты (старше года, полугода, квартала, месяца, недели).

Вариант 2:  добавление записи о новой поставке товара с возможностью выбора вида товара и поставщика из списка имеющихся и автоматического расчета стоимости товаров; удаление ненужных записей о поставках как с возможностью выбора удаляемых записей, так и с возможностью удаления записей по маске даты (старше года, полугода, квартала, месяца, недели).

Вариант 3:  добавление нового работника с возможностью выбора отдела и руководителя из списка имеющихся; удаление записей об уволенных работниках с возможностью выбора удаляемых записей.

Вариант 4:  добавление записи о выдаче книги читателю с возможность выбора книги и читателя из списка имеющихся и автоматической фиксации даты выдачи; удаление записей о выдаче книг, которые уже вернули с возможностью выбора удаляемых записей.

Вариант 5:  добавление нового товара на базу с возможностью выбора товара и склада из списка имеющихся; удаление ненужных записей о товарах как с возможностью выбора записей, так и с возможностью всех записей об определенном виде товара или всех записей, относящихся к определенному складу, с возможностью выбора вида товара и склада из списка имеющихся.