07.05.2007, 09:56 | #1 |
Участник
|
Фрагмент класса на выгрузку данных из AXAPTA в DBF
{ lp = new LoginProperty(); lp.setDSN('Файлы dBASE'); lp.setOther('DefaultDir='+filePath); c = new OdbcConnection(lp); s = c.createStatement(); s.executeUpdate("create table "+ FileName +" (IdTable int, RecordId int, DataOtgr char(10), DataDog char(10), ClientFull char(64), Osnov char(20)," + " DogFull char(48),DogPost char(32),DogPostNum char(32), ContrAttr char(64), AppndAttr char(64), CurrName char(20)," + " VidReal int, FullFrom char(64),SKLADFROM char(20), FullTo char(64), SKLADTO char(20), UkeyTMC int, FullGoods char(32), FullGoods1C char(70), " + " Volume real, Price real, APPPrice real, NDS real, ClientInn char(14), InnTO char(14),InnFROM char(14), VidTov char(1) , VidOtgr char(20), NumNakl char(20), DogVzaimR char(60), Pril int, Type45 int )" ); } Проблема в том, что если вызывать этот класс из AXAPTA вручную - работает, путем вызова из командной строки - работает, если запускать через SQL job - не проходит c = new OdbcConnection(lp) - процесс просто виснет и ничего дальше не делает. Права во всех случаях одинаковые.Может кто знает, в чем может быть проблема? |
|
07.05.2007, 11:09 | #2 |
Участник
|
Пусть содержит бэкслэш "\".
В Аксапте этот символ является специальным. Для того, чтобы записать бэкслэш в Аксапте его надо удваивать. Неправильно записанный в Аксапте путь str path = "c:\folder\db.dbf"; Правильно записанный в Аксапте путь str path = "c:\\folder\\db.dbf"; |
|
07.05.2007, 11:50 | #3 |
Участник
|
А что имеется в виду под SQL job?
Вы запускаете через бизнесс коннектор?
__________________
Axapta v.3.0 sp5 kr2 |
|
07.05.2007, 15:03 | #4 |
Участник
|
Следует еще учитывать тот факт, что имена стандартных DSN в разной локализации могут называться по разному. На разных языках.
Вы использовали имя "Файлы dBASE". Но если система англоязычная (а сервера обычно именно англязычные), то тот же самый DSN будет называться уже по английски "Files dBASE". Т.е. Вы просто не найдете нужного DSN. Чтобы избежать подобных недоразумений, лучше писать напрямую строку соединения, не используя DSN. Но стандартный драйвер ODBC Microsoft dBase Driver (*.dbf) не поддерживает команду CREATE TABLE. Будет сообщение о недопустимой команде. Лично я использую такую стратегию: 1) Любым способом создается пустой файл DBF нужной структуры. Вне Axapta. 2) Этот образцовый файл DBF кладется в специальную сетевую папку, доступную для всех пользоватиелей 3) Когда необходимо импортировать данные в DBF, "образцовый" файл копируется в указанную пользователем директорию и наполняется стандартынми командами INSERT-SQL |
|
07.05.2007, 17:59 | #5 |
Участник
|
2Mazzy - пути все с двойными слешами, проверяла. Спасибо.
2AndyD - job настроенный на MS SQL Server. 2Владимир - запускала все из командной строки этого самого сервере, работает. Т.е. класс впринципе рабочий. Через планировщик Windows все тоже отрабатыет. А вот при попытке запуска с помощью SQL Server Agent класс виснет именно при создании подключения к DSN. Запуск из командной строки и SQL Job под одним и тем же пользователем, так что проблема с правами исключена. Я в тупике, не знаю что делать |
|
08.05.2007, 16:24 | #6 |
Участник
|
Разобралась, но ситуация странная.
Дело в подключении к DSN на сетевом диске. Именно на этом месте происходил затык при запуске класса через SQL job. Поменяла путь на локальный - все работает. |
|