Доброго всем утра (дня, вечера, ночи). Подскажите кто что может:
выгружаю в 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 минуты и вообще считаю такой способ особо корявым, но по другому не получается

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