![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
передача указателя [D5, IB6.x]
matt © (2004-08-21 15:23:00)Доброго времени стуток!
Подскажите как передать указатель через Stored Procedure в UDF?
kaif (2004-08-23 03:16:00) [1]Заноси данные как BLOB, если важна именно скорость занесения.
А потом при чтении данных пусть какая-нибудь UDF уже их разбирает. Это как бы альтернативная идея. Передать указатель не получится. Даже если получится каким-нибудь особенным суперским способом, то и выгрыша никакого я пока не вижу...
Мне как-то попадалась UDF, которая со сносной скоростью разбирала XML-ы, которые в блобах лежали. Можно поискать ее реализацию и сварганить что-то подобное для чтения. А заливать чистые блобы...
jack128 (2004-08-21 17:24:00) [2]не то ты делаешь.. Я думаю в направлении external tables думать надо. Хотя конечно это зависит от того что у тя за данные.
Desdechado (2004-08-21 17:14:00) [3]Даже если клиент и сервер на одной машине, то все равно - у них РАЗНЫЕ адресные пространства. DLL работает в адресном пространстве сервера, а клиент - сам по себе.
-SeM- (2004-08-21 17:09:00) [4]Еще раз [14]
"UDF это декларированная функция" сервера, но не клиента!
matt (2004-08-21 17:00:00) [5]я наверно все таки что то не понимаю - UDF это декларированная функция dll, разве я не могу передать в эту функцию указатель на переменную клиента?
а машина как я уже говорил выше - одна
Desdechado (2004-08-21 16:42:00) [6]В win32 каждая программа (а тем более каждая машина :) работает в своем адресном пространстве. Поэтому адрес AD00F576, указывающий на блок памяти с данными на клиенте в твоей программе, будет в другой программе на этом же клиенте указывать, например, на код какой-нибудь функции, причем в середине. А уж на сервере (машине и процессе) вообще неизвестно что это будет.
matt (2004-08-21 16:32:00) [7]я прошу прощения, вы не могли бы разьяснить?
Desdechado (2004-08-21 16:29:00) [8]вникни в [10], особенно последнюю строку
matt (2004-08-21 16:22:00) [9]хм.. а если udf просто по указателю будет возвращать значения, а Хранимая процедура уже будет заносить?
Desdechado (2004-08-21 16:11:00) [10]точно бред
неужели ты думаешь, что передача с клиента на сервер идет медленнее по тому же протоколу, чем по предлагаемому тобой способу?
да и указатель на память в клиенте НЕ ВАЛИДЕН для сервера...
Sergey_Masloff (2004-08-21 16:06:00) [11]Извини но это бред. Как UDF занесет их в другие таблицы? Открыв отдельный коннект к базе? Это будет ДИКО медленно и ОЧЕНЬ глючно (если вообще всю эту мясорубку удастся раскрутить).
matt (2004-08-21 16:00:00) [12]есть большая структура данных, скорость занесения этих данных в базу крайне критична. Одно из предложений как ускорить занесения -
не передавать их непосредственно из клиента в базу, а передать лишь
указатель на эту структуру, а после чего UDF самостоятельно занесет их в нужные таблицы.
Sergey_Masloff (2004-08-21 15:48:00) [13]matt © (21.08.04 15:43) [6]
>нет, сервер должен получить доступ к адресному пространству >клиента
Не можешь хотя бы вкратце описать как ты себе это представляешь? Типа ReadProcessMemory()?
matt (2004-08-21 15:43:00) [14]нет, сервер должен получить доступ к адресному пространству клиента
Sergey_Masloff (2004-08-21 15:42:00) [15]matt © (21.08.04 15:39) [4]
Да при чем тут локальный - не локальный. Ты клиентский указатель хочешь передать чтобы использовать его в адресном пространстве сервера? Я правильно понял?
matt (2004-08-21 15:39:00) [16]база на локальном хосте, из клиента в базу должен передастся указатель на некую переменную, хранимая процедура передает в UFD которая получив указатель использует по своему усмортрению
Desdechado (2004-08-21 15:36:00) [17]в памяти чего? сервера? а как ты этот указатель получил?
matt (2004-08-21 15:30:00) [18]на область данных в памяти (pointer)
Desdechado (2004-08-21 15:28:00) [19]указатель на что?