Topic: [скрипт] создание базы данных синтаксис MariaDB
скрип считывает данные из tables.ini и создает базу данных синтаксис MariaDB
единственное в чем я не смог разобраться - это как правильно считать значения по умолчанию..
procedure frmBuildProject_lacessdb_OnClick (Sender: TObject);
var
MySQL: TMyConnection;
i,j,p:integer;
section,sValue:TStringList;
tmiFil:TMemIniFile;
ini:TIniFile;
str,sPos,sID:String ;
begin
frmStartProject.SQLConnection.Connected := False;
MySQL := TMyConnection.Create(frmBuildProject);
try
MySQL.Options.UseUnicode := True;
MySQL.Server := 'localhost';
MySQL.Port := 3306;
MySQL.Username := 'root';
MySQL.Password := 'root';
MySQL.Database := 'test';
MySQL.LoginPromt := False;
try
MySQL.Connect;
except
ShowMessage('Can''t connect to database.');
end;
if MySQL.Connected then
begin
sID:='';
str:='';
tmiFil:=TMemIniFile.Create(ExtractFilePath (ParamStr (0))+'tables.ini');
sValue:=TStringList.Create;
section:=TStringList.Create;
tmiFil.ReadSections(section);
// считать все имена таблиц и подготовить строку удаления
for i:=0 to section.Count-1 do
if (i=section.Count-1) then str:=str+'`'+section[i]+'`' else str:=str+'`'+section[i]+'`,';
// удалить все таблицы из базы данных если такие есть
MySQL.ExecSQL('DROP TABLE IF EXISTS '+str);
str:='';
// создать таблицы и поля в базе данных
for i:=0 to section.Count-1 do
begin
str:='CREATE TABLE `'+section[i]+'` (`id` INT(11) NOT NULL AUTO_INCREMENT';
tmiFil.ReadSectionValues(section[i],sValue);
for j:=0 to sValue.Count-1 do
begin
p:=PosEx('=',sValue[j],1);
sPos:= copy(sValue[j],2,p-2);
if pos('TEXT',sValue[j]) then str:=str+',`'+sPos+'` MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL';
if pos('INTEGER',sValue[j]) then str:=str+',`'+sPos+'` INT(11) DEFAULT NULL';
if pos('CURRENCY',sValue[j]) then str:=str+',`'+sPos+'` DOUBLE DEFAULT NULL';
if pos('BOOLEAN',sValue[j]) then str:=str+',`'+sPos+'` INT(11) DEFAULT NULL';
if pos('DATETIME',sValue[j]) then str:=str+',`'+sPos+'` DATETIME DEFAULT NULL';
if pos('DATE',sValue[j]) then str:=str+',`'+sPos+'` DATE DEFAULT NULL';
if pos('TIME',sValue[j]) then str:=str+',`'+sPos+'` TIME DEFAULT NULL';
if pos('IMAGE',sValue[j]) then str:=str+',`'+sPos+'` MEDIUMBLOB DEFAULT NULL,`img_filename` text DEFAULT NULL';
if pos('FILE',sValue[j]) then str:=str+',`'+sPos+'` MEDIUMBLOB DEFAULT NULL,`file_filename` text DEFAULT NULL';
if pos('record_count',sValue[j]) then str:=str+',`record_count` int(11) DEFAULT NULL';
if pos('>',sValue[j]) then begin
str:=str+',`'+sPos+'` INT(11) NULL';
sID:=sID+'ALTER TABLE `'+section[i]+'` ADD INDEX `'+section[i]+'_'+sPos+'` (`'+sPos+'`) USING BTREE;';
end;
end;
str:=str+',PRIMARY KEY (`id`)) ENGINE = InnoDB;';
if (i=section.Count-1) then str:=str+sID;
MySQL.ExecSQL(str);
end;
MySQL.Disconnect;
end;
finally
MySQL.Free;
end;
end;