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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.09.2004, 15:16   #1  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
Проблема с выгрузкой/загрузкой файлов в базу из Axapta в др базу
Доброго всем утра (дня, вечера, ночи). Подскажите кто что может:
выгружаю в word данные, сохраняю в файл, через binData плучаю контейнер и сохраняю в таблице в аксапте.
Так вот встала задача этот файл сохранять в таблице, но не в аксаптовской, а в левой ( тоже sql server).
Для реализации этого я поступил след. образом:
так я сохраняю файл в другой базе:
X++:
{
CCADOConnection con;
CCADORecordSet rs;
str s;
CCADOFields fields;
CCADOField field;
binData data = new BinData();
com com;
;
#CCADO
con = new CCADOConnection();
constr = strFmt("Provider= SQLOLEDB.1;UID=%1;PWD=%2;SERVER=%3;DATABASE=%4;",
'userid',
'pwd',
'server',
'db');
con.connectionString(constr);
con.open();

rs = new CCADORecordSet();
rs.open('select * from Table3 where (RECID = 1)', con, #adOpenDynamic, #adLockOptimistic);

fields = rs.fields();
field = fields.itemName('con');
data.loadFile('some_File_Name.doc');

s = binData::dataToString(data.getData());
com = field.Field();// метод field() дописан мной - возвращает COM поля

com.appendChunk(s); // все пробовал - понимает только str
rs.recordSet().Update();
rs.close();

con.close();
}
- работает быстро но есть такие проблемы:
1. s получается в 2 раза больше чем размер файла - я так понял что метод
binData::dataToString - каждый байт записывает в виде двух шеснадцатиричных цифр в строку т.е. (int)255 = (hex)FF = (str)"FF"
2. размер записаных данных в поле ещё в 2 раза больше, т.е. если я сохраняю файл размером 500kb то в поле запишется 2MB - и это как бы плохо. (а если файл будет 2МБ и больше )
Как сохранить таким способом или каким-нибудь таким способом файл чтоб размер остался таким же???
но это ещё пол-беды
читаю файл из базы следующим способом (незнаю как по другому)

Х++
{
................
int i,k,t;
COMVariant v = new COMVariant();
binData data = new BinData();
com com;
Array arr;
......................
// цепляюсь к базе, читаю запись
......................
field = fields.itemName('con');
com = field.Field();
total = com.ActualSize(); // в 4 раза больше чем размер исходного файла!
i = 0;
while (i<total)
{

v = com.getChunk(4096);
arr = v.safeArray(); // <--- ВОТ ЗДЕСЯ ОЧЕНЬ ТОРМОЗИТ
t= arr.lastIndex();
for(k = 1;k<= t;k++)
{
j = Arr.value(k);
s = num2char(j);
st+=s;
}
}
}
c = binData::stringToData(st);

data.setData(c);
data.saveFile('somefile.doc');

rs.close();
con.close();
}
так вот читается ОЧЕНЬ долго, т.е. файл размером ~ 900Kb читается примерно 1-3 минуты и вообще считаю такой способ особо корявым, но по другому не получается .

Как можно сделать то что я здесь делаю по другому и чтоб работало быстро

Заранее благодарен за любые советы
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с установкой Axapta 2.5+Oracle 8 Pawlik DAX: Администрирование 3 18.11.2005 10:52
Проблема с axapta comconnector! egoist DAX: Программирование 10 22.09.2005 17:59
Проблема с Debugger'ом в Axapta. Anais DAX: Программирование 14 25.01.2005 11:20
Проблема с основными средствами в Axapta 3 soin DAX: Функционал 21 11.03.2004 14:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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