MSSQL DELPHI OLE Бинарные данные, изображение #349647


#0 by NOFIRG
в DELPHI через OLE получаю ТаблицуЗначений в которой имеется поле с Изображением представленное как ДвоичныеДанные. Как этот двоичный объект(переменная, поле, незнаю как назвать) можно включить в SQL запрос через ADO чтобы заинсертить в поле типа IMAGE пробывал преобразовывать в поток, который потом передавать как параметр запросу, неполучилось.... Плиз ХЕЛП!
#1 by H A D G E H O G s
var Base64String:String; ....... ....... Base64String:=BaseOle.Base64Строка(СтрокаТЗ.Изображение); Это мы получим ДвоичныеДанные в виде Base64 строки, доступной в Дельфи. Теперь ищем Base64Encode - алгоритм на Дельфи (желательно без строкового цикличного ресайзинга) и пишем сырые данные в TBlobStream. Ну а дальше - ADO. Base64Encode могу скинуть вечером...
#2 by H A D G E H O G s
+ Еще можно попробовать ComSafeArray, но он в восьмерке кривовато реализован, не пробовал...
#3 by NOFIRG
Спасибо попробую. алгоритм нашел, если кому пригодиться то вот function EncodeBase64(Value: String): String; const    Result := b64alphabet[(W shr 18) and $3f] +              b64alphabet[(W shr 12) and $3f] +              b64alphabet[(W shr 06) and $3f] +              b64alphabet[(W shr 00) and $3f];    if n <> 3 then  while Length(Value) > 0 do    for i := 1 to 4 do  if Length(Value) mod 4 <> 0 then Exit;  while Length(Value) > 0 do
#4 by NOFIRG
только думаю не Base64String надо не String а что нить типо WideString
#5 by H A D G E H O G s
Нет. String Хероватый алгоритм
#6 by H A D G E H O G s
Result := Result + Chr Надо типа так Buffer:Pointer; GetMem(Buffer,Length(Value)); PTR(Cardinal(Buffer)+i)^:=Chr(....
#7 by H A D G E H O G s
И еще оптимизируем, ибо вдруг у вас нехилые картинки будут GetMem(Buffer,Round(Length(Value)*0.75)+1);
#8 by NOFIRG
пасиб, но если не сложно всеже скинь весь алгоритм на grifonspb@mail.ru не к спеху..
#9 by H A D G E H O G s
ок
#11 by H A D G E H O G s
Вопрос спросить хочу
#12 by NOFIRG
Все равно не получается.... 1с в таблиц значений которую получаю в делфи Фото это base64Строка(ФотоВДвоичном); Delphi ..... Stream:TMemoryStream; .....      'set @a=(select max(ID)+1 from pList)'+      'insert into pList(ID,Name,FirstName,MidName,Status,WorkPhone,Picture,BirthDate,Company,Post,TabNumber)'+
#13 by NOFIRG
ругается насчет параметра
#14 by MMF
если Picture:=TZ.Получить(i).Фото - бинарные данные, то Stream:=TStringStream.Create(MimeEncodeString(Picture)); try
#15 by H A D G E H O G s
Добавь TMemo на форму и выведи туда текст Picture до декодирования
#16 by MMF
ну дык, йо.
#17 by NOFIRG
Пробывал, там был текст закодированный base64, вроди все норм Ща папробую...
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С