|
|
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
Решил полностью перенести логику чтения/записи из/в БД в доп.потоки. С передачей обычных типов проблем нет Код: pascal 1. Как запихать сабж в параметр и/или передать его в основной поток? ================= Док. Win7 Ultim x64/Deb 8.7 i386: FB 3.0.2.32703, диалект 3, SS(win)/SC(Deb), Lazarus 1.9(r.55538); FPC 3.1.1 (r.36290), IBX by -Rik-; IBE 2017.4.19.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 10:56:41 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
Как поток... Который TMemoryStream то есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 11:00:45 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
wadmanКак поток... Который TMemoryStream то есть. вот гад Ты пальцем покажи, не догоняю .. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 11:02:02 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
Док, поток - стрим, нить - тред. Такие дела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 11:32:24 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
ДокКак запихать сабж в параметр В старом дельфевом (когда было String=AnsiString) IBX работало ParamByName( 'BLOBFIELD' ).AsString := SBlobData, где SBlobData - любые (можно и бинарные) данные блоб. Может сработать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 12:07:36 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
чччД, т.е. затроллить решили? Ладно-ладно ... YuRockМожет сработать а если там бинарных данных на десяток мегабайт? Я смогу впихнуть невпихуемое в параметр? зы. я-то надеялся, можно указатель какой передать или где. А так придется на буржуйский форум идти :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 12:29:42 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
Док, Блоб-поля можно вводить и выводить через TStream, Например TMemoryStream. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 12:32:30 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
DesWind, ты хоть словами скажи (хотя бы схематично), что-как-где создать сначала, куды запихнуть потом. При этом так, чтобы анимашка крутилась и сообщения юзверю показывала. Я реально че-та затупил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 12:35:45 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
ДокYuRockМожет сработать а если там бинарных данных на десяток мегабайт? Я смогу впихнуть невпихуемое в параметр? зы. я-то надеялся, можно указатель какой передать или где. А так придется на буржуйский форум идти :( десяток мегабайт - это не так уж и много. Вот если на гигабайты счет - тогда плохо. Для этого уже только TBlobField.LoadFromStream. Но, блин, что за база такая ( на FB ), в которую гигабайтами блобы льют - страшно представить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 13:12:03 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
ДокЯ смогу впихнуть невпихуемое в параметр? Зависит от того, сработает ли на твоём IBX такое. У меня работает. На моём отлично работает так: Код: pascal 1. 2. где SBlobData - неюникодный стринг, FInsertCommand - один раз препарированный TIBSQL с инсертом и параметром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 13:15:44 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
Не вижу проблемы вытащить из базы: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Поместить в базу еще проще: Код: pascal 1. далее стандартные операции TDataSet ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 13:36:36 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
ага, спасибо. Ушел думать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 13:44:47 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
В UIB у полей есть такие свойства как AsStream и AsBytes - но не уверен, что он соберется на Лазаре. В любом случае - если речь идет о бооольших блобах, то задержка может быть и на дисковой операции, и на сетевой (БД) Т.е. там нужно в отдельной нити (thread) сделать отдельное соединение с БД, и уже в этом отдельном соединении грузить блоб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 14:39:22 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
schiПоместить в базу еще проще: Код: pascal 1. Да, но в таком варианте много неявных и явных "лишних" операций: - открыть запрос - сделать Append - заполнить поля - сделать Post - перед всем этим оформить InsertSQL правильно... В случае препарированного инсерта ничего этого делать не надо. задал параметр - и Exec, всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 14:57:24 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
1. Каждый коннект должен быть в своем Thread, и это правильно. 2. Вроде у TField должны быть методы LoadFromStream и SaveToStream. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 15:14:37 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
Чтение Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Запись Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Соответственно TIBBlobStream создаешь в потоке, а обмениваешься BlobID (AsQuad). Как это все будет работать в многопотоке - хз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 15:24:06 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
Для датасетов такой способ Код: pascal 1. И потом этот стрим отдаешь в поток. Дисклаймер тот же_Vasilisk_Как это все будет работать в многопотоке - хз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 15:32:30 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Для датасетов такой способТолько не забудь потом вызвать Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 15:33:20 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
YuRockschiПоместить в базу еще проще: Код: pascal 1. Да, но в таком варианте много неявных и явных "лишних" операций: - открыть запрос - сделать Append - заполнить поля - сделать Post - перед всем этим оформить InsertSQL правильно... В случае препарированного инсерта ничего этого делать не надо. задал параметр - и Exec, всё. Виноват, DataSet, которым я пользуюсь, понимает, что запись в поле это задание параметров для запроса вставки/обновления. Аналог TUpdateSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 15:41:28 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, за IBBlobStream спасибо, не знал. Надо будет посмотреть в том форке, который у меня в Лазаре стоит. Проблемы в доп.потоке создать/уничтожить компоненты доступа и коннект нет. Есть проблема обмена блобами между потоками. Пошел шарить по исходникам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 18:37:53 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
Док, что такое "блоб"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 19:34:37 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
schiВиноват, DataSet, которым я пользуюсь Вот в том то и дело. А для insert'а в базу DataSet не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 20:47:59 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
чччДДок, что такое "блоб"? Бинарные данные произвольного размера (форматированный текст, картинки и проч.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 20:55:33 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
ДокчччДДок, что такое "блоб"? Бинарные данные произвольного размера (форматированный текст, картинки и проч.) Ну, загрузи эти данные из базы в память да передай в нить адрес начала блока и его длину. Например, с помощью TMemoryStream. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. И передавай в нить этот самый fMS. Если блок данных очень уж велик, то сохраняй в файл: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... или даже в файл, который будет автоматически удаляться, кода он станет не нужным: Код: pascal 1. 2. 3. 4. 5. ... а то и просто хэндл файла передавай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 22:00:24 |
|
||
|
Lazarus: передача blob, как параметра, внутрь и наружу TThread
|
|||
|---|---|---|---|
|
#18+
YuRockschiВиноват, DataSet, которым я пользуюсь Вот в том то и дело. А для insert'а в базу DataSet не нужен. Может и не нужен, но с ним удобнее. Я не до конца понимаю, о чем дискуссия, правда :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2017, 22:30:25 |
|
||
|
|

start [/forum/topic.php?fid=58&startmsg=39509166&tid=2041886]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 367ms |

| 0 / 0 |
