Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];

Вниз

Проблема с передачей бинарных данных в DLL   Найти похожие ветки 

 
voronkov   (2003-09-09 12:22) [0]

В поле BLOB Oracle 9.2. я храню файл в формате Excel 2000, это шаблон. На данный момент эта СУБД не имеет встроенных стредств для корректной записи BLOB на диск. Пакет utl_file с его функциями put и put_raw корежит исходные данные, выкидывая оттуда символы перевода каретки. Пришлось написать свою функцию, которой скармливаются куски шаблона, а она их пишет на диск. В dll я могу передать информацию только в формате PChar, это корректно работает, если в передаваемых кусках нет #0, т.е символа завершения строки. Но к сожалению для файлов Excel файлов это не работает. Я просмотрел архивы данного портала и королевства и ответов не нашел. Посоветуйте как правильно принимать строки подобные строки в DLL, чтобы не происходило их обрезки.

Спасибо заранее.


 
mishgan   (2003-09-09 13:15) [1]

>>На данный момент эта СУБД не имеет встроенных стредств для
>>корректной записи BLOB на диск
OCI например
>>Посоветуйте как правильно принимать строки подобные строки в DLL
Зачем вообще в строки? Для этих целей лучше TMemoryStream


 
voronkov   (2003-09-09 13:31) [2]

Для mishgan.

Я не умею работать с OCI, к сожалению. Если есть работающий код на Дельфи с вызовами OCI и без создания соединений с Oracle, то можно посмотреть.

Как я в Oracle на PL/SQL создам MemoryStream и передам в DLL? В Oracle я только могу откусывать по куску от BLOB переменной и ложить эти куски в переменную VARCHAR2, и потом передавать на вход DLL.

Мне надо что-то делать в DLL с параметром PChar, чтобы Дельфи его не обрезало на первом же символе #0.


 
DmS   (2003-09-09 13:37) [3]

а ты пробовал дальше лезть, за #0 символ ?


 
voronkov   (2003-09-09 13:47) [4]

Для Dms.

Вот что я делаю, подскажите как лезть за #0, я потому и спрашиваю, буду очень благодарен.

function fsave (
fl : Double;
data : PChar
) : Double;
begin
FileSeek(Trunc(fl),0,2);
Result := FileWrite(Trunc(fl),data^,Length(data));
end;

Предполагается, что файл уже открыт и надо просто туда записать.


 
DmS   (2003-09-09 13:49) [5]

попробуй сохранять посимвольно ... для этого передавай еще и размер файла, чтобы за границу не вылезть

for i:=0 to fSize-1 do WriteFile(data[i]);


 
DmS   (2003-09-09 13:52) [6]

даже можно проще ...

вместо Length(data) поставь fSize ;)
эта функция выдает длину строки до первого символа #0 - не используй ее. размер данных надо передавать в виде параметра.


 
voronkov   (2003-09-09 14:03) [7]

Для DmS, огромное спасибо, замечание о Length попало в самую точку, строка цела, надо просто правильно определить ее длину, все работает.

Огромное спасибо еще раз.


 
mishgan   (2003-09-09 20:34) [8]

>>..работающий код на Дельфи с вызовами OCI и без создания
>>соединений с Oracle
А что OCI как-то может работать без соединения с Oracle?
Чем плохо соединение с БД?
Я бы сообще для таких целей не стал бы писать extended DLL-ку для сервера, а выгружал все бы через клиентский софт. В нем через TMemoryStream очень удобно все таскается. Чистый OCI не обязательно использовать, есть компоненты DOA, ODAC и т.п. (в т.ч. и бесплатные).
Все же с сервера не очень удобно работать с LOB-данными. Средства PL/SQL и SQL дают здесь не так много возможностей? как OCI



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
3-71495
Abikos
2003-09-01 12:56
2003.09.22
Interbase


14-71869
Nik8.
2003-09-04 12:06
2003.09.22
Кто такой :) ?


1-71621
killer
2003-09-09 13:34
2003.09.22
Как в запущенной программе создать кнопку?


8-71757
llyr
2003-05-27 16:34
2003.09.22
как в mediaplayer проверить существование нужного кодека ?


6-71812
leonidus
2003-07-17 00:43
2003.09.22
Подвисание программы при использовании NMHTTP.GET





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский