powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Автоматизировать сравнение баз
15 сообщений из 15, страница 1 из 1
Автоматизировать сравнение баз
    #39953045
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас при подготовке инсталляционной базы у меня выполняются следующие действия
1. Сравниваются метаданные и формируется скрипт
2. Сравниваются данные двух таблиц и полученный скрипт добавляется к основному
3. В начало и конец общего скрипта добавляется вызов двух процедур

Хочется все это автоматизировать и перевести на IBEBLOCK.

Чего не хватает
1. Т.к. у меня в скрипте есть своя шапка, то хочется добавить опцию AppendMode в функцию ibec_CompareMetadata
2. В функции ibec_CompareMetadata и ibec_CompareTables добавить опцию, которая будет отключать добавление оператора CONNECT в скрипт.

Это основное. И две мелких хотелки
1. Узнавать когда каждая из функций не нашла отличий
2. Подгрузить файл в SQL Executot

И вопрос. ibec_CompareTables позволяет указать выражение WHERE. Правильно ли я понимаю, что это возможно только при сравнении одной таблицы? Или можно указать к какой таблице это выражение относится?


С уважением, Vasilisk
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39953156
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

И вопрос. ibec_CompareTables позволяет указать выражение WHERE. Правильно ли я понимаю, что это возможно только при сравнении одной таблицы? Или можно указать к какой таблице это выражение относится?


Это выражение будет применено ко всем таблицам в списке.

По остальному - позже.
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39953373
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

Чего не хватает
1. Т.к. у меня в скрипте есть своя шапка, то хочется добавить опцию AppendMode в функцию ibec_CompareMetadata


Не вижу в этом необходимости. После сравнения грузишь получившийся скрипт в переменную (ibec_LoadFromFile) и затем сохраняешь ее в файл со своей шапкой (ibec_SaveToFile с флагом __stfAppend).

Или просто INPUT <файл скрипта> к своей шапке дописываешь.

_Vasilisk_

2. В функции ibec_CompareMetadata и ibec_CompareTables добавить опцию, которая будет отключать добавление оператора CONNECT в скрипт.


Это можно. В следующей версии опция NoConnect.

_Vasilisk_

Это основное. И две мелких хотелки
1. Узнавать когда каждая из функций не нашла отличий


Думаю, тоже можно.

_Vasilisk_

2. Подгрузить файл в SQL Executot


Ничего не понял.
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39953382
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
_Vasilisk_1. Т.к. у меня в скрипте есть своя шапка, то хочется добавить опцию AppendMode в функцию ibec_CompareMetadata
Не вижу в этом необходимости. После сравнения грузишь получившийся скрипт в переменную (ibec_LoadFromFile) и затем сохраняешь ее в файл со своей шапкой (ibec_SaveToFile с флагом __stfAppend).А так я вначале формирую шапку в новом файле, а потом в этот же файл дописываю выхлопы ibec_CompareMetadata и ibec_CompareTables

IBExpert
_Vasilisk_2. Подгрузить файл в SQL Executot
Ничего не понял.Файл сохраняется на диске. Хочется избежать ручных манипуляций Script Executive -> Load from file, а чтобы он сразу подгружался в новое окно Script Executive. Как делает стандартное Extract Data Into Script или Compare Tables. Хоть скрипт и сохраняется в файл, но потом выдается запрос и скрипт загружается в новое окно Script Executive
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39953468
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Файл сохраняется на диске. Хочется избежать ручных манипуляций Script Executive -> Load from file, а чтобы он сразу подгружался в новое окно Script Executive.


Это делается секретной командой
Код: plsql
1.
ibec_ibe_PerformAction(null, 'OpenScriptFile', 'D:\temp\111.sql');
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39953469
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В свежей версии:
1. Чтобы получить скрипт без CONNECT и связанных с ним SET, указать NoConnect в строке опций.
2. Для ibec_CompareMetadata указать в строке опций Return=ActionCount - функция вернет число операторов CREATE/ALTER/DROP и т.д. в скрипте сравнения. Всякие SET, COMMIT и иже с ними не считаются. Если различий нет, то должна вернуть 0.
3. Для ibec_CompareTables указать в строке опций Return=DiffCount - функция вернет общее количество различающихся записей.

Особо не тестил.
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39953555
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Это делается секретной командой
Специально искал в доке. Не увидел
IBExpert
В свежей версии:
Спасибо
AppendMode таки не прикрутил
IBExpert
Особо не тестил.
В понедельник погоняю
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39953567
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

AppendMode таки не прикрутил


Да, я тоже лентяй.
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39954099
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Да, я тоже лентяй.
ibec_SaveToFile поддерживает Append, ibec_CompareTables тоже. Ну одну функцию допилить
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39954115
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая-то беда
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
execute ibeblock
as
begin
  cbb = 'execute ibeblock (LogMessage variant)
         returns (
           Threshold integer = 200)
         as
         begin
           ibec_progress(LogMessage);
         end';

  var_script_file = 'D:\script.sql';

  SourceDB = ibec_CreateConnection(__ctInterBase, '............');
  TargetDB = ibec_CreateConnection(__ctInterBase, '...........');

  try
    ibec_CompareMetadata(SourceDB, TargetDB,
                         var_script_file,
                         'ServerVersion=FB30;
                          OmitGrants;
                          SafeDatatypeConversion;
                          IgnoreIBEObjects;
                          AppendMode;
                          NoConnect',
                         cbb);
    ibec_ShowMessage('1');

    ibec_CompareTables(SourceDB, TargetDB,
                       'INTERNAL_CFGS',
                       'INTERNAL_CFGS',
                       var_script_file,
                       'IncludeMilliseconds;
                       CommitAfter=2000;
                       NoConnect;
                       AppendMode;',
                       cbb);
    ibec_ShowMessage('2');
  finally
    ibec_CloseConnection(TargetDB);
    ibec_CloseConnection(SourceDB);
  end;
end;

ibec_ShowMessage('1'); срабатывает, а потомAccess violation at address 00542739 in module 'IBExpert.exe'. Read of address 000000B0по отдельности вызовы работают. Таблица INTERNAL_CFGS в обоих базах идентичны. По метаданным есть различия в процедурах
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39954252
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Какая-то беда


ibec_CompareMetadata коннекты закрывала по окончании работы. Исправил.

А вот скажи, ты это всерьез в один скрипт и результаты сравнения метаданных, и результаты сравнения данных собираешься пихать?
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39954285
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Исправил.
Стало лучше
IBExpert
А вот скажи, ты это всерьез в один скрипт и результаты сравнения метаданных, и результаты сравнения данных собираешься пихать?
А в чем проблема? У меня есть две таблицы, обеспечивающие работу приложения. В одной хранятся SQL запросы, в другой локализация. Данные в этих таблицах клиент не изменяет никогда
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39954308
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
А в чем проблема? У меня есть две таблицы, обеспечивающие работу приложения. В одной хранятся SQL запросы, в другой локализация. Данные в этих таблицах клиент не изменяет никогда


В таком сценарии проблем не видно.
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39954320
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
ibec_SaveToFile поддерживает Append, ibec_CompareTables тоже. Ну одну функцию допилить


Иногда проще допилить...:)
Допилил.
...
Рейтинг: 0 / 0
Автоматизировать сравнение баз
    #39954330
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Иногда проще допилить...:)
Допилил.


Спасибо
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Автоматизировать сравнение баз
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]