MurCode
- Форумы
 - Поиск
 - О проекте
 
                            
GAV27
Дата: 28.01.2011 06:54:11
                        Добрый день! Имеется программа, у которой 2 режима работы: локальный (в виде папки с данными, если правильно понял Paradox) и сетевой (в виде БД SQL Server). Раньше работали с локальной версией….Сейчас зачем то понадобилось использовать сетевую, и стоит задача переноса данных. БД небольшая, таблиц мало.
Опишу файлики бд paradox:
     DDocs.db        Ddocs.px
     Rubs_doc.db    Rubs_doc.xg0       Rubs_doc.yg0
     Sub_doc.db     Sub_doc.xg0        Sub_doc.yg0
     Dtext.db         Dtext.xg0            Dtext.yg0               Dtext.mb
     Jout.db           Jout.px
     People.db        People.px
В общем пытаюсь импортировать данные в SQL. С помощью DTS выбираю сначала Paradox 5 и указываю папку. Он определяет все 6 таблиц. Но импорт завершается успешно только для 3 таблиц — Ddocs, Jout, People. Для всех остальных сообщение:
      Error Source: Microsoft Jet Database Engine
      Error Description:  Непредвиденная ошибка драйвера внешней базы данных (12034)
      Context: Error calling OpenRowset on the provider
Если это имеет значение, то в папке есть 2 файлика: paradox.lck, pdoxusrs.lck
И в общем не переносит. Подскажите, может быть я что-то неправильно делаю, как исправить ошибку и перенести данные со всех таблиц.
Спасибо за внимание!
                    
                            
kDnZP
Дата: 28.01.2011 08:56:51
GAV27, а попробуйте оставить при импорте только файлы *.db (все остальное *.px, *.xg0, *.yg0 убрать). Т.к. по сути это индексы и ссылочная целостность, и они у Парадокса имели свойство периодически рушиться… Ну и попробуйте импорт через ODBC-источники, как вариант, создав linked server.
                            
Glory
Дата: 28.01.2011 11:36:36
| GAV27 | 
|---|
| Он определяет все 6 таблиц. Но импорт завершается успешно только для 3 таблиц — Ddocs, Jout, People. Для всех остальных сообщение: Error Source: Microsoft Jet Database Engine Error Description: Непредвиденная ошибка драйвера внешней базы данных (12034) Context: Error calling OpenRowset on the provider  | 
А типы полей в этих остальных таблицах совместимы с типами MSSQL ?
                            
GAV27
Дата: 28.01.2011 14:51:29
Да, совместимы. После удаления файликов xg0, yg0 импорт завершился успешно. Спасибо большое за помощь)
| 
 | 
 
  | 
  | 
    CRecordset и Wizzard VC++ 6
    
  
- Подписаться на тему
 - Сообщить другу
 - Скачать/распечатать тему
 
| 
 
  | 
|
| 
 Junior Рейтинг (т): 0  | 
 Порождаю класс от CRecordset. Wizzard почему-то не генерит поля таблицы БД. Хотя с двумя другими таблицами все проходит как надо, а все таблицы технически одинаковые, Paradox. В общем, не могу заюзать таблицу. Никто не сталкивался с подобным и что тут можно сделать?  | 
| 
         Rara Avis  | 
 
  | 
| 
 Junior Рейтинг (т): 5  | 
 Я сталкивался с проблемой, что этот Визард неправильно генерирует класс для таблицы ФоксПро. Как выяснилось, ОДБЦ для данной таблицы неправильно возвращает кол-во полей: 63 вместо 6, в итоге конечный класс даже не компилировался. Обошел я это тем, что сам выступил в роли Визарда, т.е. написал нужный класс вручную. У меня тоже все таблицы были одинаковы по структуре, а неправильная генерация зависила от имени файла таблицы…  | 
| 
         cyberSpice  | 
 
  | 
| 
 Junior Рейтинг (т): 0  | 
 Цитата Rara Avis @ Я сталкивался с проблемой, что этот Визард неправильно генерирует класс для таблицы ФоксПро. Как выяснилось, ОДБЦ для данной таблицы неправильно возвращает кол-во полей: 63 вместо 6, в итоге конечный класс даже не компилировался. Обошел я это тем, что сам выступил в роли Визарда, т.е. написал нужный класс вручную. У меня тоже все таблицы были одинаковы по структуре, а неправильная генерация зависила от имени файла таблицы… А класс полностью вручную писать или сегенерить все-таки Визардом и дополнить то, что он сам не сгенерил?  | 
| 
         Rara Avis  | 
 
  | 
| 
 Junior Рейтинг (т): 5  | 
 Да без разницы, только если он не правильно сгенерит, нужно все его косяки подправить нез забыть. У меня, например, были описаны куча несуществующих полей (63 вместо 6) и кол-во полей указано неправильно (там есть переменная-член m_nFields, ее значение выставляется в конструкторе)… А лучше, попробуй переименовать таблицу и повторить операцию генерации класса. У меня эта проблема проявлялась именно из-за имени файла таблицы, насколько я помню, у меня в имени файла было несколько символов подчеркивания (‘_’), идущих подряд. Хотя, у тебя может не та же проблема.  | 
| 
         cyberSpice  | 
 
  | 
| 
 Junior Рейтинг (т): 0  | 
 Не выходит вручную прописать поля. Выдает окно с «Непредвиденная ошибка драйвера внешней базы данных (12034)». Что бы это могло значить. Вроде бы все прописал как это делает визард.  | 
| 
         MAxZ  | 
 
  | 
| 
  мне вообще не нравится этот подход, хотя у него есть свои плюсы  | 
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
 - C/C++: Базы данных
 - Следующая тема
 
          
        
[ Script execution time: 0,0626 ] [ 16 queries used ] [ Generated: 22.09.23, 05:04 GMT ]
Сообщение от Rastafaryanin
![]()
Жаль, но я так и не понял как перевести базу в новый формат
![]()
А пробовать повсякому нет ни времени ни желания. Разве трудно написать пошаговую инструкцию, чтоб было понятно с первого взгляда?я открыл ацесс и вкладка внешние данные у меня неактивна.
откуда мне знать какие данные нужныё? мне просто надо чтоб программа работала.
С уважением.Попробую .
1.Устанавливаем программу.,соответственно удалив старую и сохранив от нее шаблоны и базу.
2.Ставим новую версию.
3.Заходим в папку Data и открываем в ACCESS файл basemp.mdb.
4.Далее выбираем Внешние данные—>тип файла Paradox.
5.Выбираем например service.DB из нашей старой базы и импортируем.
6.Если он импортировался как service1 удалите чистую service и переименуйте таблицу в service.
7.Если при импорте выскакивает ошибка..(не помню номер) ,попробуйте удалить из старой базы файлы с расширением *.YG0,и импортировать снова.
8.После импорта,выбраем таблицу photo и жмем КОНСТРУКТОР и добавляем поле Photo типа (поле обьекта OLE).
Пункт 8 необязателен ,если вы не сохраняете фотографии.
9.Закрываем наш basemp.mdb., и запускаем Smp_updater 1.06 он в директории программы.
10.Выбираем файл basemp.mdb и жмем обновить!
Все!P.s Если у вас сбивается кодировка,выберите еще раз региональные настройки в панели управления Windows.
Недавно мне пришлось писать программу на C# для конвертации данных из базы Paradox в другую, более современную. Как я выяснил, есть разные способы подключения к базе данных из C#, например, через Microsoft Jet OLE DB, или через Microsoft Paradox Driver, я выбрал второй способ. Строку подключения можно посмотреть на connectionstrings.com После удачного подключения через Microsoft Paradox Driver я пытался получить данные, но столкнулся с ошибкой «Непредвиденная ошибка драйвера внешней базы данных (11265)«.
При поиске решения проблемы я выяснил несколько важных вещей касательно Paradox в Windows 7 64 bit:
- Для 64 разрядной системы нет драйверов для базы Paradox. В этом можно убедиться, зайдя в Панель управления — Администрирование — Источники данных (ODBC) и не увидев там драйверов для Paradox-а. Однако, если зайти в Источники данных (ODBC) через c:\Windows\SysWOW64\odbcad32.exe — то мы сразу увидим там кучу дополнительных драйверов, включая Microsoft Paradox Driver.
Таким образом, я пришел к 1-му выводу: приложение должно работать в режиме 32 битного приложения чтобы оно увидело драйвера для Paradox-а. Для этого приложение нужно компилировать с флагом 32BIT, либо установить этот флаг на exe файл, например, с помощью .Net Tools. - Нужно быть внимательным при написании строки подключения Microsoft Paradox Driver. В ней обязательно должен обязательно присутствовать пробел после *.db. Без этого пробела программа не сможет найти драйвер.
 - После подключения к базе через Microsoft Paradox Driver я попытался выполнить запрос к базе и получил ошибку «Непредвиденная ошибка драйвера внешней базы данных (11265)«. После долгих поисков в интернете я выяснил, что это происходит из-за того, что приложение не может создать в корне диска C: файл PDOXUSRS.NET. Напрашивался вывод, что приложение нужно запускать с администраторскими правами, чтобы она смогла писать в корень системного диска. Однако, как выяснилось, это не обязательно. Можно просто в BDE Administrator указать в Configuration\Drivers\Native\Paradox NET DIR другую папку для сохранения файла.
 - Так же, необходимо, чтобы у пользователя были права на файл c:\Windows\System32\odbc32.dll (спасибо за помощь Владимиру в комментарии ниже)
 - В строке подключения никаким образом не указать кодировку базы, т.к. у драйвера нет таких опций. Если база в windows-кодировке, драйвер будет ее упорно выдавать как западноевропейскую 1252. Единственное корректное решение, к которому я пришел — это преобразовывать кодировку, например, так:
out_str = Encoding.GetEncoding(1251).GetString(Encoding.GetEncoding(1252).GetBytes(in_str))
где in_str — это строка, полученная из базы. 
В интернете встречается большое число различных советов. Большинство из них мне не помогли. Те, что я написал, возможно, для кого-то тоже не подойдут. Но возможно, кому-то я все-таки смог помочь.
← →
TriNeT
	             
	            (2002-03-25 06:36)
		        [0]
			     Доброго времени суток.
Опять прошу помощи у всезнающего ALL. Проблема с сабжем состоит в следующем:
Имеется две базы данных (Paradox) на одном из файловых серверов. Эти базы ведутся своими приложениями. И имеется моя программа, которой необходимо периодически обращаться к этим базам, чтобы считать некоторую информацию. Обращение происходит в режиме read-only.
В силу определенных обстоятельств мне приходится использовать ADO а не BDE (хотя я на эти обстоятельства вовсе даже не жалуюсь). Так вот, чтобы достучаться до Paradox-таблиц через ADO мне приходится использовать ODBC (по-моему других провайдеров в стандартном комплекте нет, а другими лучше не пользоваться). Создаю системный DSN, связываю его с драйвером Microsoft Paradox Driver, указываю сетевой каталог (насколько я понимаю, это путь к файлу pdoxusrs.net). Остальные параметры, как то — путь к таблицам, определяю в своей программе и динамически формирую ConnectionString в TADOConnection.
При тестировании на локальной машине, все проходит нормально, устанавливается соединение с базой, данные читаются и все такое. Ну это и понятно, поскольку я и есть единственный юзер для этой базы. Но как только переносишь испытания на реальную сеть, при попытке соединения с базой вываливается exception с номером ошибки 11270 и описанием, информативным, как инструкция по использованию туалетной бумаги: «Непредвиденная ошибка драйвера». Описания этой ошибки найти не смог. Единственное, что я выяснил — точно такая же ошибка выскакивает при использовании любой программы просмотра таблиц БД (в частности, «родной» офисный msqry), причем в DSN я указываю ВСЕ необходимые параметры.
Из-за этого у меня ощущение, что то-ли я неправильно указываю параметры в DSN, то ли проблема как-то связана с файлом Pdoxusrs.net
Люди, кто сталкивался с подобным — поделитесь опытом. А кто не сталкивался, может быть подкинете идеюку-другую? Может быть я просто зациклился и не вижу того, что лежит на поверхности. Буду благодарен всем, кто откликнется!
← →
sniknik
	             
	            (2002-03-25 09:08)
		        [1]
			     Попробуй все же прямую связку без ODBC.
строка подключения к Paradox вполне стандартна :).
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;Extended Properties=Paradox 4.0;Persist Security Info=False
Выдержка из Хелпа. Номера 11270 не нашол, было бы конкретней но можно еще в MSDN поискать.
Непредвиденная ошибка драйвера внешней базы данных <номер ошибки>. (Ошибка 3275)
Драйвер внешней (указанной) базы данных возвращает ошибку. Такие ошибки являются результатом попытки выполнения операции, не поддерживаемой базами данных этого типа.
т.е. по сути у тебя какаято операция поддерживается локальным драйвером и не поддерживается сетевым.
← →
TriNeT
	             
	            (2002-03-25 10:48)
		        [2]
2 sniknik ©
Спасибо за то, что откликнулись.
Попробовал. Введя дословно ту ConnectionString, которая была указана в примере (предварительно естественно заменив пути), при проверке подключения получил, как тот фашист — гранату, следующее сообщение:
[Ошибка Microsoft Data Link]
«Сбой проверки подключения из-за ошибки при инициализации поставщика. Невозможно найти устанавливаемый ISAM»
Проверял даже не на сети, а на локальном варианте.
Вообще-то я очень удивился, увидев, что вы предлагаете использовать Майкрософтский Jet, который вроде-бы предназначен для доступа к ACCESS»у, в качестве провайдера для Paradox. Но поскольку обратного никто не утверждал, то наверное дело в другом.
← →
sniknik
	             
	            (2002-03-25 11:24)
		        [3]
			     Не все правильно. просто Jet кроме Access еще кое чего поддерживает смотри в реестре путь.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\ISAM Formats
а со строкой извини по памяти писал вот рабочая из программы выдернул
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;Mode=ReadWrite;Extended Properties=Paradox 4.x;Persist Security Info=False
на самом деле и та будет работать если поставить 4.x вместо 4.0
← →
TriNeT
	             
	            (2002-03-26 08:59)
		        [4]
2 sniknik ©
Доброго времени суток!
Проверить удалось пока только в локальном варианте.
ПОЛУЧИЛОСЬ!!!! Правда если выставлять дополнительно флаг «Share deny none», то вываливается exception с сообщением о невозможности завершить операцию и еще чего-то там. В общем-то я пока не могу оценить, нужен ли мне этот флаг, просто в самом начале столкнулся с такой ситуацией.
Пока не могу испытать на реальной сети, но думаю сегодня выкрою время и проверю.
Сорри за сомнения, я честно о таких возможностях Jet»а не знал. А если не секрет, откуда такие знания?  
Огромное спасибо за помощь. О результатах сетевых испытаний напишу позже.
← →
TriNeT
	             
	            (2002-03-27 05:12)
		        [5]
2 sniknik ©
Хочется витеевато выругаться, но не буду. Оказывается трабл вовсе не в сабже, а в сервере, о технических характеристиках я как-то не догадывался. В общем-то по мощности сервером его нельзя назвать даже с натяжкой. Короче говоря мои обращения к базам на нем почему-то оказываются последней соломинкой на спине верблюда. Перенеся базы и перенастроив линки на другой сервер, все сразу заработало, причем как ODBC, так и тот способ, который вы мне показали.
В общем сабж снимается, но теперь использую Ваш подход.
Еще раз спасибо.

			

				
 