If dm.TEMP4.Fields[0].AsString<>'' then

Begin

{11} showmessage('Данная запись уже есть в БД');

{12} exit;

End

Else

Begin

{17} dm.COM.CommandText:='INSERT INTO kadri (fio_st,id_nc_st,id_ug_st,id_zv_st) values ("'+TRIM(e1.Text)+'",'+id_n+','+id_ug+','+id_zv+')';

{18} dm.COM.Execute;

{19} showmessage('Запись добавлена');

{21} dm.st.active:=false;

{22} dm.st.Active:=true;

{23} BitBtn1Click(Sender);

{24} end;

End

Else

Begin

{6} dm.TEMP4.Active:=false;

{7} dm.TEMP4.CommandText:='Select * FROM kadri WHERE (fio_st = "'+TRIM(e1.Text)+'") AND (id_nc_st = '+id_n+') AND (id_ug_st = '+id_ug+') AND (id_zv_st = '+id_zv+')';

{8} dm.TEMP4.Active:=true;

If dm.TEMP4.Fields[0].AsString<>'' then

Begin

If dm.TEMP4.Fields[0].AsString <>dm.st.Fields[0].AsString then

Begin

{35} showmessage('Данная запись уже есть в БД');

{36} exit;

{37} end;

End

Else

Begin

{42} dm.COM.CommandText:='Update kadri SET fio_st = "'+TRIM(e1.Text)+'",id_nc_st = "'+id_n+'",id_ug_st = "'+id_ug+'",id_zv_st = "'+id_zv+'" WHERE id_st = '+dm.st.Fields[0].AsString+'';

{43} dm.COM.Execute;

{44} showmessage('Запись изменена');

{46} dm.st.active:=false;

{47} dm.st.Active:=true;

{48} BitBtn1Click(Sender);

{49} end;

{50} end;

{51} end;

 


Как мы видим SQL-текст запросов усложнился, но вы уже знаете достаточно и можете сами в нм разобраться. Единственное что стоит отметить это то, что при добавлении в поле БД, где тип данных текстовый используется следующая структура: «"'+Переменная+'"», а при добавлении в поле БД, где тип данных числовой «'+Переменная+'». Собственно это видно и из запроса «Insert …».

 

Теперь стоит вспомнить о том, что мы говорили о справочниках, а именно что мы к ним еще вернемся. Сейчас как раз настало то время. Дело в том, что мы впервые воспользовались данными из справочников и теперь нам стоит пересмотреть алгоритм удаление из этих справочников. Теперь если мы удалим какое-нибудь звание, то вместе с этим перестанет отображаться информация о студентах, у которых было это звание. Именно перестанет отображаться, а не исчезнет, т.к. в БД информацию об этом студенте останется, а это уже будет захламление ненужной информацией нашей БД, что не есть хорошо.

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

В данном примере мы будем применять первый способ. Ниже представлен измененный код кнопки «Удалить» для справочника «Национальность»:

 


{+Proverka}

If dm.pr.Fields[0].AsString='' then

begin

showmessage('Нет данных для удаления');

exit;

end;

{-Proverka}

If application.MessageBox('Вы хотите удалить запись?','Удаление', mb_yesno+mb_iconquestion)=idyes then

begin

{+Proverka2}

dm.TEMP4.Active:=false;

dm.TEMP4.CommandText:='Select * FROM UchPl WHERE id_pr_up = '+dm.pr.Fields[0].AsString+'';

dm.TEMP4.Active:=true;

If dm.TEMP4.Fields[0].AsString<>'' then

Begin

application.MessageBox('Эти данные используются в других таблицах','Удаление невозможно', mb_ok+mb_iconstop);

exit;

end;

{-Proverka2}

dm.COM.CommandText:='DELETE Prep FROM Prep WHERE id_pr = '+dm.pr.Fields[0].AsString+'';

dm.COM.Execute;

showmessage('Запись удалена успешно');

dm.pr.Active:=false;

dm.pr.Active:=true;

end;

end;


Текст обрамленный с спереди {+Proverka2} и сзади{-Proverka2} и есть код проверки на использование данных записей в других таблицах. Похожий код теперь нужно вставлять во все кнопки «Удалить» в тех справочниках данные, из которых используются в других таблицах. Теперь вы без трудов сможете доделать оставшиеся 2 таблицы: «Учебный план» и «электронный журнал». Их примерный внешний вид представлен на рисунках 26 и 27 соответственно.

Рисунок 26 – «Форма «Учебный план»

 

Рисунок 27 – «Форма «Электронный журнал»

 

При разработке формы «Электронный журнал» мы сталкиваемся с тем что в таблицу нужно добавить дату. Для ввода даты мы воспользуемся компонентом «DataTimePicker» с вкладки «Win32» (мы дадим ему имя «dtp»).Для добавления даты в «Access» можно использовать параметры или составлять строку. Мы будем использовать второй способ. Для этого напишем функцию под название «Data2», код которой представлен ниже:

 


function TFMain.DATA2(data:tdatetime):string;

var d,m,g:word;

Begin

decodedate(data,g,m,d);



/footer.php"; ?>