|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Здравствуйте. В ходе работы на проектом возникла следующая задача. В процессе выполнения хранимой процедуры в БД Firebird 2.5 x64 необходимо следующее. 1. Выполнить хранимую процедуру в БД MSSQL Server 2008 и возвращаемый ей набор данных положить во временную таблицу Firebird либо в MemoryDataset (этот вариант предпочтительнее с точки зрения быстродействия). Эти данные должны быть доступны только внутри этого вызова хранимой процедуры Firebird и после завершения занимаемая им память должна быть освобождена. 2. В случае MemoryDataset произвести один или несколько проходов по этому датасету для формирования итогового набора данных и его возврата (suspend) в клиентское приложение. Вариант с подключением к MSSQL через компоненты FireDAC или ADO отпадает так как стоит сверх-задача сделать получение данных из MSSQL прозрачным с точки зрения клиентского приложения, которое "заточено" на работу с Firebird. Прошу поделиться мнениями, идеями и ссылками. Ответ "не возможно" не принимается. Позади Сибирь. http://www.sql.ru/forum/images/biggrin.gif ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 09:49 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Очередное "как бы постирать бельишко, но только без мыла и порошка" Пиши костыль, который перед обращением к Firebird будет выполнять предварительную функцию заливки туда данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:00 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
udr? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:03 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Товарищ старший сержант, Разрешите доложить. я знаю только UDF. Что есть UDR и где по него грамотно написано? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:05 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroyka, Не обращай внимания, он не читатель. Вторую строку до конца не осилил. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:10 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Навскидку 1. 3 UDF: - DBConnectAndExecQuery(Addr): QueryPtr - QueryGetRowAndNext(QueryPtr): Field1, ..., FieldN - CloseQueryAndDB(QueryPtr) Из QueryGetRowAndNext запихиваем во временную таблицу, там крутим, выдаем клиенту, очищаем. Минусы - фиксированный набор полей в UDF, что означает пересборку при изменении. Либо придется мутить с упаковкой-распаковкой, что на SQL не очень приятная задача. 2. Приложение-посредник и 1 UDF. UDF при вызове дергает приложение (через пайпы, сокеты и т.п.), приложение перекачивает данные, ХП их обрабатывает. Но: - ХП должна как-то подождать, пока приложение перекачает данные (можно обеспечить внутри UDF) - ХП должна увидеть данные внутри уже начатой транзакции (достигается параметрами транзакции) - Клиент должен быть строго один; либо записывать данные в таблицу вместе с ИД клиента. 3. Элементарно репликация в FB. Минусы - возможно будет много лишних операций. Зато наиболее надежно. 4. (возможно, если UDR подерживает передачу текущего соединения) Переход на ФБ 3 и закачка данных из UDR непосредственно во временную таблицу (вариант №1, но более краткий и устойчивый). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:13 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
WildSeryВторую строку до конца не осилил. Во второй строке не описана ситуация с временной таблицей. Вообще не понятно, что ТС имеет в виду под memorydataset. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:15 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
wadmanВо второй строке не описана ситуация с временной таблицей. Прошу прощения, я спутал вторую строку со вторым пунктом. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:16 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
WildSery, все необходимые данные и так уже находятся в БД MSSQL и меняются там в реальном времени. собственно по этому и весь этот сыр бор. в таком ключе не понимаю что вы подразумеваете под костылем? утилите по заливке изменений из MSSQL в Firebird? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:16 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
В принципе, вариант №1 можно ужать до одной универсальной UDF. Если указатель на запрос в параметре пуст, она коннектится к базе и создает объект. Когда же данные полностью прочитаны, можно сразу удалять объект и разрывать соединение. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:21 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Василий №2Навскидку 1. 3 UDF: - DBConnectAndExecQuery(Addr): QueryPtr - QueryGetRowAndNext(QueryPtr): Field1, ..., FieldN - CloseQueryAndDB(QueryPtr) Из QueryGetRowAndNext запихиваем во временную таблицу, там крутим, выдаем клиенту, очищаем. Минусы - фиксированный набор полей в UDF, что означает пересборку при изменении. Либо придется мутить с упаковкой-распаковкой, что на SQL не очень приятная задача. 2. Приложение-посредник и 1 UDF. UDF при вызове дергает приложение (через пайпы, сокеты и т.п.), приложение перекачивает данные, ХП их обрабатывает. Но: - ХП должна как-то подождать, пока приложение перекачает данные (можно обеспечить внутри UDF) - ХП должна увидеть данные внутри уже начатой транзакции (достигается параметрами транзакции) - Клиент должен быть строго один; либо записывать данные в таблицу вместе с ИД клиента. 3. Элементарно репликация в FB. Минусы - возможно будет много лишних операций. Зато наиболее надежно. 4. (возможно, если UDR подерживает передачу текущего соединения) Переход на ФБ 3 и закачка данных из UDR непосредственно во временную таблицу (вариант №1, но более краткий и устойчивый). Спасибо Вот первый вариант мне более всего нравится исходя из того что данные в БД MSSQL меняются в реальном времени. Есть несколько вопросов. 1. Что есть параметры Addr и QueryPtr? 2. При написании UDF в Delphi 2010 имеем 32-битную DLL. Заведется ли на Firebird 2.5 x64? 3. А если так QueryGetIntValue(QueryPtr, 'FieldName'), QueryGetStringValue(QueryPtr, 'FieldName') и т. д? Естественно с предварительно проверкой на тип данных в поле. Ведь типов данных ограниченное количество в отличие от количества полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:29 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroykaВот первый вариант мне более всего нравится исходя из того что данные в БД MSSQL меняются в реальном времени. Mssql умеет работать с другими субд, вот в нем и можно это всё провернуть. Или результат этой катавасии не должен оставлять каких-либо следов от слова "совсем"? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:34 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroykaЕсть несколько вопросов. 1. Что есть параметры Addr и QueryPtr? 2. При написании UDF в Delphi 2010 имеем 32-битную DLL. Заведется ли на Firebird 2.5 x64? 3. А если так QueryGetIntValue(QueryPtr, 'FieldName'), QueryGetStringValue(QueryPtr, 'FieldName') и т. д? Естественно с предварительно проверкой на тип данных в поле. Ведь типов данных ограниченное количество в отличие от количества полей. 1. Addr - строка подключения к MSSQL, можно также встроить в DLL либо читать DLL-ю из конфига, не принципиально. QueryPtr - указатель на созданный внутри DLL объект запроса. Можно и глобальной переменной внутри DLL сделать, но это менее устойчиво (разве что объявить как threadvar). 2. Конечно нет, разрядность должна совпадать. Либо брать Дельфи поновее, либо Lazarus, либо другие языки. 3. Как вариант, хотя тогда количество UDF будет больше, плюс весь процесс замедлится (правда, не так уж сильно). Зато более универсально, да. Если MSSQL умеет взаимодействовать с FB, то еще вариант - UDF дергает MSSQL, тот заливает данные в FB с ИД текущего FB-подключения, ХП в FB дальше с ними работает. Транзакция клиента в FB при этом д.б. read_committed. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 10:53 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Василий №2po-stroykaЕсть несколько вопросов. 1. Что есть параметры Addr и QueryPtr? 2. При написании UDF в Delphi 2010 имеем 32-битную DLL. Заведется ли на Firebird 2.5 x64? 3. А если так QueryGetIntValue(QueryPtr, 'FieldName'), QueryGetStringValue(QueryPtr, 'FieldName') и т. д? Естественно с предварительно проверкой на тип данных в поле. Ведь типов данных ограниченное количество в отличие от количества полей. 1. Addr - строка подключения к MSSQL, можно также встроить в DLL либо читать DLL-ю из конфига, не принципиально. QueryPtr - указатель на созданный внутри DLL объект запроса. Можно и глобальной переменной внутри DLL сделать, но это менее устойчиво (разве что объявить как threadvar). 2. Конечно нет, разрядность должна совпадать. Либо брать Дельфи поновее, либо Lazarus, либо другие языки. 3. Как вариант, хотя тогда количество UDF будет больше, плюс весь процесс замедлится (правда, не так уж сильно). Зато более универсально, да. Если MSSQL умеет взаимодействовать с FB, то еще вариант - UDF дергает MSSQL, тот заливает данные в FB с ИД текущего FB-подключения, ХП в FB дальше с ними работает. Транзакция клиента в FB при этом д.б. read_committed. Огромное спасибо. Сам думал про что то подобное. Благодаря Вам многое встало на нужные полочки. Готовой DLL-кой поделюсь. >>> 2. Конечно нет, разрядность должна совпадать. Либо брать Дельфи поновее, либо Lazarus, либо другие языки. Дельфи поновее надо будет опять покупать. Возможно придется откатиться на Firebird x32. Или откатка не поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 11:19 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroyka, а там без процедуры никак? Если бы переписать ее во VIEW, то там бы Linked Sever -а бы хватило. С минимальным уровнем шаманств. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 11:25 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Filippov Dmitrypo-stroyka, а там без процедуры никак? Если бы переписать ее во VIEW, то там бы Linked Sever -а бы хватило. С минимальным уровнем шаманств. Насколько я понимаю Linked Sever - это для подключения из MSSQL к Firebird-у. А мне нужно наоборот и чтобы сама хранимая процедура Firebird инициировала подключение и получала данные из MSSQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 11:30 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroyka, по уму надо переходить на FB 3 и писать UDR процедуру. А передача указателей через UDF это полный изврат ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 11:40 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Симонов Денисpo-stroyka, по уму надо переходить на FB 3 и писать UDR процедуру. А передача указателей через UDF это полный изврат 1. Backup на v2.5 и restore v3 БД нужно? 2. Для UDR имеет значение разрядность x86/x64? 3. Можно ссылочку чтобы было грамотно написано про написание UDR? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 11:45 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
по теме: постановка задачи - говно. советы как её решить через жопу, тоже. ТС, пересмотри задачу, чтобы для её решения не приходилось изменять всемирный закон тяготения. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 12:06 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroyka, 1. Backup на v2.5 и restore v3 БД нужно? - да (возможно придётся подкручивать) 2. Для UDR имеет значение разрядность x86/x64? - да, если только udr не написана на Java 3. Можно ссылочку чтобы было грамотно написано про написание UDR? нет пока никаких ссылок. Есть пример простейшей UDR на Delphi https://github.com/asfernandes/fbstuff/tree/master/src ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 12:15 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Мимопроходящийпо теме: постановка задачи - говно. советы как её решить через жопу, тоже. ТС, пересмотри задачу, чтобы для её решения не приходилось изменять всемирный закон тяготения. Благодарю Вас за мнение. Будете еще раз проходить мимо, проходите. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 12:44 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Симонов Денисpo-stroyka, 1. Backup на v2.5 и restore v3 БД нужно? - да (возможно придётся подкручивать) 2. Для UDR имеет значение разрядность x86/x64? - да, если только udr не написана на Java 3. Можно ссылочку чтобы было грамотно написано про написание UDR? нет пока никаких ссылок. Есть пример простейшей UDR на Delphi https://github.com/asfernandes/fbstuff/tree/master/src Благодарю Вас за ценные советы. Будете проходить мимо, заходите на огонек :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 12:45 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Мимопроходящийпостановка задачи - говно. советы как её решить через жопу, тоже.+1 Вариант "все данные в базе ФБ" не рассматривается? актуальность поддерживать репликатором. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 12:45 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroykaОгромное спасибо. Сам думал про что то подобное. Благодаря Вам многое встало на нужные полочки. Готовой DLL-кой поделюсь. >>> 2. Конечно нет, разрядность должна совпадать. Либо брать Дельфи поновее, либо Lazarus, либо другие языки. Дельфи поновее надо будет опять покупать. Возможно придется откатиться на Firebird x32. Или откатка не поможет? Пожалуйста). Поскольку кода будет всего ничего, то можно заюзать Lazarus даже без особого вникания. Сервер всё-таки лучше иметь 64-битный. Симонов ДенисА передача указателей через UDF это полный изврат Никакого изврата. Можно считать его "хэндлом объекта запроса". Для FB это будет черный ящик, нужный только в DLL для обеспечения многопоточного использования. Кстати, ТС, про IsMultithread в DLL не забудь. Ivan_PisarevskyВариант "все данные в базе ФБ" не рассматривается? актуальность поддерживать репликатором. Предложил это, но судя по описанию, исходная БД интенсивно изменяется. Репликация, имхо, повлечет введение дополнительного инструмента и большую ненужную в данном применении нагрузку. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:10 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Ivan_PisarevskyВариант "все данные в базе ФБ" не рассматривается? Ну, у них же там "данные в MS SQL меняются в реальном времени". Очевидно, что это делается приложением ТСа, который смог заставить его работать только с MS SQL. Почему нельзя переточить "приложение заточенное на Firebird" под MS SQL - непонятно, вероятно, оно купленное без исходников. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:17 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Ivan_PisarevskyМимопроходящийпостановка задачи - говно. советы как её решить через жопу, тоже.+1 Вариант "все данные в базе ФБ" не рассматривается? актуальность поддерживать репликатором. Возможен только теоретически. А так не рассматривается. Данные в БД MSSQL меняются в реальном времени и в большом количестве. А еще есть закон сохранения энергии: если есть Linked Sever (для обращения к Firebird-у из MSSQL), то должен быть и обратный путь :-) Плюс к эта разработка может быть полезная в других проектах. Да и еще одна звездочка на борту еще ни одному программисту не повредила. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:29 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Hello, Po-stroyka! You wrote on 12 января 2017 г. 13:31:38: Po-stroyka> и еще одна звездочка на борту еще ни одному программисту не повредила ты сильно недооцениваешь вредное влияние ментального онанизма на неокрепший организм Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:34 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroykaДа и еще одна звездочка на борту еще ни одному программисту не повредила. :-) Не всегда черенок из задницы равняется звездочке на борту. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:34 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroykaIvan_Pisarevskyпропущено... +1 Вариант "все данные в базе ФБ" не рассматривается? актуальность поддерживать репликатором. Возможен только теоретически. А так не рассматривается. Данные в БД MSSQL меняются в реальном времени и в большом количестве. А еще есть закон сохранения энергии: если есть Linked Sever (для обращения к Firebird-у из MSSQL), то должен быть и обратный путь :-) Плюс к эта разработка может быть полезная в других проектах. Да и еще одна звездочка на борту еще ни одному программисту не повредила. :-) А не хочешь, чтобы MS SQL Server сам наполнял нужные таблички в базе FireBird? С помощью, например http://www.ibprovider.com/rus/ ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:35 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
wadmanWildSeryВторую строку до конца не осилил. Во второй строке не описана ситуация с временной таблицей. Вообще не понятно, что ТС имеет в виду под memorydataset. memorydataset - аналог временной таблицы, хранящейся в оперативной памяти (для оперативности, ведь дисковая подсистема всяко тормознее). возможно не лучше решение, но лет 10 назад встречал что то подобное. только тогда исходников не было, а было только описание для разработчика с описанием где, что и как хранится. документатор хороший попался видимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:36 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroykamemorydataset - аналог временной таблицы, хранящейся в оперативной памяти (для оперативности, ведь дисковая подсистема всяко тормознее). возможно не лучше решение, но лет 10 назад встречал что то подобное. только тогда исходников не было, а было только описание для разработчика с описанием где, что и как хранится. документатор хороший попался видимо. То есть этот датасет не имеет никакого отношения ни к MS SQL, ни к Firebird? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:38 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovIvan_PisarevskyВариант "все данные в базе ФБ" не рассматривается? Ну, у них же там "данные в MS SQL меняются в реальном времени". Очевидно, что это делается приложением ТСа, который смог заставить его работать только с MS SQL. Почему нельзя переточить "приложение заточенное на Firebird" под MS SQL - непонятно, вероятно, оно купленное без исходников. На самом деле есть два приложения. 1. Работает с MSSQL, исходников нет и не будет, переточка к Firebird невозможна. 2. Работает c Firebird, исходники есть и использует стандартный набор FIB+Ehlib+FastReport, плюс в нем много чего уже наработано и БД в 200 таблиц и 300 ХП. Переточка к MSSQL невозможна, но достаточно трудоемка с моей точки зрения. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:43 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
МимопроходящийHello, Po-stroyka! You wrote on 12 января 2017 г. 13:31:38: Po-stroyka> и еще одна звездочка на борту еще ни одному программисту не повредила ты сильно недооцениваешь вредное влияние ментального онанизма на неокрепший организм не в первой. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:45 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
wadmanpo-stroykaДа и еще одна звездочка на борту еще ни одному программисту не повредила. :-) Не всегда черенок из задницы равняется звездочке на борту. палочка + звездочка = волшебная палочка. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:45 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
wadmanpo-stroykamemorydataset - аналог временной таблицы, хранящейся в оперативной памяти (для оперативности, ведь дисковая подсистема всяко тормознее). возможно не лучше решение, но лет 10 назад встречал что то подобное. только тогда исходников не было, а было только описание для разработчика с описанием где, что и как хранится. документатор хороший попался видимо. То есть этот датасет не имеет никакого отношения ни к MS SQL, ни к Firebird? именно. данные получаем из mssql, кладем в memorydataset и закрываем соединение с mssql. а дальше с помощью udf-ок (который видимо тоже придется разработать) работаем с memorydataset внутри хранимой процедуры. например так. dsfirst(handler); while (not dseof(handler)) do begin i = dsgetintvalue('fieldname'); --для целочисленных полей s = dsgetstringvalue('fieldname'); --для строковых полей dsnext(handler); end только тут еще больше UDF-ок накатать придется. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:50 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroykawadmanпропущено... То есть этот датасет не имеет никакого отношения ни к MS SQL, ни к Firebird? именно. данные получаем из mssql, кладем в memorydataset и закрываем соединение с mssql. а дальше с помощью udf-ок (который видимо тоже придется разработать) работаем с memorydataset внутри хранимой процедуры. например так. dsfirst(handler); while (not dseof(handler)) do begin i = dsgetintvalue('fieldname'); --для целочисленных полей s = dsgetstringvalue('fieldname'); --для строковых полей dsnext(handler); end только тут еще больше UDF-ок накатать придется. что скажете, товарищи? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:51 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Hello, Po-stroyka! You wrote on 12 января 2017 г. 13:57:16: Po-stroyka> что скажете, товарищи? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:58 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
МимопроходящийHello, Po-stroyka! You wrote on 12 января 2017 г. 13:57:16: Po-stroyka> что скажете, товарищи? не помогает! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 14:11 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroyka2. Работает c Firebird, исходники есть и использует стандартный набор FIB+Ehlib+FastReport, плюс в нем много чего уже наработано и БД в 200 таблиц и 300 ХП. Переточка к MSSQL невозможна, но достаточно трудоемка с моей точки зрения. То, что ты пытаешься сделать, ещё более трудоёмко. Поэтому забудь и начинай перетачивать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 14:31 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroykaНа самом деле есть два приложения. 1. Работает с MSSQL, исходников нет и не будет, переточка к Firebird невозможна. 2. Работает c Firebird, исходники есть и использует стандартный набор FIB+Ehlib+FastReport, плюс в нем много чего уже наработано и БД в 200 таблиц и 300 ХП. Переточка к MSSQL невозможна, но достаточно трудоемка с моей точки зрения. В свете сказанного разумнее бы впихнуть требуемое в само приложение. Если не хочется трогать кусок, читающий из ФБ, можно просто перед ним вызывать процедуру, которая бы перекачивала данные из МССКЛ в ФБ (встроенно или вызывая отдельную утилиту - не суть). Ну это как вариант. В общем-то, метод из UDF тоже будет работать, несмотря на потоки гнева со стороны здешних старожилов. Окромя вызывающей возмущение вышеупомянутых товарищей хитровыдрюченной методики, возражений в плане реализуемости и даже надежности я не нахожу. Судя по отсутствию указания конкретных минусов, данные товарищи также возразить по существу не могут. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 14:34 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroykaданные получаем из mssql, кладем в memorydataset GTT и закрываем соединение с mssql. а дальше с помощью udf-ок (который видимо тоже придется разработать) работаем с memorydataset GTT штатными механизмами ФБ внутри хранимой процедуры.поправ е л ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 14:51 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Ivan_Pisarevskyпоправел Ну, раз аффтар признался, что исходники софтины, работающей с Firebird, есть, то можно спокойно пропустить все этапы работы с GTT, а хранимую процедуру перенести в MS SQL, откуда её и вызывать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 14:57 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovхранимую процедуру перенести в MS SQL,Ну мало ли, может решительно никто у них не умеет писать хранимки на М$SQL, а ФБшные так или иначе осилили. Может "политика партии" запрещает менять метаданные M$ базы. Слить простым селектом из дельфовой софтины некий список таблиц в ФБ задача из разряда курсовика обычного ВУЗа. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 15:01 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroyka... На самом деле есть два приложения. 1. Работает с MSSQL, исходников нет и не будет, переточка к Firebird невозможна. 2. Работает c Firebird, исходники есть и использует стандартный набор FIB+Ehlib+FastReport, плюс в нем много чего уже наработано и БД в 200 таблиц и 300 ХП. Переточка к MSSQL невозможна, но достаточно трудоемка с моей точки зрения. А что мешает тогда вызывать хранимую процедуру MSSQL из Delphi, а результат ее работы пересылать через Linked Server в базу Firebird? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 15:22 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Решать с помощью UDF - ещё бОльшее извращение, чем реализовать тот же код заливки из MSSQL в GTT в самом приложении при получении данных. Подсказка. Репликатор может заливать данные в Firebird почти в реальном времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 15:28 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Filippov DmitryА что мешает тогда вызывать хранимую процедуру MSSQL из Delphi, а результат ее работы пересылать через Linked Server в базу Firebird? Лично мне мешала бы полная бессмысленность такого действа: если я могу вызвать процедуру в MS SQL, я могу и получить непосредственно от неё результат, не напрягая второй сервер. И так в MS SQL нет ограничения на число баз. Не дают создать процедуру прямо в нужной базе - создам под неё совсем новую базу и буду данные тянуть из первой. Там это делается просто. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 15:30 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
WildSery, на сколько я понял, 2 базы живут разными жизнями, а ТС нужен результат отработки именно конкретного расчета. Про репликацию всех данных он и не говорил. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 15:31 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Filippov Dmitry, А не надо всех, надо одну табличку, данные которой получаются из процедуры MSSQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 15:40 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Ivan_Pisarevskypo-stroykaданные получаем из mssql, кладем в memorydataset GTT и закрываем соединение с mssql. а дальше с помощью udf-ок (который видимо тоже придется разработать) работаем с memorydataset GTT штатными механизмами ФБ внутри хранимой процедуры.поправ е л Обратимся к терминам. 1. Что есть GTT? 2. Что есть CT (видел в ранних сообщениях)? Просветите пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 20:03 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovpo-stroyka2. Работает c Firebird, исходники есть и использует стандартный набор FIB+Ehlib+FastReport, плюс в нем много чего уже наработано и БД в 200 таблиц и 300 ХП. Переточка к MSSQL невозможна, но достаточно трудоемка с моей точки зрения. То, что ты пытаешься сделать, ещё более трудоёмко. Поэтому забудь и начинай перетачивать. Возможность менять структуру БД MSSQL отсутствует: злой админ и другие разработчики. Хранимую процедуру, которую нужно вызывать, также могут менять только эти же разработчики. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 20:10 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroyka, GTT - Global Temporary Table Что такое CT понятия не имею. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 20:23 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroykaЗдравствуйте. В ходе работы на проектом возникла следующая задача. В процессе выполнения хранимой процедуры в БД Firebird 2.5 x64 необходимо следующее. 1. Выполнить хранимую процедуру в БД MSSQL Server 2008 и возвращаемый ей набор данных положить во временную таблицу Firebird либо в MemoryDataset (этот вариант предпочтительнее с точки зрения быстродействия). Эти данные должны быть доступны только внутри этого вызова хранимой процедуры Firebird и после завершения занимаемая им память должна быть освобождена. 2. В случае MemoryDataset произвести один или несколько проходов по этому датасету для формирования итогового набора данных и его возврата (suspend) в клиентское приложение. Вариант с подключением к MSSQL через компоненты FireDAC или ADO отпадает так как стоит сверх-задача сделать получение данных из MSSQL прозрачным с точки зрения клиентского приложения, которое "заточено" на работу с Firebird. Прошу поделиться мнениями, идеями и ссылками. Ответ "не возможно" не принимается. Позади Сибирь. http://www.sql.ru/forum/images/biggrin.gif Небольшое дополнение к условию задачи. 3. На основании данных, полученных из БД MSSQL, будут проанализированы данные хранящиеся в БД Firebird. Результаты этого анализа будут записаны в таблицу FB потому, что чтение этих данных будет неоднократным. 4. Предпочитаю выносить всю логику работы с данными на сторону сервера (в данном случае FB так как приложение уже заточено под него). PS. Задача навеяна гетерогенными запросами в FB (это соответствует пункту 4 и делает работу с БД прозрачной для приложений). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 20:23 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Симонов Денисpo-stroyka, GTT - Global Temporary Table Что такое CT понятия не имею. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 20:24 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
po-stroykaВозможность менять структуру БД MSSQL отсутствует: злой админ и другие разработчики. Хранимую процедуру, которую нужно вызывать, также могут менять только эти же разработчики. Повторяю ещё раз, медленно: MS SQL позволяет создать любое количество БД. И обращаться из хранимых процедур одной БД к данным и хранимым процедурам любой другой БД. В том числе - в БД Firebird. po-stroyka3. На основании данных, полученных из БД MSSQL, будут проанализированы данные хранящиеся в БД Firebird. Результаты этого анализа будут записаны в таблицу FB потому, что чтение этих данных будет неоднократным. А теперь чуть-чуть смещаем акценты: на основании данных, полученных из БД MS SQL и данных, полученных из БД Firebird производится анализ, результат которого записывается в таблицу БД MS SQL потому, что чтение этого результата будет неоднократным. Теперь задача стала гораздо тривиальнее, не правда ли?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 21:54 |
|
Интеграция Firebird и MSSQL Server
|
|||
---|---|---|---|
#18+
Симонов Денисpo-stroyka, ......... 3. Можно ссылочку чтобы было грамотно написано про написание UDR? нет пока никаких ссылок. Есть пример простейшей UDR на Delphi https://github.com/asfernandes/fbstuff/tree/master/src Firebird.SphinxClient ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2017, 11:26 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1561761]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 174ms |
0 / 0 |