|
04.04.2013, 11:43 | #1 |
Участник
|
Ошибка при экспорте DBF
Добрый день.
АХ2009 Win XP У нас имеется самописный функционал, который выгружает документы в формате DBF. Но у некоторых пользователей возникает ошибка при экспорте: "Метод "execute" в COM-объекте класса "ADODB.Command" возвратил код ошибки 0x80040E14 (<неизвестно>), который означает: [Microsoft][Драйвер ODBC dBase] Ошибка синтаксиса в инструкции CREATE TABLE." Драйвер установлен. Посоветуйте пожалуйста, в чем может быть причина... |
|
04.04.2013, 12:42 | #2 |
Участник
|
У вас проблема с синтаксисом в команде создания файла 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 |
Участник
|
Цитата:
Сообщение от 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 |
Участник
|
Какие именно - если можете дайте ваш код - попробую у себя запустить.
|
|
04.04.2013, 13:49 | #5 |
Участник
|
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 |
Участник
|
Если можно, то покажите здесь значение cmdText - перед "ADR = ADO.execute();" - я его прогоню в foxpro.
|
|
05.04.2013, 10:54 | #7 |
Участник
|
А с правами доступа к нужной директории все в порядке?
1. С того рабочего места, где Вы выполняете код видна та сетевая директория, в которой Вы пытаетесь создать файл DBF? 1.2. Вы выполняете код со стороны сервера или клиента? Сетевая папка видна и со стороны сервера и со стороны клиента? 2. У пользователя, от имени которого идет обращение, есть права на создание файлов в указанной директории?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
05.04.2013, 12:31 | #8 |
Участник
|
Наверное в данном случае была бы не синтаксическая ошибка а какая то другая или я ошибаюсь?
|
|
05.04.2013, 13:54 | #9 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
А с правами доступа к нужной директории все в порядке?
1. С того рабочего места, где Вы выполняете код видна та сетевая директория, в которой Вы пытаетесь создать файл DBF? 1.2. Вы выполняете код со стороны сервера или клиента? Сетевая папка видна и со стороны сервера и со стороны клиента? 2. У пользователя, от имени которого идет обращение, есть права на создание файлов в указанной директории? |
|
05.04.2013, 14:04 | #10 |
Участник
|
Повторюсь - тогда проблема в провайдере - вам надо Jet указывать обязательно. Хотя наверное проще было бы CREATE сделать без указания пути к файлу - его надо перенести в описание провайдера.
|
|
|
За это сообщение автора поблагодарили: ilyuha (1). |