Topic: Конвертация базы Sqlite в MySQL

Пытаюсь перейти с базы данных Sqlite на базу в MySQL, чтобы перевести приложение в сетевой режим работы.
Таблиц в базе много, поэтому создавать их вручную - дурацкая затея.
Поэтому, ищу скрипт, который из базы Sqlite создаст базу в MySQL. (данные даже не нужны, достаточно структуры)
Встретившееся на форуме решение создания скрипта с помощью SQLite Manager от Мозиллы не помогло.
SQLite Manager создает SQL скрипт, который имеет кучу ошибок с точки зрения бесплатного MySQL Workbench 6.3 от Oracle.
Нашел программу конвертации базы данных DBConvert for SQLite & MySQL.
Программа часть таблиц создает нормально, а некоторые не может - выпадает ошибка
-- Error 1022: Can't write; duplicate key in table 'tbl_goods'
Подозреваю, что эта ошибка возникает в таблице, где есть несколько ссылок на одну и ту же таблицу-справочник "Валюты".
(У меня товар имеет несколько цен и для каждой цены указывается своя валюта).
Кто-нибудь подскажет как это вылечить?
и еще возникает ошибка:
Creating table 'Tbl_Project_Specification'.
-- Error 1215: Cannot add foreign key constraint
По какой причине это может быть?

Re: Конвертация базы Sqlite в MySQL

Перевод проекта из SQLite на MySQL в случае когда не нужно перенести данные, не требует каких либо сложных действий.
При выборе MySQL базы данных структура будет создана автоматически. Вам необходимо просто подключиться к базе данных с помощью My Visual Database, после чего программа предложит создать структуру в БД.

Dmitry.

Re: Конвертация базы Sqlite в MySQL

появляется постоянно ошибка

Post's attachments

Attachment icon error.jpg 36.91 kb, 276 downloads since 2017-12-07 

Re: Конвертация базы Sqlite в MySQL

потом такая

Post's attachments

Attachment icon error2.jpg 17.99 kb, 200 downloads since 2017-12-07 

Re: Конвертация базы Sqlite в MySQL

Bullet3203 wrote:

появляется постоянно ошибка

В скрипте, в SQL запросе используется поле с названием read, для MySQL это зарезирвированное слово, просто возьмите это поле в кавычки  `read`

Dmitry.

Re: Конвертация базы Sqlite в MySQL

DriveSoft wrote:
Bullet3203 wrote:

появляется постоянно ошибка

В скрипте, в SQL запросе используется поле с названием read, для MySQL это зарезирвированное слово, просто возьмите это поле в кавычки  `read`

Спасибо, это помогло но есть другие ошибки(
и еще пару вопросов
1) как перевести базу без потери данных?
2) какой файл отвечает за базу после конвертации и как посмотреть его содержимое? например раньше это был файл sqlite.db и его можно было редактировать программой SqLite Studio

Re: Конвертация базы Sqlite в MySQL

1. Автоматического переноса данных между двумя различными базами данных пока не реализовано. Это можно сделать только путем экспорта в CSV файлы с последующим импортом.  Скрипт импорта/экпорта http://myvisualdatabase.com/forum/viewtopic.php?id=3619


2. В MySQL данные храняться сложней, используется много файлов. Для ее администрирования могу порекомендовать бесплатную программу MySQL Workbench

Dmitry.

Re: Конвертация базы Sqlite в MySQL

DriveSoft wrote:

1. Автоматического переноса данных между двумя различными базами данных пока не реализовано. Это можно сделать только путем экспорта в CSV файлы с последующим импортом.  Скрипт импорта/экпорта http://myvisualdatabase.com/forum/viewtopic.php?id=3619


2. В MySQL данные храняться сложней, используется много файлов. Для ее администрирования могу порекомендовать бесплатную программу MySQL Workbench

Спасибо за ответ

Re: Конвертация базы Sqlite в MySQL

Есть еще несколько вопросов:
1) при переходе на MySQL почему то теряются две таблицы (при пересоздании базы с sqlite в mysql) и одни и те же
2) с словами read и  write разобрался, взял в кавычки но все равно ругается на другие слова (datetime например)
3) при запуске проекта вылетает ошибка  List index out of bounds (0)
4) на sqlite была реализована блокировка активных актов, то есть когда один пользователь открывал его для редактирования, то для других он блокировался и окрашивался в красный цвет... после перехода на MySQL ругается на datetime и LOCK_TIME
5) Каков сам принцип работы MySQL сервера?  На Sqlite реализован вход по логину и паролю. После перехода на MySQL сначала появляется окно подключения к серверу, где один только пользователь, а потом уже появляется окно самой программы, где выбор пользователя и пароля....  нужно ли создавать пользователей именно на самом сервере или достаточно одного, который создается при установке самого сервера?
6) Не работают таймеры которые работали на старой версии
В общем очень много проблем появилось)

Re: Конвертация базы Sqlite в MySQL

1-2-3-6. Приложите пожалуйста проект, протестирую.


4. http://myvisualdatabase.com/forum/viewt … 429#p23429


5.
Так как MySQL клиент серверная СУБД, в нее уже встроен механизм авторизации по имени пользователя и пароля, пользователи должны создаваться инструментом для администрирования БД, например MySQL Workbench, также пользователям могут быть назначены различные привелегии по доступам к различным таблицам.


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


Чтобы избежать двойную авторизацию, подключение к MySQL можно осуществить с помощью скрипта
http://myvisualdatabase.com/forum/viewtopic.php?id=1804



Либо вы можете создавать для каждого клиента, отдельного пользователя на уровне MySQL, с различными привелегиями, но для этого вам необходимо изучить систему привелегий в MySQL.

Dmitry.

Re: Конвертация базы Sqlite в MySQL

DriveSoft wrote:

1-2-3-6. Приложите пожалуйста проект, протестирую.


4. http://myvisualdatabase.com/forum/viewt … 429#p23429


5.
Так как MySQL клиент серверная СУБД, в нее уже встроен механизм авторизации по имени пользователя и пароля, пользователи должны создаваться инструментом для администрирования БД, например MySQL Workbench, также пользователям могут быть назначены различные привелегии по доступам к различным таблицам.


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


Чтобы избежать двойную авторизацию, подключение к MySQL можно осуществить с помощью скрипта
http://myvisualdatabase.com/forum/viewtopic.php?id=1804



Либо вы можете создавать для каждого клиента, отдельного пользователя на уровне MySQL, с различными привелегиями, но для этого вам необходимо изучить систему привелегий в MySQL.

Спасибо, вроде со всем что выше разобрался, но еще появилась проблема.
На SQLite был написан таймер

procedure OnTimer2;
var
    sMessage: string = '';
begin
              sMessage := SQLExecute('SELECT message FROM reminder WHERE strftime(''%d.%m.%Y %H:%M:%S'', datetime) = strftime(''%d.%m.%Y %H:%M:%S'', ''now'', ''localtime'') ');
              if sMessage<>'' then
              begin
              ShowMessage(sMessage);
              end;
end;

При переходе на MySQL прописал так

procedure OnTimer2;
var
    sMessage: string = '';
begin
              sMessage := SQLExecute('SELECT message FROM reminder WHERE DATE_FORMAT(datetime, ''%d.%m.%Y %H:%M:%S'') = DATE_FORMAT(''%d.%m.%Y %H:%M:%S'', NOW()) ');
              if sMessage<>'' then
              begin
              ShowMessage(sMessage);
              end;
end;

Но ничего не отображается при достижении времени

Re: Конвертация базы Sqlite в MySQL

попробуйте такой формат даты

%Y-%m-%d %H:%i:%S

%M -  в MySQL обозначает месяц, подробней https://www.w3schools.com/sql/func_mysq … format.asp



В вашем случае таймер делает запрос в базу каждую секунду? Не могу сказать, что это хорошая идея, особенно когда будет много клиентов. Рекомендую избавиться от секунд в SQL запросе, а интервал таймера установить на 55 секунд

Dmitry.

Re: Конвертация базы Sqlite в MySQL

DriveSoft wrote:

попробуйте такой формат даты

%Y-%m-%d %H:%i:%S

%M -  в MySQL обозначает месяц, подробней https://www.w3schools.com/sql/func_mysq … format.asp



В вашем случае таймер делает запрос в базу каждую секунду? Не могу сказать, что это хорошая идея, особенно когда будет много клиентов. Рекомендую избавиться от секунд в SQL запросе, а интервал таймера установить на 55 секунд

Спасибо, попробую.
Да, все пять таймеров каждую секунду.
Ведь на MySQL ошибки Data Base is locked быть теперь не должно, даже если каждую секунду тикают таймеры?
Секунды добавил так как если будут только часы и минуты, отображение сообщения будет в промежутке от 1 до 59 секунды.

Re: Конвертация базы Sqlite в MySQL

Ошибки не будет, но возможна медленная работа. Протестируйте.

Dmitry.

Re: Конвертация базы Sqlite в MySQL

Попробовал такой формат %Y-%m-%d %H:%i:%S но все равно ничего не отобразилось, но и ошибок никаких не вывалилось... буду еще разбираться.
И еще вопрос: как правильно перенести базу с одного компа на другой сохраняя информацию?
Я  делал так:
1) Через MySQL WorkBench сделал Data Export т.е. DUMP
2) Залил все на флешку (папку с базой и папку с DUMPом)
3) На другом компе запустил проект, подключил к MySQL. Создал базу с таким же именем и такими же таблицами
4) В MySQL WorkBench на другом компе подключился к базе и сделал восстановление из DUMРа. Процесс прошел успешно.
Но все равно таблицы остались пустые... Что я сделал не так?