1 (edited by pt.82 2018-09-13 03:51:56)

Topic: обновление структуры

добрый день! подскажите о можно ли как то скриптом (.bat) или еще какимнибудь вариантом изменить структуру, например в обновленной версии проекта необходимо обновить структуру, нет возможности обновлять у каждого пользователя эту структуру вручную (такая особенность - разные учреждения). а так допустим я ему присылаю какой нибудь .exe или .bat, он запускает его, и уже на его машине база с новой структурой.
Есть ли такая возможность или натолкните на мысль.  Можно сделать конечно отдельный проект обновление в него он закидывает свою базу нажимает обновить, и затем уже обновленную базу берет и опять копирует к себе в рабочий версию, но это как то неудобно
на данный момент поле паспорт вносится и серия и номер, в новой структуре надо разделить серию и номер в разные поля, сами данные пользователь сам скопирует и вставит в новые поля, но вот изменить структуру...
Спасибо!

Re: обновление структуры

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

Визуальное программирование: блог и телеграм-канал.

3 (edited by pt.82 2018-09-14 09:16:45)

Re: обновление структуры

структуру я меняю скриптом

SQLExecute('ALTER TABLE db_items ADD COLUMN Npas TEXT');
    SQLExecute('ALTER TABLE db_items ADD COLUMN spas TEXT');

получается и записывать в базу теперь, после изменения структуры чз скрипт, на кнопке сохранить надо писать скрипт для сохранения всех полей, т.к. поля созданные скриптом не отображаются в конструкторе выбора тогоже edit или в "Таблицы базы данных"

Re: обновление структуры

Я предполагал, что новую версию базы / клиента вы создаёте в конструкторе, параллельно создавая скрипт для обновления баз, находящихся у заказчиков. А после обновлении клиентской части запускаете скрипт, который приводит в соответствие их базы. Новая клиентская версия состоит из файлов script.dcu, tables.ini, forms.xml и файлов с отчётами.

Визуальное программирование: блог и телеграм-канал.

Re: обновление структуры

Ну т.е. я делаю промежуточное обновление пользователь запускает exe, программа меняет структуру, затем пользователь берет измененную базу и вставляет уже в конечную обновленную версию программы так я понимаю? Так в этом случае поля созданные в скрипте опять же конструктор не увидит. Или я вообще не так все понял? И вот про файлики script tables и forms можно поподробней чуть не понял

Re: обновление структуры

pt.82 wrote:

И вот про файлики script tables и forms можно поподробней чуть не понял

Для примера возьмем проект с названием "project", который работает с SQLite, и разберём его анатомию. В папке с проектом находятся:

  • Report - папка, в которой хранятся файлы с отчетными формами *.fr3

  • Script - папка, в которой хранятся файлы со скриптами *.pas и главный скомпилированный файл script.dcu

  • forms.xml - файл с описанием пользовательского интерфейса: формы и компоненты.

  • settings.ini - настройки проекта

  • sqlite.db - база данных

  • sqlite3.dll - библиотека для работы с СУБД SQLite

  • tables.ini - описание структуры базы данных

  • project.exe - исполняемый файл

  • project.vdb - служебный файл

Жирным шрифтом выделены файлы, которые содержат информацию, относящуюся к конкретному проекту. То есть новая версия проекта отличается от предыдущей версии этого же проекта только этими файлами.  Предполагается, что файл с исходниками (script.pas) не передаются конечным пользователям. Файлы settings.ini и sqlite.db содержат пользовательскую информацию, а остальные файлы не изменяются от версии к версии.

Таким образом, при переходе к следующей версии конечному пользователю необходимо:

  • заменить файлы *.fr3, script.dcu, forms.xml, tables.ini новыми

  • обновить структуру базы данных с помощью SQL-скрипта

То есть изменение версии вы делаете в среде разработки (конструкторе), в том числе и необходимые изменения в структуре базы данных. Но дополнительно вы создаёте SQL-скрипт, который необходимо однократно выполнить на базе данных конечного пользователя, чтобы привести её в соответствие со структурой новой версии проекта. Он необходим только в случае наличия в базе пользовательских данных, которые нужно сохранить. Если данные не важны, то можно просто удалить старую базу данных,а при запуске проекта создастся новая (пустая), на основании информации, хранящейся в tables.ini.

При переходе на другую версию среды разработки так же потребуется заменить файлы project.exe и project.vdb

Визуальное программирование: блог и телеграм-канал.

Re: обновление структуры

Все понятно спасибо!

вы пишите:

k245 wrote:

Но дополнительно вы создаёте SQL-скрипт, который необходимо однократно выполнить на базе данных конечного пользователя

т.е. на дополнительный скрипт также надо сделать проект с исполняемым файлом в который пользователь положит свою базу и однократно запустит  .exe. я так понимаю?
простите за тупизм

Re: обновление структуры

pt.82 wrote:

т.е. на дополнительный скрипт также надо сделать проект с исполняемым файлом в который пользователь положит свою базу и однократно запустит  .exe. я так понимаю?

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

Визуальное программирование: блог и телеграм-канал.

Re: обновление структуры

k245 wrote:

командный файл.

я извиняюсь за назойливость, вот как раз командный мне бы подошел, а можно пример простенький и как его создать