Миграция lданных из локальной базы в MS SQL
7467
29
Есть программа по БД, написанная в локальной базе Paradox. Хочу переписать программу на основе серверных технологий. Для начала хотелось бы перенести базу вместе с данными из Paradox в MS SQL.. Должны быть какие то утилиты. Кто знаком- подскажите направление поиска, пожалуйста.
fagit
Сам не пробовал, но может, есть смысл посмотреть Microsoft SQL Server Management Studio? По крайней мере, там в командах для базы данных есть импорт данных, и при выборе источника данных можно указать .NET framework provider for Odbc, а уж базу Парадокса подключить к Odbc можно.
wowik_2
Спасибо. Посмотрю. Если получится сообщу через форум.
fagit
Да, и еще. Есть родная борландовская утилитка DataPump. По крайней мере, у меня в меню Delphi 7 она имеется. В справке написано, что она переносит как структуру, так и содержимое из исходной базы в конечную. Причем SQL Server как возможный вариант там упоминается. Более того, в справке имеется одно замечание, касающееся именно перекачки в Microsoft SQL Server.
fagit
Из скуля подключиться к парадоксовским таблицам:
OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source="+ПутьКБазе+";Jet OLEDB:Database Password=""jIGGAe"";Extended Properties=""Paradox 5.x""')...ИмяТаблицы
и перелить данные в скулевые таблицы.
wowik_2
Ну чем залить данные то не такая проблема. Проблема сделать это корректно. Поясню, если в таблицах есть identity-поля, то нужно "перелить" так, чтобы коды сохранились, иначе будет не база, а бесполезный набор данных - а это не каждая "переливалка" сумеет. Опять же внешние связи, если их настраивать на этапе создания струкруры, в ряде случаев вынудят заливать данные из таблиц в строго определенной последовательности.

Не, я не против, можно поиграть с "identity insert", можно слить данные в просто integer, а только потом поставить identity и primary-key, настроить forign-key. Можно, не спорю. Но в каждом конкретном случае это придется делать вручную.

Не проще ли, зная структуру, написать свою конвертилку?
Picaro
Пожалуй, Вы правы (я, как уже упоминал раньше, не специалист в этом вопросе). Но в сообщении ТС ничего не сказано о сложности преобразуемой базы данных. Может, упомянутые выше средства будут для него вполне адекватны.
wowik_2
Пожалуй, Вы правы (я, как уже упоминал раньше, не специалист в этом вопросе). Но в сообщении ТС ничего не сказано о сложности преобразуемой базы данных. Может, упомянутые выше средства будут для него вполне адекватны.
Всем спасибо за советы. Я должен все это переработать. Из ваших сообщений я понял в какомнаправлении мне двигаться
fagit
Есть еще такая шарованая штука как Paradox to MS SQL Server Conversion Software - 7.0
Но я не пробовал, не знаю.
fagit
Уважаемый топикстартер! Пожалуйста, отпишитесь, как у Вас получилось. Мне самому стало интересно.
wowik_2
[
Уважаемый топикстартер! Пожалуйста, отпишитесь, как у Вас получилось. Мне самому стало интересно.
Пока никак. Расскажу о тех проблемах которые я не могу преодолеть. Может быть и опозорюсь, но... Первое. Я не могу понять как мне подключить одновременно базы Paradox и MS Sql. Вроде действую через настройка- источник данных (ODBC) но не понимаю как выбрать нужный драйвер и как разобраться с Логином и паролем. Поэтому не могу воспользоваться рекомендацией Садовникова с методом OPENDATASOURCE. Не понимаю, с каким классом в C# этот метод сидит. По этим причинам стою на месте. Если что подскажите- буду благодарен
fagit
Это в скулевом запросе писать надо. Тоесть, подключиться к скулю и уже из него в запросе - к парадоксу.
Sadovnikov
Это в скулевом запросе писать надо. Тоесть, подключиться к скулю и уже из него в запросе - к парадоксу.
Подключаться через объект SqlConnection к MS SQL я могу. Могу через объект SqlCommand выполнить запос SQL. Подскажите две вещи- первое- как правильно подключить базы Paradox и второе у какого объекта есть процедура OpenDataSource
fagit
Могу через объект SqlCommand выполнить запос SQL.
Вот как раз тут (в запросе) и надо писать OpenDataSource и т.д.
fagit
Выполните вот такой запрос:

SELECT *
FROM
OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source=ПутьКПапкеСбазойПарадокс;Extended Properties="Paradox 5.x"')...ИмяТаблицыПарадоксБезРасширения
Sadovnikov
Я предполагаю, что вы имели ввиду вложенный запрос с командай INSERT, когда вставляемые данные результат предложенного вами SELECT. Я еще поэкспериментирую с подключением Paradox через ODBC/
fagit
Я имел ввиду именно SELECT:улыб:
Дабы на простом примере показать, как работать с базами пардокса из скуля:улыб:
Попробуйте и не мучайтесь со вторым подключением...
Sadovnikov
Снова задаюсь вопросом: откуда, какой средой делается соединение?
MSVS? Delphi? VBA? В каждом случае будут свои рекомендации.
Если просто 'не получается', экспериментируйте дальше
Picaro
А какая разница, если данные будут переливаться скулевыми запросами?
Sadovnikov
Вот и я, наконец, решился свою прогу увести с парабоксовских таблиц на что-то более приличное. Заставлять пользователей громоздить себе сикул, пусть даже msde, бесполезно, не сумеют, поэтому остановился на mdb-шнике. Access сам по себе не серьезный инструмент, но как хранилище вполне канает, тем более, что уж 2000-й формат та же ХР понимает по умолчанию.

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

Конвертилку сделал. Принцип работы с данными практически тот же, что и MSSQL. Занятие, скажу, после insert получать идентификатор, и подменять на него идентификатор в связанной таблице, не такое уж очевидное. Особенно, учитывая, что у меня одна таблица ссылалась сама на себя для построения древовидной структуры, приходилось, изменяя одну таблицу шариться, выискивая нужную запись аж в 2 запросах:улыб:
Sadovnikov
Решил я свою проблему миграции данных с помощью старых добрых утилит Delphi 7. Сделал так. Вначале в BDE всем полям LangDriver там где присутствует слово Paradox, MSSQL, Accsses, Odbc присвоил pdox Ansi Cirillic (обеспечить поддержку русского текста). Затем создал объект ODBC для пустой базы Accsses и MS SQL. В ODBC логин и пароль sysdba и masterkey. Зарегестрировал алиасами в BDE. А дальше Datapump. Причем я сначала перенес из paradox в accsses, а затем из accsses в MS SQL. Трудоемкость минимальна, накаких SQL запросов.
fagit
Фигасе:улыб:
Мне проще скулевыми запросами перетащить.
В любом случае - поздравляю!
fagit
Cirillic
Может Cyrillic?
Я фуею
Почему у меня так сложно никогда не получается придумать?
Ananas
Почему у меня так сложно никогда не получается придумать?
вы считаете сложно Дайте мне папку с 20 таблицами Paradox и я за 15 минут их перекачаю в MS SQL. Интересно, как вы проще предлагаете? Я вообще это сделал без написания кода..
fagit
Вот только вопрос. Если программа для себя, сделать перекачку надо один единственный раз, то тут все средства хороши.
А если клиентов 1.5 по всей России и ближнему окружению, как им перекачивать?
Picaro
Вот только вопрос. Если программа для себя, сделать перекачку надо один единственный раз, то тут все средства хороши.
А если клиентов 1.5 по всей России и ближнему окружению, как им перекачивать?
Программа для себя. Перекачку нало слелать разовую
Sadovnikov
Что-то я нифига не понимаю уже:хммм:
Решил вот конвертилку отучить об BDE.
Только ADOConnection и ADOQuery. С пустыми (!) параметрами.
В ADOConnection прописываю ConnectionString 'Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Paradox 5.x;Data Source='+DBLocation;'
Соединяется! Хотя и добавляет в ConnectionString еще кучу всякой гадости.

Далее интереснее ADOQuery.SQL.ADD('select * from zakaz')...
Если BDE установлен, все работает!
Если нет... В реестре, создается ветка HKLM\SOFTWARE\Borland\Database Engine\Settings\DRIVERS\PARADOX\INIT с прописанной кодовой страницей. Зачем????
Но нифига не работает! "Внешняя таблица не имеет предполагаемый формат"

Более интересен иной факт. Если BDE установлен, то Excel прекрасно открывает DB-шки. Если нет - фиг вам...
Нахрена Jet-у сдался BDE??????????????????????????

зы CodeGear RAD Studio 2007...
Picaro
От, Микрософты, падлюки... :зло:
Статья говорит, что начиная с Jet 3.51 BDE не требуется, но тут же другая статья восстанавливает справедливость: "If you install the latest Jet 4.0 service pack and continue not to be able to use Paradox data..., install the BDE"
Picaro
Ну да... Никуда от BDE не деться...