unit BeginUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DataUnit, ConstUnit, MainUnit; type TBeginForm = class(TForm) begin_memo: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var BeginForm: TBeginForm; implementation {$R *.dfm} procedure TBeginForm.FormCreate(Sender: TObject); var database_flag, user_flag, userpriv_flag, table_patient_flag, table_izmereniy_flag, table_param_flag, table_znacheniya_flag, table_points_flag : boolean; priv_str: string; i,count: Integer; c:Char; begin //флаги правильности работы программы, database_flag := false; //флаг существования базы данных user_flag := false; //флаг существования пользователя userpriv_flag := false; //флаг правильности привелегий пользователя table_patient_flag := false; table_izmereniy_flag := false; table_param_flag := false; table_znacheniya_flag := false; table_points_flag := false; //очищаем мемо и показываем форму Begin_memo.Clear; BeginForm.Show; //выводим первую запись в поле Begin_memo.Lines.Append(Begin_mes_check_first); //соединяемся с базой в качестве админа {$REGION 'Подключение к базе в качестве root'} with SQL_DM.mysql_con do begin loginprompt := Begin_conn_login_prompt; username := Begin_conn_username_root; server := Begin_conn_server; password := Begin_conn_pass_root; try connected := true; except //выводим сообщение об ошибке и прекращаем работу программы Begin_memo.Lines.Append(Begin_mes_fail_connect); if MessageBox(0, PChar(begin_mes_terminate+#13+begin_mes_fail_connect), Pchar(begin_caption_error), MB_ICONERROR or MB_OK )=id_OK then; begin beginForm.Close; MainForm.Close; end; end; connectdialog := SQL_DM.mysql_conn_dialog; end; {$ENDREGION 'Подключение к базе в качестве root'} if SQL_DM.mysql_con.Connected then {$REGION 'Подключение успешно'} begin {$REGION 'Работа с базой данных'} Begin_memo.Lines.Append(Begin_mes_root_connected); Begin_memo.Lines.Append(''); Begin_memo.Lines.Append(Begin_mes_check_database); //смотрим доступные базы данных на сервере if mysql_query(SQL_DM.mysql_query1, 'Show Databases;',1) then begin SQL_DM.mysql_DSQ1.DataSet.First; //проходим все, если не найдем то флаг остается в false, а если найдем //требуемую базу даннных - то в true while not SQL_DM.mysql_DSQ1.DataSet.Eof do begin if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Database').AsString=database_name then database_flag:=true; SQL_DM.mysql_DSQ1.DataSet.Next; end; end; //если база найдена то выводим сообщение, если нет, то пытаеммся создать if database_flag then begin Begin_memo.Lines.Append(Begin_mes_exist_database); end else begin Begin_memo.Lines.Append(Begin_mes_notexist_database); Begin_memo.Lines.Append(Begin_mes_create_database); if mysql_query(SQL_DM.mysql_query1, 'CREATE DATABASE `rd` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;',2) then begin //проверка на корректное создание базы данных SQL_DM.mysql_DSQ1.Enabled:=false; if mysql_query(SQL_DM.mysql_query1, 'Show Databases;',1) then begin SQL_DM.mysql_DSQ1.Enabled:=true; SQL_DM.mysql_DSQ1.DataSet.First; while not SQL_DM.mysql_DSQ1.DataSet.Eof do begin if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Database').AsString=database_name then database_flag:=true; SQL_DM.mysql_DSQ1.DataSet.Next; end; end; end; if database_flag then Begin_memo.Lines.Append(Begin_mes_create_database_sucsess); end; {$ENDREGION 'Работа с базой данных'} {$REGION 'Работа с Пользователем'} //начинаем проверку существования пользователя Begin_memo.Lines.Append(Begin_mes_check_user); //выбираем нужную базу данных mysql_query(SQL_DM.mysql_query1, 'USE mysql;',2); //проверяем наличие пользователя, если да, то устанавливаем флаг существования //пользователя SQL_DM.mysql_DSQ1.Enabled:=false; if mysql_query(SQL_DM.mysql_query1, 'SELECT user from User;',1) then begin SQL_DM.mysql_DSQ1.DataSet.First; while not SQL_DM.mysql_DSQ1.DataSet.Eof do begin if SQL_DM.mysql_DSQ1.DataSet.FieldByName('user').AsString=user_name then user_flag:=true; SQL_DM.mysql_DSQ1.DataSet.Next; end; end; if user_flag then Begin_memo.Lines.Append(Begin_mes_check_user_sucsess) else begin {$REGION 'Создание пользователя'} //если пользователь не найден, то создаем его. Begin_memo.Lines.Append(Begin_mes_check_user_notsucsess); Begin_memo.Lines.Append(Begin_mes_user_create); {$REGION 'SQL_DM.mysql_query1'} with SQL_DM.mysql_query1 do begin Active:=false; SQL.Clear; SQL.Append('CREATE USER '''+user_name+'''@''localhost'' IDENTIFIED BY '''+user_pass+''' ;'); SQL.Append(''); SQL.Append('GRANT SELECT ,'); SQL.Append('INSERT ,'); SQL.Append('UPDATE ,'); SQL.Append('DELETE ,'); SQL.Append('CREATE ,'); SQL.Append('DROP , '); SQL.Append('EXECUTE , '); SQL.Append('INDEX , '); SQL.Append('ALTER ON * . * TO '''+user_name+'''@''localhost'' IDENTIFIED BY '''+user_pass+''' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;'); try SQL_DM.mysql_query1.Execute; except // end; end; {$ENDREGION 'SQL_DM.mysql_query1'} //проверка на корректное создание пользователя SQL_DM.mysql_DSQ1.Enabled:=false; if mysql_query(SQL_DM.mysql_query1, 'SELECT user from User;',1) then begin SQL_DM.mysql_DSQ1.DataSet.First; while not SQL_DM.mysql_DSQ1.DataSet.Eof do begin if SQL_DM.mysql_DSQ1.DataSet.FieldByName('user').AsString=user_name then user_flag:=true; SQL_DM.mysql_DSQ1.DataSet.Next; end; if user_flag then Begin_memo.Lines.Append(Begin_mes_user_create_suc); end; {$ENDREGION 'Создание пользователя'} end; {$REGION 'Права пользователя'} //проверка на достаточность прав, осуществляется только //при наличии пользователя if user_flag then begin Begin_memo.Lines.Append(Begin_mes_check_user_priv); if mysql_query(SQL_DM.mysql_query1, 'SELECT * from User Where user='''+user_name+''';',1) then begin {$REGION 'Права пользователя. Выборка'} SQL_DM.mysql_DSQ1.DataSet.First; priv_str:=''; //в одну строку записываем все существующие права пользователя в виде Y/N priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Select_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Insert_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Update_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Delete_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Create_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Drop_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Reload_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Shutdown_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Process_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['File_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Grant_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['References_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Index_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Alter_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Show_db_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Super_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Create_tmp_table_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Lock_tables_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Execute_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Repl_slave_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Repl_client_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Create_view_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Show_view_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Create_routine_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Alter_routine_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Create_user_priv']; {$ENDREGION 'Права пользователя. Выборка'} {$REGION 'Права пользователя. Проверка'} count:=0; //showmessage(priv_str); //showmessage(inttostr(length(priv_str))); for C in priv_str do if C='Y' then inc(count); {$ENDREGION 'Права пользователя. Проверка'} if count=priv_y_count then begin userpriv_flag:=true; Begin_memo.Lines.Append(Begin_mes_check_user_priv_suc); end else begin {$REGION 'Права пользователя. Изменение'} //если права не соответствуют требуемым, то создаем их Begin_memo.Lines.Append(Begin_mes_check_user_priv_notsuc); SQL_DM.mysql_query1.Active:=false; SQL_DM.mysql_query1.SQL.Clear; SQL_DM.mysql_query1.SQL.Append('DELETE FROM `mysql`.`user` WHERE `user`.`Host` = ''''localhost'''' AND `user`.`User` = '''+user_name+''' LIMIT 1;'); SQL_DM.mysql_query1.SQL.Append('CREATE USER '''+user_name+'''@''localhost'' IDENTIFIED BY '''+user_pass+''' ;'); SQL_DM.mysql_query1.SQL.Append(''); SQL_DM.mysql_query1.SQL.Append('GRANT SELECT ,'); SQL_DM.mysql_query1.SQL.Append('INSERT ,'); SQL_DM.mysql_query1.SQL.Append('UPDATE ,'); SQL_DM.mysql_query1.SQL.Append('DELETE ,'); SQL_DM.mysql_query1.SQL.Append('CREATE ,'); SQL_DM.mysql_query1.SQL.Append('DROP , '); SQL_DM.mysql_query1.SQL.Append('EXECUTE , '); SQL_DM.mysql_query1.SQL.Append('INDEX , '); SQL_DM.mysql_query1.SQL.Append('ALTER ON * . * TO '''+user_name+'''@''localhost'' IDENTIFIED BY '''+user_pass+''' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;'); try SQL_DM.mysql_query1.Execute; except // end; //проверяем сделанные изменения if mysql_query(SQL_DM.mysql_query1, 'SELECT * from User Where user='''+user_name+''';',1) then begin {$REGION 'Права пользователя. Выборка'} SQL_DM.mysql_DSQ1.DataSet.First; priv_str:=''; //в одну строку записываем все существующие права пользователя в виде Y/N priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Select_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Insert_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Update_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Delete_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Create_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Drop_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Reload_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Shutdown_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Process_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['File_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Grant_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['References_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Index_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Alter_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Show_db_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Super_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Create_tmp_table_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Lock_tables_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Execute_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Repl_slave_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Repl_client_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Create_view_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Show_view_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Create_routine_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Alter_routine_priv']; priv_str:=priv_str+SQL_DM.mysql_DSQ1.DataSet.FieldValues['Create_user_priv']; {$ENDREGION 'Права пользователя. Выборка'} count:=0; for C in priv_str do if C='Y' then inc(count); if count=priv_y_count then begin userpriv_flag:=true; Begin_memo.Lines.Append(Begin_mes_check_user_priv_change); end end; {$ENDREGION 'Права пользователя. Изменение'} end; end; end; {$ENDREGION 'Права пользователя'} {$ENDREGION 'Работа с Пользователем'} if user_flag and userpriv_flag and database_flag then begin Begin_memo.Lines.Append(''); Begin_memo.Lines.Append(Begin_mes_first_stage_complete); Begin_memo.Lines.Append(''); Begin_memo.Lines.Append(Begin_mes_reconnect); {$REGION 'Подключение к базе в качестве пользователя'} with SQL_DM.mysql_con do begin connected := false; //sleep(300); loginprompt := Begin_conn_login_prompt; username := user_name; server := Begin_conn_server; password := user_pass; try connect; except // end; connectdialog := SQL_DM.mysql_conn_dialog; end; {$ENDREGION 'Подключение к базе в качестве пользователя'} if SQL_DM.mysql_con.Connected then begin Begin_memo.Lines.Append(Begin_mes_reconnect_sucsess ); //проверяем наличие таблиц mysql_query(SQL_DM.mysql_query1, 'USE '+database_name+';',2); if mysql_query(SQL_DM.mysql_query1, 'Show Tables;',1) then begin {$REGION 'Проверка наличия таблиц'} SQL_DM.mysql_DSQ1.Enabled:=true; SQL_DM.mysql_DSQ1.DataSet.First; while not SQL_DM.mysql_DSQ1.DataSet.Eof do begin if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Tables_in_'+database_name).AsString=table_patient_name then table_patient_flag:=true; if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Tables_in_'+database_name).AsString=table_izm_name then table_izmereniy_flag:=true; if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Tables_in_'+database_name).AsString=table_param_name then table_param_flag:=true; if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Tables_in_'+database_name).AsString=table_znacheniya_name then table_znacheniya_flag:=true; if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Tables_in_'+database_name).AsString=table_points_name then table_points_flag:=true; SQL_DM.mysql_DSQ1.DataSet.Next; end; {$ENDREGION 'Проверка наличия таблиц'} //если таблица существует, то выводим сообщение об этом, если нет //то создаем их {$REGION 'Таблица пациентов'} if table_patient_flag then Begin_memo.Lines.Append(Begin_mes_table_pat_exist) else begin Begin_memo.Lines.Append(Begin_mes_table_not_pat_exist); Begin_memo.Lines.Append(Begin_mes_table_pat_create); with SQL_DM.mysql_query1 do begin Active:=false; SQL.Clear; SQL.Append('CREATE TABLE `'+table_patient_name+'` ('); SQL.Append('`id` int(5) NOT NULL auto_increment,'); SQL.Append('`fam` varchar(60) NOT NULL,'); SQL.Append('`name` varchar(60) NOT NULL,'); SQL.Append('`otch` varchar(60) NOT NULL,'); SQL.Append('`day` tinyint(3) unsigned NOT NULL,'); SQL.Append('`mon` tinyint(3) unsigned NOT NULL,'); SQL.Append('`year` smallint(4) unsigned NOT NULL,'); SQL.Append('`opisanie` text NOT NULL,'); SQL.Append('PRIMARY KEY (`id`)'); SQL.Append(') ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;'); try Execute; except // end; end; end; {$ENDREGION 'Таблица пациентов'} {$REGION 'Таблица измерений'} if table_izmereniy_flag then Begin_memo.Lines.Append(Begin_mes_table_izm_exist) else begin Begin_memo.Lines.Append(Begin_mes_table_not_izm_exist); Begin_memo.Lines.Append(Begin_mes_table_izm_create); with SQL_DM.mysql_query1 do begin Active:=false; SQL.Clear; SQL.Append('CREATE TABLE `'+table_izm_name+'` ('); SQL.Append('`id` int(5) NOT NULL auto_increment,'); SQL.Append('`date` datetime NOT NULL,'); SQL.Append('`patient_num` int(11) NOT NULL default ''0'','); SQL.Append('`opisanie` text NOT NULL,'); SQL.Append('PRIMARY KEY (`id`),'); SQL.Append('UNIQUE KEY `date` (`date`),'); SQL.Append('KEY `patient_num` (`patient_num`)'); SQL.Append(') ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;'); try Execute; except // end; end; end; {$ENDREGION 'Таблица измерений'} {$REGION 'Таблица параметров'} if table_param_flag then Begin_memo.Lines.Append(Begin_mes_table_param_exist) else begin Begin_memo.Lines.Append(Begin_mes_table_not_param_exist); Begin_memo.Lines.Append(Begin_mes_table_param_create); with SQL_DM.mysql_query1 do begin Active:=false; SQL.Clear; SQL.Append('CREATE TABLE `'+table_param_name+'` ('); SQL.Append('`id` tinyint(4) NOT NULL auto_increment,'); SQL.Append('`name` varchar(5) NOT NULL,'); SQL.Append('`opisanie` varchar(100) NOT NULL,'); SQL.Append('PRIMARY KEY (`id`)'); SQL.Append(') ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;'); try Execute; except // end; end; end; {$ENDREGION 'Таблица параметров'} {$REGION 'Таблица значений'} if table_znacheniya_flag then Begin_memo.Lines.Append(Begin_mes_table_znach_exist) else begin Begin_memo.Lines.Append(Begin_mes_table_not_znach_exist); Begin_memo.Lines.Append(Begin_mes_table_znach_create); with SQL_DM.mysql_query1 do begin Active:=false; SQL.Clear; SQL.Append('CREATE TABLE `'+table_znacheniya_name+'` ('); SQL.Append('`id` bigint NOT NULL auto_increment,'); SQL.Append('`izm_num` int(11) NOT NULL,'); SQL.Append('`param_num` tinyint(4) NOT NULL,'); SQL.Append('`point_num` tinyint(3) NOT NULL,'); SQL.Append('`povtor_num` enum(''1'',''2'',''3'',''4'',''5'',''6'') NOT NULL,'); SQL.Append('`znach` float NOT NULL,'); SQL.Append('`znach_UI` mediumtext NOT NULL,'); SQL.Append('PRIMARY KEY (`id`),'); SQL.Append('KEY `izm_num` (`izm_num`),'); SQL.Append('KEY `param_num` (`param_num`),'); SQL.Append('KEY `point_num` (`point_num`)'); SQL.Append(') ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;'); SQL.Append('ALTER TABLE `rd_znacheniya` ADD `znach_UI` VARCHAR( 24000 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL AFTER `znach`;'); try Execute; except // end; end; end; {$ENDREGION 'Таблица значений'} {$REGION 'Таблица точек'} if table_points_flag then Begin_memo.Lines.Append(Begin_mes_table_points_exist) else begin Begin_memo.Lines.Append(Begin_mes_table_not_points_exist); Begin_memo.Lines.Append(Begin_mes_table_points_create); with SQL_DM.mysql_query1 do begin Active:=false; SQL.Clear; SQL.Append('CREATE TABLE `'+table_points_name+'` ('); SQL.Append('`num` TINYINT( 3 ) NOT NULL ,'); SQL.Append('`opisanie` VARCHAR( 500 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,'); SQL.Append('`name` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ''point'','); SQL.Append('`image` LONGBLOB ,'); SQL.Append('PRIMARY KEY ( `num` )'); SQL.Append(') ENGINE = innodb CHARACTER SET utf8 COLLATE utf8_general_ci;'); try Execute; except // end; end; end; {$ENDREGION 'Таблица точек'} {$REGION 'Проверка создания таблиц'} //проверяем корректность создания таблиц if mysql_query(SQL_DM.mysql_query1, 'Show Tables;',1) then begin SQL_DM.mysql_DSQ1.Enabled:=true; SQL_DM.mysql_DSQ1.DataSet.First; while not SQL_DM.mysql_DSQ1.DataSet.Eof do begin if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Tables_in_'+database_name).AsString=table_patient_name then table_patient_flag:=true; if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Tables_in_'+database_name).AsString=table_izm_name then table_izmereniy_flag:=true; if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Tables_in_'+database_name).AsString=table_param_name then table_param_flag:=true; if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Tables_in_'+database_name).AsString=table_znacheniya_name then table_znacheniya_flag:=true; if SQL_DM.mysql_DSQ1.DataSet.FieldByName('Tables_in_'+database_name).AsString=table_points_name then table_points_flag:=true; SQL_DM.mysql_DSQ1.DataSet.Next; end; {$ENDREGION 'Проверка создания таблиц'} {$REGION 'Обработка ошибок создания таблиц'} if not table_patient_flag and table_izmereniy_flag and table_param_flag and table_znacheniya_flag and table_points_flag then begin//обрабатываем полученные результаты if table_patient_flag then Begin_memo.Lines.Append(Begin_mes_table_pat_create_sucsess) else begin //обработка ошибки end; if table_izmereniy_flag then Begin_memo.Lines.Append(Begin_mes_table_izm_create_sucsess) else begin //обработка ошибки end; if table_param_flag then Begin_memo.Lines.Append(Begin_mes_table_param_create_sucsess) else begin //обработка ошибки end; if table_znacheniya_flag then Begin_memo.Lines.Append(Begin_mes_table_znach_create_sucsess) else begin //обработка ошибки end; if table_points_flag then Begin_memo.Lines.Append(Begin_mes_table_points_create_sucsess) else begin //обработка ошибки end; end; {$ENDREGION 'Обработка ошибок создания таблиц'} end; {$REGION 'Создание ключей'} //создание ключей. Происходит в любом случае Begin_memo.Lines.Append(Begin_mes_keys_create); with SQL_DM.mysql_query1 do begin Active:=false; SQL.Clear; SQL.Append('ALTER TABLE `rd_izmerenia`'); SQL.Append('ADD CONSTRAINT `rd_izmerenie_ibfk_1` FOREIGN KEY (`patient_num`) REFERENCES `rd_patient` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;'); SQL.Append('ALTER TABLE `rd_znacheniya` ADD FOREIGN KEY ( `izm_num` ) REFERENCES `rd`.`rd_izmerenia` ('); SQL.Append('`id`'); SQL.Append(') ON DELETE CASCADE ON UPDATE CASCADE ;'); SQL.Append('ALTER TABLE `rd_znacheniya` ADD FOREIGN KEY ( `param_num` ) REFERENCES `rd`.`rd_param` ('); SQL.Append('`id`'); SQL.Append(') ON DELETE CASCADE ON UPDATE CASCADE ;'); SQL.Append('ALTER TABLE `rd_znacheniya` ADD FOREIGN KEY ( `point_num` ) REFERENCES `rd`.`rd_points` ('); SQL.Append('`num`'); SQL.Append(') ON DELETE CASCADE ON UPDATE CASCADE ;'); try Execute; except // end; end; {$ENDREGION 'Создание ключей'} {$REGION 'Печать сообщений, контроль ошибок'} if table_patient_flag and table_izmereniy_flag and table_param_flag and table_znacheniya_flag and table_points_flag then begin Begin_memo.Lines.Append(''); Begin_memo.Lines.Append(Begin_mes_table_sucsess); Begin_memo.Lines.Append(''); Begin_memo.Lines.Append(Begin_mes_check_passed); Begin_memo.Lines.Append(''); Begin_memo.Lines.Append(Begin_mes_program_start); //sleep(1000); self.Close; end; {$ENDREGION 'Печать сообщений, контроль ошибок'} end; end; end {$ENDREGION: 'Подключение успешно'} else {$REGION 'Сообщение об ошибке подключения'} begin if MessageBox (0, PChar(begin_mes_second_connect_false), Pchar(begin_caption_error), MB_ICONINFORMATION or MB_OK )=id_OK then begin BeginForm.Close; MainForm.Close; end;//выход из программы end; {$ENDREGION 'Сообщение об ошибке подключения'} end; end; end.