1 (edited by sibprogsistem 2020-09-29 03:42:22)

Topic: MariaDB

если программа создает таблицы в БД автоматически, то ни каких проблем не возникает
но если таблицы создается по запросу, то я получаю ошибку синтаксиса

{$MySQL disable_connectdialog}

     Application.ProcessMessages;

     frmMain.MySQLConnection.Server := sServer;
     frmMain.MySQLConnection.Port := StrToInt(sPort);
     frmMain.MySQLConnection.Username := sNameUserdb;
     frmMain.MySQLConnection.Password := sPassword;
     frmMain.MySQLConnection.Database := sNamedb;

     try
         frmMain.MySQLConnection.Connect;
     except
         MessageBox('Ошибка соединения ','Ошибка!', MB_OK+MB_ICONINFORMATION);
     end;
     if frmMain.MySQLConnection.Connected then
     begin
         CreateDatabaseTablesMySQL;
         UpdateDatabase('');
         frmQuestionList.tgQuestionList.dbUpdate;
     end;
  end;

http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=7096&download=0

Post's attachments

Attachment icon Безымянный.png 8.7 kb, 103 downloads since 2020-09-29 

2 (edited by CDB 2020-09-29 09:22:11)

Re: MariaDB

Не могли бы вы опубликовать SQL, который вы используете для создания таблиц, это может помочь вам понять, в чем проблема? Также может пригодиться версия MariaDB, которую вы используете.



Could you please post the SQL you are using to create the tables, this might help you understand what is the problem? The version of MariaDB you are using can also come in handy.

On a clear disk you can seek forever

3 (edited by sibprogsistem 2020-09-29 09:37:37)

Re: MariaDB

это встроенный SQL .Вызывается  функцией   CreateDatabaseTablesMySQL;
Mysql и MariaDB используют базовые выражения SQL..

4 (edited by CDB 2020-09-29 10:05:42)

Re: MariaDB

I meant the contents of your SQLExecute statement in the script file.

For example here is a MySQL statement for v8.0.20


CREATE TABLE `backups` (
  `id` tinyint DEFAULT NULL,
  `dateBackup` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
On a clear disk you can seek forever

Re: MariaDB

CDB wrote:

I meant the contents of your SQLExecute statement in the script file.

For example here is a MySQL statement for v8.0.20


CREATE TABLE `backups` (
  `id` tinyint DEFAULT NULL,
  `dateBackup` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

syntax error

6 (edited by sibprogsistem 2020-09-29 18:50:09)

Re: MariaDB

результат таков
если создавать соединение по умолчанию с MySQL, все таблицы и поля создаются автоматически, но при запуске программы и обращении к БД получаю ошибку (соединение отсутствует)..

создал таблицу (в ручную)
в программе создал SQL запрос  SQLEXecute('INSERT INTO `users`(login) VALUES ("admin");'); ошибок не получил, но и запись в БД не создана..

при попытке создания таблицы sqlexecute('CREATE TABLE users("id" INT);'); получаю сообщение ( уже существует).. во всех остальных варианта получаю сообщение ( синтаксическая ошибка)...

при использовании функции CreateDatabaseTablesMySQL; получаю сообщение (ситаксическая ошибка)

Re: MariaDB

в общем как я понял в функции CreateDatabaseTablesMySQL; мешанина со скобками
ладно напишу сам создание таблиц ((
вопрос только один :  какие условия создания полей применяются в MVD ?
типа

CREATE TABLE Customers
(
    Id INT PRIMARY KEY AUTO_INCREMENT,
    Age INT, 
    FirstName VARCHAR(20) NOT NULL,
    LastName VARCHAR(20) NOT NULL,
    Phone VARCHAR(20) NOT NULL UNIQUE
);
 
CREATE TABLE Orders
(
    Id INT PRIMARY KEY AUTO_INCREMENT,
    CustomerId INT,
    CreatedAt Date,
    FOREIGN KEY (CustomerId)  REFERENCES Customers (Id)
);

Re: MariaDB

procedure frmBuildProject_lacessdb_OnClick (Sender: TObject);
var
    MySQL: TMyConnection;
begin
    frmStartProject.SQLConnection.Connected := False;
    MySQL := TMyConnection.Create(frmBuildProject);
    try
            MySQL.Options.UseUnicode := True;
            MySQL.Server := 'localhost';//frmBuildProject.eHost.Text;
            MySQL.Port := 3306;//StrToInt(frmBuildProject.ePort.Text);
            MySQL.Username := 'root';// frmBuildProject.eUserName.Text;
            MySQL.Password := 'root'; //frmBuildProject.ePassworddb.Text;
            MySQL.Database := 'test';//  frmBuildProject.eDataBaseName.Text;;
            MySQL.LoginPromt := False;
        
            try
                MySQL.Connect;
            except
                ShowMessage('Can''t connect to database.');
            end;

            if MySQL.Connected then
            begin
            frmBuildProject.pTestConnect.Color:=$00408000;
            MySQL.ExecSQL('CREATE TABLE `tableone` ('+  // создание таблицы
            '`id` INT(11) NOT NULL AUTO_INCREMENT ,'+  // создание поля идентификатора
            '`text` MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL ,'+  // создание поля "текст"
            '`integer` INT(11) DEFAULT NULL ,'+ //создание поля "целое число"
            '`realnumber` DOUBLE DEFAULT NULL ,'+ //создание поля "вещественное число"
            '`money` DOUBLE DEFAULT NULL ,'+ //создание поля "деньги"
            '`boolean` INT(11) DEFAULT NULL ,'+ //создание поля "да/нет"
            '`datetime` datetime DEFAULT NULL ,'+ //создание поля "дата/время"
            '`date` date DEFAULT NULL ,'+ //создание поля "дата"
            '`time` time DEFAULT NULL ,'+ //создание поля "время"
            '`img` mediumblob DEFAULT NULL ,'+ //создание поля "изображения"
            '`img_filename` text DEFAULT NULL ,'+ //создание поля "имя изображения"
            '`file` mediumblob DEFAULT NULL ,'+ //создание поля "файл"
            '`file_filename` text DEFAULT NULL ,'+ //создание поля "имя файла"
            '`record_count` int(11) DEFAULT NULL ,'+ //создание поля "счетчик"
            '`id_q` INT(11) NULL ,'+ //создание поля "связь"
            'PRIMARY KEY (`id`)) ENGINE = InnoDB;'+ // присвоение первичного ключа полю идентификатора записи
            'ALTER TABLE `tableone` ADD INDEX `tableone_id_q` (`id_q`) USING BTREE;'); // присвоение внешнего ключа полю связи
            MySQL.Disconnect;
            end;

    finally
        MySQL.Free;
    end;
end;