Недавно мне пришлось писать программу на 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:WindowsSysWOW64odbcad32.exe — то мы сразу увидим там кучу дополнительных драйверов, включая Microsoft Paradox Driver.
Таким образом, я пришел к 1-му выводу: приложение должно работать в режиме 32 битного приложения чтобы оно увидело драйвера для Paradox-а. Для этого приложение нужно компилировать с флагом 32BIT, либо установить этот флаг на exe файл, например, с помощью .Net Tools. - Нужно быть внимательным при написании строки подключения Microsoft Paradox Driver. В ней обязательно должен обязательно присутствовать пробел после *.db. Без этого пробела программа не сможет найти драйвер.
- После подключения к базе через Microsoft Paradox Driver я попытался выполнить запрос к базе и получил ошибку «Непредвиденная ошибка драйвера внешней базы данных (11265)«. После долгих поисков в интернете я выяснил, что это происходит из-за того, что приложение не может создать в корне диска C: файл PDOXUSRS.NET. Напрашивался вывод, что приложение нужно запускать с администраторскими правами, чтобы она смогла писать в корень системного диска. Однако, как выяснилось, это не обязательно. Можно просто в BDE Administrator указать в ConfigurationDriversNativeParadox NET DIR другую папку для сохранения файла.
- Так же, необходимо, чтобы у пользователя были права на файл c:WindowsSystem32odbc32.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_MACHINESOFTWAREMicrosoftJet4.0ISAM 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, так и тот способ, который вы мне показали.
В общем сабж снимается, но теперь использую Ваш подход.
Еще раз спасибо.
![]()
![]()
- Remove From My Forums
-
Question
-
User-1497429768 posted
Hi! The platform is windows server 2008. The folllowing is my code.
Dim ConnectionString As String = «Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 5.X;DefaultDir=» & Path & «;Dbq=» & Path & «;CollatingSequence=ASCII;»
Dim odbcConnection As New OdbcConnection()
odbcConnection.ConnectionString = ConnectionString
Dim str1 As String = «»
str1 = «select * from Customer »
Dim command As New OdbcCommand(str1, odbcConnection)
odbcConnection.Open()The last line odbcConnection.Open() show error message «Got unexpected error for externam database driver (11265)»
But when I change the platform to windows server 2003,and it work fine.so ,anyone have any idea?Thanks..
- Remove From My Forums
-
Question
-
User-1497429768 posted
Hi! The platform is windows server 2008. The folllowing is my code.
Dim ConnectionString As String = «Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 5.X;DefaultDir=» & Path & «;Dbq=» & Path & «;CollatingSequence=ASCII;»
Dim odbcConnection As New OdbcConnection()
odbcConnection.ConnectionString = ConnectionString
Dim str1 As String = «»
str1 = «select * from Customer »
Dim command As New OdbcCommand(str1, odbcConnection)
odbcConnection.Open()The last line odbcConnection.Open() show error message «Got unexpected error for externam database driver (11265)»
But when I change the platform to windows server 2003,and it work fine.so ,anyone have any idea?Thanks..
23.03.12 — 12:01
Знаю, что как читать не раз уже обсуждалось. и поиском искал, но так ничего и не нашел. Написал несколько вариантов кода — ошибка одна и та же «Произошла исключительная ситуация (Microsoft JET Database Engine): Внешняя таблица не имеет предполагаемый формат.»
пример 1
ИмяФайла = «Users.DB»;
СтрокаПодключения = «Data Source=C:Baza16;Extended Properties=Paradox 5.x»;
Провайдер= «Microsoft.Jet.OLEDB.4.0»;
МойЗапрос = «Select * From » + ИмяФайла;
Connection = Новый COMОбъект(«ADODB.Connection»);
Connection.Provider = Провайдер;
Connection.ConnectionString = СтрокаПодключения;
Попытка
Connection.Open();
Исключение
Сообщить(«Подключение — bad!»);
КонецПопытки;
Command = Новый COMОбъект(«ADODB.Command»);
Command.ActiveConnection = Connection;
Command.CommandText = МойЗапрос;
Command.CommandType = 1;
RS = Новый COMОбъект(«ADODB.Recordset»);
Попытка
RS.Open(Command);
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
пример 2
ИмяФайла = «Users.DB»;
СтрокаПодключения = «Data Source=C:Baza16;Extended Properties=Paradox 5.x»;
Провайдер= «Microsoft.Jet.OLEDB.4.0»;
МойЗапрос = «Select * From » + ИмяФайла;
Connection = Новый COMОбъект(«ADODB.Connection»);
Connection.Provider = Провайдер;
Connection.ConnectionString = СтрокаПодключения;
Попытка
Connection.Open();
Исключение
Сообщить(«Подключение — bad!»);
КонецПопытки;
Command = Новый COMОбъект(«ADODB.Command»);
Command.ActiveConnection = Connection;
Command.CommandText = МойЗапрос;
Command.CommandType = 1;
RS = Новый COMОбъект(«ADODB.Recordset»);
Попытка
RS = Command.Execute();
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Пример 3
ИмяФайла = «Users.DB»;
СтрокаПодключения = «Data Source=C:Baza16;Extended Properties=Paradox 5.x»;
Провайдер= «Microsoft.Jet.OLEDB.4.0»;
МойЗапрос = «Select * From » + ИмяФайла;
Connection = Новый COMОбъект(«ADODB.Connection»);
Connection.Provider = Провайдер;
Connection.ConnectionString = СтрокаПодключения;
Попытка
Connection.Open();
Исключение
Сообщить(«Подключение — bad!»);
КонецПопытки;
Command = Новый COMОбъект(«ADODB.Command»);
Command.ActiveConnection = Connection;
Command.CommandText = МойЗапрос;
Command.CommandType = 1;
RS = Новый COMОбъект(«ADODB.Recordset»);
Попытка
RS.Open(МойЗапрос, Connection );
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Операционка Win7 64. Может какую-то библиотеку надо или сам файл кривой? как выяснить что файл кривой? Программа Paradox Viewer 1.98 показывает версия файла 5.0. Данные из файла тоже отображаются. Впервые столкнулся с этим форматом. Знающие люди. не проходите мимо, пожалуйста!
1 — 23.03.12 — 12:18
Попробую апнуть
2 — 23.03.12 — 12:29
Соединение = Новый COMОбъект(«ADODB.Connection»);
РасположениеБазыДанных = Константы.РасположениеБазыДанныхКомплектация.Получить();
СтрокаСоединения = «Provider=Microsoft.Jet.OLEDB.4.0;
|Jet OLEDB:Database Password=»»»»;
|Data Source=»+РасположениеБазыДанных+»;
|Extended Properties=Paradox 5.x;
|»;
Соединение.Open(СтрокаСоединения);
Вот такая штука работает. Обратите внимание на строку Jet OLEDB:Database Password=»»»»; Может из-за этого?
3 — 23.03.12 — 12:31
Тут человек говорит мне что ему помогло следующее: «расшаривание» доступа к файлу с:pdox.net
4 — 23.03.12 — 12:33
я читал Paradox через ВК
5 — 23.03.12 — 12:35
(3) и даже с этой строчкой не помогает
(4) нет возможности ставить дополнительные компоненты пользователям, которым надо будет каждый день грузить файлы. Но для опыта хотелось бы посмотреть как через ВК это делается.
6 — 23.03.12 — 12:36
(3) даже несмотря на то, что это локальный файл?
7 — 23.03.12 — 12:39
(3) и даже это не помогло.
8 — 23.03.12 — 12:39
Залейте куда-нибудь несущественную дб-шку. Попробую ее у себя открыть, чтобы убедиться, что дело в ваших библиотеках.
9 — 23.03.12 — 12:42
на правах антирекламы ресурса )) : http://infostart.ru/public/14148/
10 — 23.03.12 — 12:44
можно найти на просторах инета и в свободном доступе
11 — 23.03.12 — 12:45
(0)У меня вот такие строки есть в одной обработке:
Соединение = Новый ComОбъект(«ADODB.Connection»);
СтрокаПодключения=»Provider=Microsoft.Jet.OLEDB.4.0;Data Source=»+Лев(ЭлементыФормы.Файл.Значение,3)+»;Extended Properties=Paradox 5.x;»;
Соединение.Open(СтрокаПодключения);
Rs = Новый ComОбъект(«ADODB.Recordset»); ИмяФайла=СтрЗаменить(ЭлементыФормы.Файл.Значение,Лев(ЭлементыФормы.Файл.Значение,3),»»);
Rs.Open(«select * from «+ИмяФайла+»;»,Соединение);
12 — 23.03.12 — 12:53
(11) у меня такой способ указан в третьем варианте.
(8) Создал пустой текстовый файл, заменил имя на то с которым работаю — ошибка та же самая выходит.
(9) Там гемморой с внутренней валютой. поищу где-нибудь еще на просторах интернетов.
13 — 23.03.12 — 13:06
мыло пиши — сброшу
14 — 23.03.12 — 13:17
martyanov@list.ru
15 — 23.03.12 — 13:18
Но все же хотелось бы узнать как же можно заставить 1с читать парадоксовские файлы теми способами, которые везде написаны.
16 — 23.03.12 — 13:46
Попробовал ваш код из 3-го примера на своих данных. Полностью рабочий.
Windows XP.
17 — 23.03.12 — 13:48
Но, с пустым файлом выдает такое «Непредвиденная ошибка драйвера внешней базы данных (8961)» Видимо, версии ADO разные.
18 — 23.03.12 — 14:35
У меня так читает (что на ВинХП что на Вин7):
БД = Новый ComObject(«ADODB.Connection»);
Если БД.Open(«Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 5.X;DefaultDir=»+ПутьБД+»;Dbq=»+ПутьБД+»;CollatingSequence=ASCII»)= 0 Тогда
Сообщить(«Ошибка….»);
Возврат;
КонецЕсли;
19 — 23.03.12 — 14:48
(16) можно попросить проверить ни чтение этот файл http://ifolder.ru/29474196
(17) я когда создавал пустой файл вьювер мне писал версию 3.
20 — 23.03.12 — 15:48
(19) Файл отрывается нормально без ошибок
21 — 23.03.12 — 15:56
(20) открывается
версия msjetoledb40.dll 4.0 95020
если что еще BDE стоит idapi32.dll 5.0 122
22 — 23.03.12 — 16:46
(21) У себя нашел файл msjetoledb40.dll версия 4.0.9756. Значит, библиотечка стоит. но вот ошибка… позже домой приеду попробую ни XP эту обработку запустить.
23 — 23.03.12 — 16:59
На Win 7 с такой же версией библиотеки как и у вас ваш файл тоже открывается нормально.
24 — 23.03.12 — 17:21
Ага! Попалась, которая кусалась! 🙂
Эксперимент на Win XP без установленного BDE показал вашу же ошибку о неверном формате. После установки BDE все отработало корректно.
Для установки надо найти файл bdeinst.cab, извлечь из него bdeinst.dll и зарегистрировать эту dll в системе с помощью regsrv32.
Понимаю, что, видимо, вам без лишних телодвижений у пользователя не обойтись. Либо этот способ, либо ВК стало быть.
Dmitriy_S
25 — 23.03.12 — 23:02
Делюсь как это победил дома я. По совету (24) я искал BDE, но так просто его не нашел. нашел в делфи, установил. запустил обработку — выдал уже другую ошибку([Microsoft][Драйвер ODBC Paradox] Непредвиденная ошибка драйвера внешней базы данных (11265)).
Наткнулся в инете на описание этой ошибки — надо было запускать с под пользователем с административными правами, это несмотря на то, что я администратор на компе. напоминаю ОС — Win7. В общем, после этих плясок, вроде, перебор строк заработал.
зы. Огромное всем спасибо за участие!!!

Paradox клиентская СУБД, где таблицы представляют собой кучку файлов. Так что работать с ней составляет особого труда. По слухам, свое название она получила потому, что работала гораздо быстрее, чем должна была по расчетам разработчиков. У меня же за время работы с ней сложилось иное мнение.
Есть очень старое приложение, которое работает с СУБД Paradox. Переписать его было бы неплохо, но это займет много времени, которого нет. Так вот, постоянно, без видимых на то причин, у этой «замечательной» базы сыпятся индексы. В результате программа зависает намертво и пользователь не может ей уже пользоваться. Приходится мне реанимировать ее различными утилитами. Не работа, а сплошная сказка. Это мне уже безумно надоело. Бывают более изощренные «падения», что простым восстановлением не отделаешься. Поэтому советую как можно чаще делать backup базы. Заметьте, не просто делать backup, а часто делать! Вот какой «парадокс».
Ко всему прочему, недавно необходимо было в эту архаичную программу внести изменения для печати отчетов. Так как там все было зашито намертво, пришлось идти иным путем — именно для этой функциональности писать свое приложение. Писал я его на .NET. Казалось бы все просто. Но тут на старте возникла проблема. При подключении к базе вылетала ошибка: Непредвиденная ошибка драйвера внешней базы данных (11265).
Пробовал подключатсья и через Odbc и через OleDB, строки подключения тщательно проерял. Все равно результат был одинаков. Мучался я с этим пару дней. Но все таки я победил. Оказывается, при работе с Paradox, создаются некоторый файлы на системном диске. А так как запуск был не от имени администратора, то создать его не удавалось, вот и получал вышеприведенную ошибку. Принудительно запустив от имени администратора, все стало работать как часы.
Поэтому, если вам придется выбирать какой СУБД пользоваться, ни в коем случае не выбирайте Paradox, это сплошное мучение. Если же вы уже с ней работаете, то запасайтесь восстановительными утилитами и backup-ами.
Попытка Delphi 10.2 Tokyo с Paradox с использованием FireDAC ODBC приносит ошибку: Неожиданная ошибка из внешнего драйвера базы данных (11265)
1 ответ
Решение состоит в том, чтобы попробовать одно из следующих:
1. Вам необходимо предоставить аутентификацию администратора для odbc32.dll. 2. Разрешить полный доступ для текущего пользователя к odbc32.dll 3. Измените владельца odbc32.dll для текущего пользователя/администратора. 4. Вы должны установить BDE (Borland Database Engine), чтобы открыть файлы базы данных paradox. 5. зайдите в панель управления и откройте источник данных (odbc). После открытия ODBC перейдите к пулу подключений и включите опрос для драйвера Microsoft Access (mdb) и драйвера Microsoft Paradox (.db). 6. Добавьте файловый DSN, чтобы установить каталог Paradox DB. 7. Создайте пользовательский DSN для драйвера Microsoft Paradox. 8. Измените путь NET DIR на папку базы данных paradox.
-3
Al Mannarino
12 Июл 2017 в 19:31