:: Вопросы по 1С
Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
Добрый день!
Возникла такая проблема: нужно из 1С 8.2 создавать dbf файлы и выгружать в них данные, некоторые файлы имеют мемо поля, поэтому XBase не подходит. Создаю файлы через ADO. Файлы создаются, но при выгрузке в них данных возникает ошибка: "Ошибка при вызове метода контекста (Execute)Command.Execute(); по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for Visual FoxPro): Memo file is missing or is invalid." Выгружаю данные тоже через ADO. Если брать готовый файл, созданный в FoxPro, то процедура выгрузки отрабатывает без ошибок. Может кто-нибудь подскажет в чем дело?
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
PaulWist

Сообщений: 14696
Дата регистрации: 01.04.2004
Код строки соединения и код создания файла через ADO ?


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
Соединение=Новый COMОбъект("ADODB.Connection");
Соединение.Open("Provider=vfpoledb.1;Data Source="+КаталогВыгрузки+";Collating Sequence=Russian;");
Для i=0 По 96 Цикл
ИмяТаблицы = ПолучитьИмяТаблицы(i);
ПоляТаблицы = ПолучитьПоляТаблицы(ИмяТаблицы);
Соединение.Execute("Create Table "+ИмяТаблицы+" ("+ПоляТаблицы+")");
КонецЦикла;
Соединение.Close();
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
ПоляТаблицы - хранит строку с перечисленными полями: ИмяПоля1 ТипПоля(Длина), ИмяПоля2 ТипПоля(Длина)...
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
PaulWist

Сообщений: 14696
Дата регистрации: 01.04.2004
Dizzy
Соединение=Новый COMОбъект("ADODB.Connection");
Соединение.Open("Provider=vfpoledb.1;Data Source="+КаталогВыгрузки+";Collating Sequence=Russian;");
Для i=0 По 96 Цикл
ИмяТаблицы = ПолучитьИмяТаблицы(i);
ПоляТаблицы = ПолучитьПоляТаблицы(ИмяТаблицы);
Соединение.Execute("Create Table "+ИмяТаблицы+" ("+ПоляТаблицы+")");
КонецЦикла;
Соединение.Close();

Что получится если написать

Соединение.Execute("Create Table Test (f1 M) ");

создастся табла?


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
PaulWist

Что получится если написать

Соединение.Execute("Create Table Test (f1 M) ");

создастся табла?

Таблица создалась, в ней 2 поля, F1 - мемо, и какое-то _NullFlags
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
PaulWist

Сообщений: 14696
Дата регистрации: 01.04.2004
Так пробуем

Соединение.Execute("Create Table Test.dbf FREE (f1 M) ");


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
PaulWist
Так пробуем
Соединение.Execute("Create Table Test.dbf FREE (f1 M) ");

То же самое получается
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
PaulWist

Сообщений: 14696
Дата регистрации: 01.04.2004
Цитата:
oConn = CREATEOBJECT("ADODB.Connection")
oConn.ConnectionString = "provider=vfpoledb.1;Data Source = c:\;Mode=ReadWrite"
oConn.Open()

oConn.Execute("execscript([create table c:\test.dbf free (f1 M)])")
oConn.Close()

такой код у меня нормально отрабатывет.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
Я повторюсь, таблицы у меня создаются без ошибок, они даже открываются пустые без ошибок, ошибка возникает при попытке записать в мемо поле данные, причем только в том случае, если таблица была создана из 1С
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Dizzy
Таблица создалась, в ней 2 поля, F1 - мемо, и какое-то _NullFlags
Это нормально. Если в описании поля уточнить NOT NULL то второго (служебного) поля не будет. При просмотре в фоксе его и так не будет видно.
А провайдер какой версии используется? Может быть нужно обновить до последней?
И было бы неплохо показать что именно содержит "ПоляТаблицы" - возможно там некорректно определяются эти самые мемо-поля...
P.S. Да, ещё стоит приложить архивчик с пустой таблицей (включая fpt и cdx файлы, если таковые имеются) и показать код который пытается писать в это самое мемо поле.


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 31.01.12 12:54
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
Igor Korolyov
А провайдер какой версии используется? Может быть нужно обновить до последней?
И было бы неплохо показать что именно содержит "ПоляТаблицы" - возможно там некорректно определяются эти самые мемо-поля...

Версия 9.0.0.3504

Для интересующей таблицы строка ПоляТаблицы выглядит так:
BCODE numeric(6),BNAME char(75),BPER numeric(3),BQUAN numeric(7),BBUY numeric(10),BOPT numeric(10),BROZN numeric(10),BTYPE numeric(2),BSIGN char(5),BREDACTOR char(45),BCITY char(20),PUBCODE numeric(5),BPUBLISH char(30),BAUTHOR char(45),BISBN char(20),BYEAR numeric(4),BOBL char(1),BPAGES numeric(4),BRESDATA char(25),BCONTENT M,BSHTRIH char(14),BSERIE char(70),BILUSTR char(10),BBBK char(20),BUDK char(20),BPUBDATE date(8),MARK numeric(1),EDIT numeric(1),NEW numeric(1),BTHEMA numeric(2),BSUBTHEMA numeric(2)

BCONTENT было определено и так тоже: BCONTENT мемо(10)
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
PaulWist

Сообщений: 14696
Дата регистрации: 01.04.2004
Ну не знаю, вот код нормально отрабатывающий

oConn = CREATEOBJECT("ADODB.Connection")
oConn.ConnectionString = "provider=vfpoledb.1;Data Source = c:\;Mode=ReadWrite"
oConn.Open()
oConn.Execute("execscript([create table c:\test.dbf free (f1 M)])")
oConn.Execute("execscript([insert into test (f1) values(REPLICATE('123', 100)) ])")
oConn.Close()


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
Igor Korolyov
P.S. Да, ещё стоит приложить архивчик с пустой таблицей (включая fpt и cdx файлы, если таковые имеются)
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
Igor Korolyov
и показать код который пытается писать в это самое мемо поле.

Command.Parameters.Append(Command.CreateParameter("Annot", 200, 1, 1500, ""));
Для Каждого Запись Из Выборка Цикл
Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(Строка(Запись));
Command.Parameters("Annot").Value=Номенклатура.Аннотация;
Command.ActiveConnection = Соединение;
Command.CommandText ="Update BOOKS.dbf set BCONTENT=? where BCODE="+Формат(Номенклатура.Код,"ЧГ=")+"";
Command.Execute();
ПланыОбмена.УдалитьРегистрациюИзменений(ПланыОбмена.ФоксПро.НайтиПоКоду("1"),Номенклатура);
КонецЦикла;

На файлах, созданных в фокспро, отрабатывает без ошибок
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
medstrax
Забанен

Сообщений: 5964
Дата регистрации: 23.03.2007
Есть извращенное решение и без ADO. Можно создавать dbf из 1С как обычный бинарный файл
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Из фокса, используя провайдер версии 9.0.0.5815 (взять можно тут) и твою dbf из архива (не увидел в ней ничего криминального - фокс делает точно такие же файлы), я смог без ошибок добавить новые записи и обновить существующие, используя подобный параметризованный запрос (хотя мне кажется что тип параметра для memo указан не совсем подходящий).
Естественно, я не в курсе что у тебя находится в CommandText после подстановки туда Формат(Номенклатура.Код,"ЧГ="), но предполагаю что там будет число, и уж такую ошибку ты не просмотрел бы - да и не вываливается при этом провайдер, а ругается на синтаксическую ошибку, если что не так...
Да, такой вопрос - создаётся таблица и начинает использоваться в рамках одной и той-же ADODB коннекции? Т.е. открыл соединение, потом одной командой создал таблицу а второй пытаешься писать в неё (хотя какой тогда к лешему UPDATE )?


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
Igor Korolyov
Да, такой вопрос - создаётся таблица и начинает использоваться в рамках одной и той-же ADODB коннекции? Т.е. открыл соединение, потом одной командой создал таблицу а второй пытаешься писать в неё (хотя какой тогда к лешему UPDATE )?

Нет, в процедуре создания файлов коннект создается и закрывается, а в процедуре заполнения данными коннект создается и закрывается снова
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
Igor Korolyov
провайдер версии 9.0.0.5815 (взять можно тут)

Спасибо за ссылку, буду пробовать
Ratings: 0 negative/0 positive
Re: Создание DBF файла с мемо полем из 1С
Dizzy
Автор

Сообщений: 22
Дата регистрации: 13.09.2010
Всем спасибо за помощь, проблема решена.



Исправлено 1 раз(а). Последнее : Dizzy, 01.02.12 10:35
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 2 (Гостей: 2)

© 2000-2024 Fox Club 
Яндекс.Метрика