Подскажите рабочий метод для загрузки в DB (paradox db)

1. andrey7617 56 09.07.22 14:15 Сейчас в теме
Добрый день уважаемые формучане
прошу помощи у гуру

Базы данных храняться в файлах с расширением DB ... (paradox db)
на форуме подсказали какой прогой можно прочитать DB (Paradox Data Editor) - все получилось ...

интересует база Debtors1.DB ... нужно в нее как то загрузить данные ...

пробовал
https://infostart.ru/public/14148/

Обращаюсь методом открыть(путь к базе, пароль пустой) - так как пароля реально нет ...
метод Открыта() сообщает 0 ... - то есть никак не могу открыть базу

Я не привязан именно к этой разработке ... мне бы любой не сложный рабочий метод ...

Вообще в Paradox Data Editor - есть импорт csv или xml - но он тоже не работает ...
вначале выгрузил csv, загузил - пишет field "Cikl" cannot be modified ....

Подскажите пжл какой нибудь рабочий метод для загрузки данных в файл Debtors1.DB (Файл прикрепил)

Заранее огромное спасибо !!!
Прикрепленные файлы:
Debtors1.DB
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ishelper 09.07.22 16:57 Сейчас в теме +2 $m
(1)
Вообще в Paradox Data Editor - есть импорт csv или xml - но он тоже не работает ...
вначале выгрузил csv, загузил - пишет field "Cikl" cannot be modified ....
Это потому, что поле Click - автоинкрементное, да еще и ReadOnly. Поэтому я не уверен, что даже подключившись к базе через компоненту, удастся загрузить в нее данные - из-за того же ограничения.

Но если немножко поколдовать над базой HEX-редактором, то можно изменить тип проблемного поля, импортировать в базу CSV и вернуть прежние параметры.

Конкретно - один байт по смещению 78h: меняем его с 16h на 04h (сделано в прилагаемом Debtors1.DB), импортирум Debtors2.csv и потом возвращаем 16h - результат в Debtors2.DB.

Как определено смещение и значение заветного байта? Самым универсальным методом - методом тыка, как же еще! ;-)

Больше ничем помочь не могу.
Прикрепленные файлы:
Debtors1.DB
Debtors2.csv
Debtors2.DB
andrey7617; +1 Ответить
3. ishelper 09.07.22 17:05 Сейчас в теме
(2)
Больше ничем помочь не могу.
Хотя нет, могу: если есть проблемы с работой в HEX-редакторе, то могу загрузить присланный мне CSV в пропатченую базу, исправить байтик и выслать обратно.
andrey7617; +1 Ответить
6. ishelper 10.07.22 21:23 Сейчас в теме
(1)
пробовал
https://infostart.ru/public/14148/

Обращаюсь методом открыть(путь к базе, пароль пустой) - так как пароля реально нет ...
метод Открыта() сообщает 0 ... - то есть никак не могу открыть базу
А каким кодом подключаете компоненту? У меня не получается даже создать объект, не то что базу попытаться открыть.

Пробовал подключение как Native, так и COM, на x64 и x32 по примерам: https://its.1c.ru/db/v838doc#bookmark:dev:TI000001201
11. independ 1521 14.07.22 08:00 Сейчас в теме
(1) файл от 7-го paradox-a, и Bdebase.dll его не читает.
Пробовать работать через ADO
https://social.msdn.microsoft.com/Forums/en-US/2e35b79c-4c7e-4fdc-8474-b462679dfa08/how-can-i-connect-to-paradox-database-filedb-using-adonet?forum=adodotnetdataproviders
Или установить delphi и написать конвертер
https://forum.mista.ru/topic.php?id=165761
14. independ 1521 15.07.22 00:39 Сейчас в теме +2 $m
(1) Готово, вот пример для чтения (sel ect), update, delete по аналогии будет сделать несложно
Conn = Новый COMОбъект("ADODB.Connection");
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\PROGRAMS\PDE;Persist Security Info=False;Extended properties='Paradox 7.x;HDR=YES'";
Попытка
 Conn.Open();
Исключение
 Сообщить("Не удалось подключиться к базе");
КонецПопытки;
ТекстЗапроса="select Cikl,MyCikl,Name,Account fr om Debtors1.db";
cmdSQL=Новый COMОбъект("ADODB.Command");
cmdSQL.ActiveConnection = Conn;
cmdSQL.prepared=1;
cmdSQL.CommandText = Текстзапроса;
Zapros = cmdSQL.Execute();
Пока Zapros.EOF=0 Цикл
	Сообщить(Zapros.Fields("Cikl").value);
	Сообщить(Zapros.Fields("MyCikl").value);
	Сообщить(Zapros.Fields("Name").value);
	Сообщить(Zapros.Fields("Account").value);
	Zapros.MoveNext();
КонецЦикла;
Conn.Close();
Показать
andrey7617; +1 Ответить
19. independ 1521 22.07.22 16:26 Сейчас в теме
(1) разобрался, нужно удалить все записи в таблице (файле Debtors1.DB) (использовал PDE).
Далее создать primary key index по полю Cikl (использовал PDE). Появится файл Debtors1.PX
Потом можно insert-ом добавить данные.
Менять данные получится через upd ate или используя ADODB.RecordSe t
andrey7617; +1 Ответить
4. ignorant 09.07.22 21:15 Сейчас в теме
Можете попробовать "в лоб", без компонент: BDE + ADO
Вам ведь не нужен весь функционал.
Базу открыл - записи добавил - базу закрыл
andrey7617; +1 Ответить
5. andrey7617 56 10.07.22 16:04 Сейчас в теме
Можете попробовать "в лоб", без компонент: BDE + ADO
Вам ведь не нужен весь функционал.
Базу открыл - записи добавил - базу закрыл

- можете пжл написать алгоритм ? или скинуть ссылку как это сделать ? а я вам в благодарочку стартмани кидану ...
7. ignorant 10.07.22 21:48 Сейчас в теме
(5)
можете пжл написать алгоритм ?

Могу только погуглить за вас ;)
Даже BDE вроде не нужен
https://stackoverflow.com/questions/51393812/using-ado-to-connect-paradox-database-on-delphi-10-2
Вольный перевод
Используйте мастер ODBC Windows для создания системного или файлового DSN, использующего драйвер MS ODBC для ODBC для подключения к таблице Paradox.
В вашем приложении используйте провайдер OLE DB для ODBC для использования DSN для выполнения SELECT * из таблицы P'Dox
Потом ищите "Работа с таблицами Paradox через ADO"
andrey7617; +1 Ответить
9. andrey7617 56 13.07.22 15:48 Сейчас в теме
Upну ...
может кто нибудь даст рабочий метод ?
10. ishelper 13.07.22 16:04 Сейчас в теме
(9)
может кто нибудь даст рабочий метод ?
Вам надо разово загрузить данные? Тогда в (2) лежит Debtors1.db, в который можно их импортировать программой Paradox Data Editor.

Или надо что-то загружать регулярно? И что это за данные? Откуда?
andrey7617; +1 Ответить
12. andrey7617 56 14.07.22 15:37 Сейчас в теме
в который можно их импортировать программой Paradox

Каким образом подскажите пжл ???

как я писал ранее
Вообще в Paradox Data Editor - есть импорт csv или xml - но он тоже не работает ...
вначале выгрузил csv, загузил - пишет field "Cikl" cannot be modified ....


у меня не получается ... можете показать как это сделать ???

И что это за данные? Откуда?

- из 1с долги ... меня бы даже импорт устроил ...
13. ishelper 14.07.22 16:17 Сейчас в теме
(12)
Каким образом подскажите пжл ???
Если это адресовано мне, то штатно: "File" - "Import" - "CSV..."
- из 1с долги ... меня бы даже импорт устроил ...
Без проблем, выкладывайте CSV на файлообменник, ссылку - мне в ЛС, заполненный файл обратно тоже получите через ссылку.
andrey7617; +1 Ответить
15. andrey7617 56 21.07.22 21:18 Сейчас в теме
Добрый день попробовал как вы писали
выпала ошибка
"Операция не поддерживается для таблиц Paradox без ключевых полей."


	Conn = Новый COMОбъект("ADODB.Connection");
	Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\TEMP;Persist Security Info=False;Extended properties='Paradox 7.x;HDR=YES'";
	Попытка
	 Conn.Open();
	Исключение
	 Сообщить("Не удалось подключиться к базе");
	КонецПопытки;
 
	ТекстЗапроса="select * fr om Debtors1.db";
	cmdSQL=Новый COMОбъект("ADODB.Command");
	cmdSQL.ActiveConnection = Conn;
	cmdSQL.prepared=1;
	cmdSQL.CommandText = Текстзапроса;
	Zapros = cmdSQL.Execute();
	
	ТекстЗапроса="insert in to Debtors1.db (name) values ('debitor')";
	cmdSQL=Новый COMОбъект("ADODB.Command");
	cmdSQL.ActiveConnection = Conn;
	cmdSQL.prepared=1;
	cmdSQL.CommandText = Текстзапроса;
	Zapros = cmdSQL.Execute();
	
	Conn.Close();

Показать


подскажите пжл в чем может быть трабл ???
16. ishelper 21.07.22 23:35 Сейчас в теме
(15)
подскажите пжл в чем может быть трабл ???
Сдается мне - причина в том же, почему импорт в Paradox Data Editor неполного CSV (без полей Click и MyClick) завершается ошибкой: "List index out of bounds (-1)".

Может, я и ошибаюсь - пусть знатоки Paradox (ежели таковые тут найдутся) помогут автору, а я пас - мой работающий метод импорта он почему-то забраковал.

Ну и на здоровье!
andrey7617; +1 Ответить
17. andrey7617 56 22.07.22 10:42 Сейчас в теме
мой работающий метод импорта он почему-то забраковал.

- не правда я вам очень благодарен, и говорю вам - ат души !!! уважение !!!
и конечно же благодарю монеткой ...

просто очень бы хотелось бы из 1с прямо выгружать данные по долгам ... было бы очень удобно ...
18. ishelper 22.07.22 14:46 Сейчас в теме
(17)
и конечно же благодарю монеткой ...
Спасибо.
очень бы хотелось бы из 1с прямо выгружать данные по долгам ... было бы очень удобно ...
А попробуйте выгрузить ваши данные в пропатченый Debtors1.DB из (2) - получится или тоже возникнет ошибка?

Если получится, то на крайний случай можно использовать "костыль" - перед импортом прямо из 1С патчить файл (записывать значение 04 в байт по смещению 120 (78h)) методами работы с двоичными данными, потом подключаться к нему через ADO, вносить данные, закрывать, снова открывать как двоичный, отменять патч (возвращать значение 22 (16h) по тому же смещению 120) и закрывать файл.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот