|
04.04.2013, 16:37 | #1 |
Участник
|
Цитата:
Повторюсь, эта ошибка только на нескольких компьютерах |
|
04.04.2013, 19:30 | #2 |
Участник
|
Все ясно - вы пытаетесь в операторе CREATE сразу указать путь к файлу - так делать нельзя. Как указывать путь к файлу в примере есть. Завтра утром выложу полностью пример как желательно делать - переделайте под себя и должно работать. Кроме того наверное имеет смысл разбить операторы CREATE и INSERT.
Последний раз редактировалось asd1274; 04.04.2013 в 20:03. |
|
04.04.2013, 20:10 | #3 |
Участник
|
Для работы с DBF осмелюсь посоветовать начать использовать Net сборки, например FastDBF: Обработка DBF через .net
Удобней использовать, выше скорость и на сервере x64 работает. Дополнительный плюс, в отличие от мелкософтовского драйвера, позволяет корректно задавать количество десятичных разрядов для типа numeric и различные кодировки русского. |
|
|
За это сообщение автора поблагодарили: asd1274 (1), ilyuha (1). |
04.04.2013, 21:44 | #4 |
Участник
|
Цитата:
Сообщение от handy-comp
Для работы с DBF осмелюсь посоветовать начать использовать Net сборки, например FastDBF: Обработка DBF через .net
Удобней использовать, выше скорость и на сервере x64 работает. Дополнительный плюс, в отличие от мелкософтовского драйвера, позволяет корректно задавать количество десятичных разрядов для типа numeric и различные кодировки русского. |
|
05.04.2013, 08:15 | #5 |
Участник
|
Вот рабочий пример - посмотрите его - наверное имеет смысл так сделать. Правда не сделал проверку на наличие файла.
X++: static void CReateDBFCustomer_RContract(Args _args) { 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(); while select RContractTable { cmd_value = strfmt("%1', '%2', '%3', '%4')", RContractTable.RContractPartnerCode, date2str(RContractTable.ContractDate, 123, 2, -1, 2, -1, 2), RContractTable.RContractNumber, RContractTable.RContractAccount); cmdText = "insert into " + fileName + " (ACCOUNTNUM, DATEDOG, NDOG, DOGACCOUNT) values ('" + cmd_value ; ADO.commandText(cmdText); ADR = ADO.execute(); } } } |
|
05.04.2013, 08:58 | #6 |
Участник
|
Еще уточнил - на самом деле можно в оператор CREATE указывать директорию, но нужен движок Jet, то есть где то так:
X++: dBF_Con.open("Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Extended Properties=dbase 5.0;Data Source="+filePath+";"); |
|
05.04.2013, 13:52 | #7 |
Участник
|
Цитата:
Сообщение от asd1274
Все ясно - вы пытаетесь в операторе CREATE сразу указать путь к файлу - так делать нельзя. Как указывать путь к файлу в примере есть. Завтра утром выложу полностью пример как желательно делать - переделайте под себя и должно работать. Кроме того наверное имеет смысл разбить операторы CREATE и INSERT.
Переделали бы, если у всех была эта ошибка. |
|