AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2013, 11:43   #1  
ilyuha is offline
ilyuha
Участник
 
32 / 15 (1) ++
Регистрация: 28.01.2011
Ошибка при экспорте DBF
Добрый день.
АХ2009
Win XP
У нас имеется самописный функционал, который выгружает документы в формате DBF. Но у некоторых пользователей возникает ошибка при экспорте:
"Метод "execute" в COM-объекте класса "ADODB.Command" возвратил код ошибки 0x80040E14 (<неизвестно>), который означает: [Microsoft][Драйвер ODBC dBase] Ошибка синтаксиса в инструкции CREATE TABLE."


Драйвер установлен.
Посоветуйте пожалуйста, в чем может быть причина...
Старый 04.04.2013, 12:42   #2  
asd1274 is offline
asd1274
Участник
Компания АМАНД
 
32 / 12 (1) ++
Регистрация: 29.09.2008
Адрес: Ковров
У вас проблема с синтаксисом в команде создания файла dbf.
Попробуйте ее вытащить в info и выполнить например в Foxpro.
Вот рабочий вариант:

X++:
    CCADOConnection              dBF_Con;
    CCADOCommand             aDO;
    CCADORecordset             aDR;
    str filePath = 'c:\\1\\', fileName = '001.dbf';
    str                                   cmdText, cmd_del, cmd_value;
    CustTable                        CustTable;
    RContractTable                RContractTable;

    ;

    dBF_Con     = new CCADOConnection();
    aDO         = new CCADOCommand();
    aDR         = new CCADORecordset();


     dBF_Con.open("Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Extended Properties=dbase 5.0;Data Source="+filePath+";");
         ADO.activeConnection(dBF_Con);
        if (dBF_Con)
    {
         cmd_del = "DROP Table "+ fileName;
         ADO.commandText(cmd_del);
         ADR = ADO.execute();
       cmdText = " CREATE TABLE " + fileName + " (ACCOUNTNUM char(20), DATEDOG date, NDOG char(20), DOGACCOUNT char(10))"; // договора

        ADO.commandText(cmdText);
        ADR = ADO.execute();
      }

Как то так - сверьте с тем что есть у вас.

Последний раз редактировалось asd1274; 04.04.2013 в 12:47.
Старый 04.04.2013, 13:03   #3  
ilyuha is offline
ilyuha
Участник
 
32 / 15 (1) ++
Регистрация: 28.01.2011
Цитата:
Сообщение от asd1274 Посмотреть сообщение
У вас проблема с синтаксисом в команде создания файла dbf.
Попробуйте ее вытащить в info и выполнить например в Foxpro.
Вот рабочий вариант:

X++:
    CCADOConnection              dBF_Con;
    CCADOCommand             aDO;
    CCADORecordset             aDR;
    str filePath = 'c:\\1\\', fileName = '001.dbf';
    str                                   cmdText, cmd_del, cmd_value;
    CustTable                        CustTable;
    RContractTable                RContractTable;

    ;

    dBF_Con     = new CCADOConnection();
    aDO         = new CCADOCommand();
    aDR         = new CCADORecordset();


     dBF_Con.open("Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Extended Properties=dbase 5.0;Data Source="+filePath+";");
         ADO.activeConnection(dBF_Con);
        if (dBF_Con)
    {
         cmd_del = "DROP Table "+ fileName;
         ADO.commandText(cmd_del);
         ADR = ADO.execute();
       cmdText = " CREATE TABLE " + fileName + " (ACCOUNTNUM char(20), DATEDOG date, NDOG char(20), DOGACCOUNT char(10))"; // договора

        ADO.commandText(cmdText);
        ADR = ADO.execute();
      }

Как то так - сверьте с тем что есть у вас.
У нас все практически один в один, только имеются доп. условия...
Старый 04.04.2013, 13:04   #4  
asd1274 is offline
asd1274
Участник
Компания АМАНД
 
32 / 12 (1) ++
Регистрация: 29.09.2008
Адрес: Ковров
Какие именно - если можете дайте ваш код - попробую у себя запустить.
Старый 04.04.2013, 13:49   #5  
ilyuha is offline
ilyuha
Участник
 
32 / 15 (1) ++
Регистрация: 28.01.2011
X++:
cmdText                 = " CREATE TABLE " + filenameTmp + " (";
            cmdTextInsertTemplate   = " INSERT INTO "  + filenameTmp + " (";

            while select usrExpImpField
            order by usrExpImpField.Sequence
            where usrExpImpField.GroupId == groupId
            {
                if (usrExpImpField.Enabled)
                {
                    fieldName = usrExpImpField.ExFieldName ? usrExpImpField.ExFieldName : usrExpImpField.fieldName(false, "");
                   cmdText += strfmt("%1 %2%3,",
                                    fieldName,
                                    this.BaseTypeToADOType(usrExpImpField.baseType()),
                                    usrExpImpField.baseType() == Types::String ? strfmt("(%1)",usrExpImpField.FieldSize()) : "");

                    cmdTextInsertTemplate += fieldName + ",";
                }
            }

            cmdText =   strdel(cmdText,strlen(cmdText),1);
            cmdText += ")";

            cmdTextInsertTemplate =   strdel(cmdTextInsertTemplate,strlen(cmdTextInsertTemplate),1);
            cmdTextInsertTemplate += ") values (";

            dBF_Con     = new CCADOConnection();
            aDO         = new CCADOCommand();
            aDR         = new CCADORecordset();
            dBF_Con.open("Driver={Microsoft dBase Driver (*.dbf)};");
            ADO.activeConnection(dBF_Con);

            if (dBF_Con)
            {
                ADO.commandText(cmdText);
                ADR = ADO.execute();
            }
Старый 04.04.2013, 15:46   #6  
asd1274 is offline
asd1274
Участник
Компания АМАНД
 
32 / 12 (1) ++
Регистрация: 29.09.2008
Адрес: Ковров
Если можно, то покажите здесь значение cmdText - перед "ADR = ADO.execute();" - я его прогоню в foxpro.
Старый 05.04.2013, 10:54   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
А с правами доступа к нужной директории все в порядке?

1. С того рабочего места, где Вы выполняете код видна та сетевая директория, в которой Вы пытаетесь создать файл DBF?
1.2. Вы выполняете код со стороны сервера или клиента? Сетевая папка видна и со стороны сервера и со стороны клиента?
2. У пользователя, от имени которого идет обращение, есть права на создание файлов в указанной директории?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 05.04.2013, 12:31   #8  
asd1274 is offline
asd1274
Участник
Компания АМАНД
 
32 / 12 (1) ++
Регистрация: 29.09.2008
Адрес: Ковров
Наверное в данном случае была бы не синтаксическая ошибка а какая то другая или я ошибаюсь?
Старый 05.04.2013, 13:54   #9  
ilyuha is offline
ilyuha
Участник
 
32 / 15 (1) ++
Регистрация: 28.01.2011
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
А с правами доступа к нужной директории все в порядке?

1. С того рабочего места, где Вы выполняете код видна та сетевая директория, в которой Вы пытаетесь создать файл DBF?
1.2. Вы выполняете код со стороны сервера или клиента? Сетевая папка видна и со стороны сервера и со стороны клиента?
2. У пользователя, от имени которого идет обращение, есть права на создание файлов в указанной директории?
С правами все в порядке.
Старый 05.04.2013, 14:04   #10  
asd1274 is offline
asd1274
Участник
Компания АМАНД
 
32 / 12 (1) ++
Регистрация: 29.09.2008
Адрес: Ковров
Повторюсь - тогда проблема в провайдере - вам надо Jet указывать обязательно. Хотя наверное проще было бы CREATE сделать без указания пути к файлу - его надо перенести в описание провайдера.
За это сообщение автора поблагодарили: ilyuha (1).
Теги
ado, dbf, создание файла

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Need help ошибка Неправильный тип индекса массива. Evgeniy2020 DAX: Администрирование 3 05.11.2013 03:13
Ошибка в логе при установке клиента AX 2009 sao DAX: Администрирование 9 04.02.2010 11:56
ошибка при экспорте в WORD Nikolaich DAX: Программирование 14 27.01.2009 17:50
Поля 255 символов при экспорте в DBF Beast-L DAX: Программирование 5 25.07.2007 14:22
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:17.