for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Вопросы по 1С
  

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

Сообщений: 22
Дата: 31.01.12 09:13:08
Добрый день!
Возникла такая проблема: нужно из 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

Сообщений: 13173
Дата: 31.01.12 10:09:27
Код строки соединения и код создания файла через ADO ?


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive

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

Сообщений: 22
Дата: 31.01.12 10:19:40
Соединение=Новый 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
Дата: 31.01.12 10:27:45
ПоляТаблицы - хранит строку с перечисленными полями: ИмяПоля1 ТипПоля(Длина), ИмяПоля2 ТипПоля(Длина)...
Ratings: 0 negative/0 positive

Re: Создание DBF файла с мемо полем из 1С
PaulWist

Сообщений: 13173
Дата: 31.01.12 10:41:41
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
Дата: 31.01.12 10:47:08
PaulWist

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

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

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

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

Re: Создание DBF файла с мемо полем из 1С
PaulWist

Сообщений: 13173
Дата: 31.01.12 11:57:40
Так пробуем

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


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive

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

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

То же самое получается
Ratings: 0 negative/0 positive

Re: Создание DBF файла с мемо полем из 1С
PaulWist

Сообщений: 13173
Дата: 31.01.12 12:26:26
Цитата:
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
Дата: 31.01.12 12:38:34
Я повторюсь, таблицы у меня создаются без ошибок, они даже открываются пустые без ошибок, ошибка возникает при попытке записать в мемо поле данные, причем только в том случае, если таблица была создана из 1С
Ratings: 0 negative/0 positive

Re: Создание DBF файла с мемо полем из 1С
Igor Korolyov

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


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




Исправлено: Igor Korolyov, 31.01.12 12:54
Ratings: 0 negative/0 positive

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

Сообщений: 22
Дата: 31.01.12 13:02:36
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

Сообщений: 13173
Дата: 31.01.12 13:06:31
Ну не знаю, вот код нормально отрабатывающий

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
Дата: 31.01.12 13:07:37
Igor Korolyov
P.S. Да, ещё стоит приложить архивчик с пустой таблицей (включая fpt и cdx файлы, если таковые имеются)
Ratings: 0 negative/0 positive

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

Сообщений: 22
Дата: 31.01.12 13:12:16
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

Сообщений: 4474
Дата: 31.01.12 14:08:15
Есть извращенное решение и без ADO. Можно создавать dbf из 1С как обычный бинарный файл
Ratings: 0 negative/0 positive

Re: Создание DBF файла с мемо полем из 1С
Igor Korolyov

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


------------------
WBR, Igor
Ratings: 0 negative/0 positive

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

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

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

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

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

Спасибо за ссылку, буду пробовать
Ratings: 0 negative/0 positive

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

Сообщений: 22
Дата: 01.02.12 10:04:05
Всем спасибо за помощь, проблема решена.



Исправлено: Dizzy, 01.02.12 10:35
Ratings: 0 negative/0 positive



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

On-line: 27 Simple777 Божья_коровка  (Гостей: 25)

17.09.2019 13:25:17 exec: 0.08
Mem: 1.405 Mb

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