|
Некорректная кодировка после выполнения первой записи VFPOLEDB | ☑ | ||
---|---|---|---|---|
0
DimaDmitriy
11.08.21
✎
12:06
|
День добрый!
Исходная задача: необходимо писать в DBF-файлы через 1С. Условия таковы, что эти базы рабочие и ежедневно используются программами на FoxPro. Поэтому использовать стандартный XBase - нельзя. Ибо базы всё время открыты. Использую следующий код для записи в DBF: Connection = Новый COMОбъект("ADODB.Connection"); Соединение = ("Provider=vfpoledb; |Data Source=""" +Путь+"""; |Extended Properties=DBASE IV; |Codepage=1251;"); Connection.Open(Соединение); ТекстЗапроса = ""; ТекстЗапроса = СоставитьТекстЗапроса(Данные); // составление запроса insert по некоторым данным Command = Новый COMОбъект("ADODB.Command"); RecordSet = Новый COMОбъект("ADODB.Recordset"); Command.ActiveConnection = Connection; Command.CommandText = ТекстЗапроса; RecordSet = Command.Execute(); Command = Неопределено; И, собственно, вот в чём проблема: После запуска конфигурации и выполнения первой записи - всё отрабатывает нормально. Но вторая и последующие записывают с некорректной кодировкой. Не могу понять в чём тут может быть проблема. Пробовал и методы Close() для Connection и Command. Пробовал кодировку записываемых строковых значений менять всё равно получается вот такая белиберда: Первая запись в базе: "ПРУТОК ДКРНП Л63" Вторая и последующие: "IDOOIE └EDII E63" Числа и даты пишутся нормально. |
|||
1
Вафель
11.08.21
✎
12:08
|
xbase же может только на чтение открывать
|
|||
2
DimaDmitriy
11.08.21
✎
12:11
|
(1) нет, у конструктора есть соответствующий параметр. Но только в монопольном режиме, что мне не подходит
|
|||
3
Вафель
11.08.21
✎
12:13
|
(2) только чтение, но в монопольном режиме? это как?
|
|||
4
DimaDmitriy
11.08.21
✎
12:16
|
(3) При создании объекта XBase, в конструкторе параметр "ТолькоЧтение" переопределяется на Ложь и можно писать (но только в монопольном режиме)
|
|||
5
Вафель
11.08.21
✎
12:18
|
(4) так тебе писать или читать?
|
|||
6
acht
11.08.21
✎
12:18
|
(0)
|
|||
7
acht
11.08.21
✎
12:18
|
(0) В заголовке dbf какая кодировка стоит, перед тем как ты туда что-то писать собираешся?
|
|||
8
DimaDmitriy
11.08.21
✎
12:18
|
(5) писать
|
|||
9
DimaDmitriy
11.08.21
✎
12:19
|
(7) 1251
|
|||
10
acht
11.08.21
✎
12:20
|
(9) А после того, как ты сделал первую запись - меняется?
|
|||
11
DimaDmitriy
11.08.21
✎
12:25
|
(10) а в какой момент и где это лучше глянуть?
|
|||
12
acht
11.08.21
✎
12:33
|
(11) После записи, сразу в файле. 29й байт по-моему.
Надо понять в какой кодировке оно у тебя пишет и кто ее ставит - твой фокспро или изначальная программа |
|||
13
acht
11.08.21
✎
12:34
|
И заодно - какая программа показывает тебе строки в некорректной кодировке? сторонний вьювер или изначальная программа?
|
|||
14
DimaDmitriy
11.08.21
✎
12:44
|
(13) 3 программы:
- простое считывание значений через Xbase в 1С - просмотр базы через FoxPro - DBFNavigator - ну и эксцель Через что ни открывай - везде одна запись корректна - вторая нет |
|||
15
DimaDmitriy
11.08.21
✎
12:57
|
(12) проверил кодировку 866 - не меняется перед и после записей
|
|||
16
Вафель
11.08.21
✎
12:58
|
Так 1251 или 866?
|
|||
17
DimaDmitriy
11.08.21
✎
12:59
|
(16) 866 все жё
|
|||
18
DimaDmitriy
11.08.21
✎
13:05
|
Поменял в строке соединения codepage=866 - никакого эффекта
|
|||
19
DimaDmitriy
11.08.21
✎
13:06
|
Вообще такое ощущение, что после первой записи соединение не закрывается полностью и это вызывает какую-то ошибку...
|
|||
20
Вафель
11.08.21
✎
13:08
|
А где ты брал строку соединения?
Что то в инете они другие |
|||
21
DimaDmitriy
11.08.21
✎
13:14
|
(20) да вот где-то в инете и брал.
Сначала я пробовал писать через microsoft.jet.oledb.4.0 - но он при записи ломал индексы и в Fox-е лечилось только переиндексацией базы. Строка соединения, походу от него и досталась. |
|||
22
acht
11.08.21
✎
13:18
|
(18) А ты прямо на бою проверяешь или на отдельной базе, куда никто кроме тебя не пишет?
Ну, чтобы исключить параллельные изменения, производимые не тобой. |
|||
23
acht
11.08.21
✎
13:20
|
(21) https://www.connectionstrings.com/visual-foxpro/
Попробуй варианты с "Microsoft Visual FoxPro ODBC Driver" |
|||
24
DimaDmitriy
11.08.21
✎
13:20
|
(22) сейчас отдельная, конечно
|
|||
25
DimaDmitriy
11.08.21
✎
13:32
|
Попробовал следующие:
Соединение = "Provider=vfpoledb; |Data Source=""" +Путь+"""; |Collating Sequence=machine"; Соединение = "Provider=vfpoledb; |Data Source=""" +Путь+"""; |Collating Sequence=general"; Нет эффекта. Попробовал такое: Соединение ="Driver={Microsoft Visual FoxPro Driver}; |SourceType=DBF; |SourceDB="+Путь+"; |Exclusive=No; |Collate=Machine; |NULL=NO; |DELETED=NO; |BACKGROUNDFETCH=NO"; Ругается, мол нет такого драйвера |
|||
26
Ёпрст
11.08.21
✎
14:21
|
(13) в дбф навигаторе есть кнопка dos и он кажет "правильно"
|
|||
27
Ёпрст
11.08.21
✎
14:31
|
ну и кидай своё файло и свой текс запроса с инсертом. с файла можешь выкинуть все записи
|
|||
28
DimaDmitriy
11.08.21
✎
15:12
|
Заработало!
Я сделал две вещи: - был установлен драйвер фокса версии 9, поставил ещё и 8 - в строке соединения я передавал путь до каталога, где лежат DBF (думал, что это не важно, т.к. в команде insert указывается имя таблицы) в итоге стал передавать путь напрямую к файлу DBF Что из этого сработало - не знаю, но экспериментировать сейчас не хочу, ибо за два дня мозги изрядно поплавились) Всем спасибо за участие! |
|||
29
DimaDmitriy
11.08.21
✎
15:18
|
Проверил всё-таки: виноват был драйвер
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |