powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Кто и как работает с Blob-ами
22 сообщений из 22, страница 1 из 1
Кто и как работает с Blob-ами
    #32858513
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую всех!!!

Вот недавно соорудил хранение файлов в БД. Кроме ожидаемых преимуществ, оказалось, что при закачке Blob'а полностью грузится процессор а также сама закачка идет очень медленно. Похоже это связано со способом загрузки в PB (по 32 к).

Поведайте, как можно это ускорить. Или кто и как работает с blob'а ми большого размера.

ЗЫ Всех с Наступившим!!!
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32858516
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совсем позабыл про правила форума: PB 9, ASA 9.
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32858531
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую еще подумать о прямой закачке файлов из самой ASA - через системную процедуру "xp_read_file". Типа того:
Код: plaintext
1.
INSERT INTO Table1 (Blob_Field)
VALUES(xp_read_file('C:\FileName.Ext'));
То же можно написать и для UPDATE. Работает очень быстро, единственный вопрос, который остается решить - это обеспечить передачу и выкладывание файлов на сам сервер, чтобы он их мог брать.
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32858558
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSРекомендую еще подумать о прямой закачке файлов из самой ASA - через системную процедуру "xp_read_file". Типа того:
Код: plaintext
1.
INSERT INTO Table1 (Blob_Field)
VALUES(xp_read_file('C:\FileName.Ext'));
То же можно написать и для UPDATE. Работает очень быстро, единственный вопрос, который остается решить - это обеспечить передачу и выкладывание файлов на сам сервер, чтобы он их мог брать.Кстати а как узнать, номер (ID) последней (только что внесенной) записи в БД?
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32858570
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SELECT @@IDENTITY;
причем эта глобальная переменная имеет область видимости и можно небояться, что вставка записей в таблицу с инкремент-полем в триггере ее нам испортит.
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32858613
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Код: plaintext
SELECT @@IDENTITY;
причем эта глобальная переменная имеет область видимости и можно небояться, что вставка записей в таблицу с инкремент-полем в триггере ее нам испортит.Наверное я неправильно выразился. Попробую еще раз: можно ли узнать ID только что введенной записи, не задавая явно его при INSERT'е?
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32858633
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь идет про автоинкремент-поле, то именно способ узнавания присвоенного значения я чуть выше и указал.
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32858744
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSЕсли речь идет про автоинкремент-поле, то именно способ узнавания присвоенного значения я чуть выше и указал.Извиняюсь, туплю а как выполнить запрос из PB?
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA;
PREPARE SQLSA FROM "SELECT @@IDENTITY;";
OPEN DYNAMIC my_cursor;
FETCH my_cursor INTO :ProgID;
CLOSE my_cursor;
Выдеат кривизну (всегда 2) .

Select "@@IDENTITY"
Into :ProgID;
Ошибка синтаксиса.
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32858870
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сталкивался с тем что крайне медленно работает BlobMid.
Чтобы не нарезать по 32k - не надо использовать встроеные FileRead/FileWrite,
а подключить аналогичные функции WinAPI.
У меня под рукой сейчас примера нет - если найду - закину.

Возможно что в последних версиях вместо 16битных встроенные функции FileWrite/FileRead используют нормальные 32битные функции OS - т.е. лимит в 32k уже не актуален.
Насколько я помню в CaseExpress был такой запрос.
Кто-нть может опровергнуть/подтвердить?
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32858884
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейЯ сталкивался с тем что крайне медленно работает BlobMid.
Чтобы не нарезать по 32k - не надо использовать встроеные FileRead/FileWrite,
а подключить аналогичные функции WinAPI.
У меня под рукой сейчас примера нет - если найду - закину.

Возможно что в последних версиях вместо 16битных встроенные функции FileWrite/FileRead используют нормальные 32битные функции OS - т.е. лимит в 32k уже не актуален.
Насколько я помню в CaseExpress был такой запрос.
Кто-нть может опровергнуть/подтвердить?Народ, а где можно найти список функция WinAPI и их синтаксиса/применения?
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32858945
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAНарод, а где можно найти список функция WinAPI и их синтаксиса/применения? MSDN разумеется :-)

Поиск тоже помогает.

И FAQ никто не отменял.
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32858955
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDA ASCRUSЕсли речь идет про автоинкремент-поле, то именно способ узнавания присвоенного значения я чуть выше и указал.Извиняюсь, туплю а как выполнить запрос из PB?
....
Select "@@IDENTITY"
Into :ProgID;
Ошибка синтаксиса.

Думаю, что
Select "@@IDENTITY"
Into :ProgID
From Dummy;
решит твою проблему :) Если конечно дело в том, что ПБ считает, что поле Фром обязано быть в запросе...
Хотя - может я и не прав. Но попробовать негде - так что звиняйте, просто совет, куда посмотреть.
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32859107
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoДумаю, что
Select "@@IDENTITY"
Into :ProgID
From Dummy;
решит твою проблему :) Если конечно дело в том, что ПБ считает, что поле Фром обязано быть в запросе...
Хотя - может я и не прав. Но попробовать негде - так что звиняйте, просто совет, куда посмотреть.
Угу, для PB надо писать
Код: plaintext
SELECT @@IDENTITY INTO :ProgID FROM Dummy;
- я просто думал, что VoDA в другом чем то не понял :)
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #32859119
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Кстати для таких дел курсоры писать не надо, лучше пользоваться обычным встроенным SQL.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Кто и как работает с Blob-ами
    #37422732
DDD06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я пытаюсь открыть файл и засунуть содержимое в блоб
ошибок нет но и в блобе пусто

Function Integer _lopen(ref String PathName, Integer ReadWrite) Library "KERNEL32.DLL"
Function Integer _lread(ref Integer FileHandl,blob Buffer,long Bytes) Library "KERNEL32.DLL"
Function Integer _lclose(ref Integer FileHandl) Library "KERNEL32.DLL"


int li_FileNum,li
string ls
blob b
long flen
li=0
ls='C:\TEMP\temp.wmf'
flen = FileLength(ls)

li_FileNum = _lopen(ls,li)
IF li_FileNum <> -1 THEN
_lread(li_FileNum, b,flen)
END IF
_lclose(li_FileNum)

flen=len(b)

Что я не так делаю?
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #37422955
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDD06...Что я не так делаю?
Используйте функции РВ такие как FileReadEx, FileWriteEx, и не мучьтесь.

P.S. Но возможно у Вас ещё РВ5, тогда их у Вас не будет. ;)
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #37422964
DDD06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PB у меня 8.0.1 но FileReadEx к сожалению нет
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #37424260
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDD06я пытаюсь открыть файл и засунуть содержимое в блоб
ошибок нет но и в блобе пусто

Function Integer _lopen(ref String PathName, Integer ReadWrite) Library "KERNEL32.DLL"
Function Integer _lread(ref Integer FileHandl,blob Buffer,long Bytes) Library "KERNEL32.DLL"
Function Integer _lclose(ref Integer FileHandl) Library "KERNEL32.DLL"

Что я не так делаю?
Вы практически все сделали не так.
1) Integer заменить на Long
2) blob Buffer заменить на ref blob Buffer
3) буфер надо выделять нужного размера до вызова ф-и
4) ref Integer FileHandl заменить на long FileHandl
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #37425018
DDD06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,
тоесть так?
Код: plaintext
1.
2.
3.
Function Long _lopen(ref String PathName, Long ReadWrite) Library "KERNEL32.DLL"
Function Long _lread(Long FileHandl,ref blob  Buffer,long Bytes) Library "KERNEL32.DLL"
Function Long _lclose(Long FileHandl) Library "KERNEL32.DLL"

А как выделить буфер?
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #37425026
DDD06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все получилось!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Function Long _lopen(ref String PathName, Long ReadWrite) Library "KERNEL32.DLL"
Function Long _lread(Long FileHandl,ref blob  Buffer,long Bytes) Library "KERNEL32.DLL"
Function Long _lclose(Long FileHandl) Library "KERNEL32.DLL"


blob b
long flen
li= 0 
ls='C:\TEMP\temp.wmf'
flen = FileLength(ls)
b=blob(space(flen))
li_FileNum = _lopen(ls,li)
IF li_FileNum <> - 1  THEN
	_lread(li_FileNum, b,flen)
END IF
_lclose(li_FileNum)

flen=len(b)
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #37425583
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDD06Все получилось!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Function Long _lopen(ref String PathName, Long ReadWrite) Library "KERNEL32.DLL"
Function Long _lread(Long FileHandl,ref blob  Buffer,long Bytes) Library "KERNEL32.DLL"
Function Long _lclose(Long FileHandl) Library "KERNEL32.DLL"


blob b
long flen
li= 0 
ls='C:\TEMP\temp.wmf'
flen = FileLength(ls)
b=blob(space(flen))
li_FileNum = _lopen(ls,li)
IF li_FileNum <> - 1  THEN
	_lread(li_FileNum, b,flen)
END IF
_lclose(li_FileNum)

flen=len(b)


Вроде все правильно.
Учтите только что в PB10 и выше blob(space(flen)) выделит в 2 раза большый буфер.
...
Рейтинг: 0 / 0
Кто и как работает с Blob-ами
    #37425780
DDD06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky, большое спасибо!
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Кто и как работает с Blob-ами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]