powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / MSSQL и другие & клиентские курсоры
68 сообщений из 68, показаны все 3 страниц
MSSQL и другие & клиентские курсоры
    #33959416
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Интересует такой вопрос. До того как не начал работать с MS SQL 2000 (до этого были ASE 11.9.2, Interbase 6 (Firebird) и Oracle 8 и 9), вопроса даже не возникало.
Есть приложение, подключенное в БД. И нужно в этом приложении открыть два (или более) запросов, например по 100-1000 записей, но на клиенте нужно записей по 10 из каждого. В MS SQL (не используя серверные курсоры) на каждый запрос дублируется подключение, что не есть хорошо. Соответственно попытка начать транзакцию вызавает ошибку что-то про Capacity.В MS SQL 2005 вроде есть MARS, но по умолчанию не включен, да и от самого 2005 впечатление просто от установки и запуска ужасное.
Собственно вопрос - прав ли я, утверждая, что ни в одном из других серверов (Sybase, Oracle) такой проблемы нет даже теоретически ?
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33959975
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КВ MS SQL (не используя серверные курсоры) на каждый запрос дублируется подключение, что не есть хорошо.
Возможность иметь пул сединений - заслуга MS, а то, что "на каждый запрос" действительно "дублируется подключение" - ваша.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33960090
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я чё-то обоих не могу понять...Зачем дублировать? В чем заслуга?
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33960289
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperА я чё-то обоих не могу понять...Зачем дублировать? В чем заслуга?Многие афтары ухитряются написать вопрос таким образом, что каждый понимает (или не понимает) их по-своему. Нечему удивляться 8)
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961307
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Попробую сформулировать вопрос немного по-другому. Мне в пргограмма нужно открывать множество клиентских курсоров и не делать Fetch All (просто открыто много окон, в них DBGrid'ы). MS SQL в таком режиме не тянет. Вопрос - спасет ли меня, например, ASA или какой другой сервер ?
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961328
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Признаться, я не уверен в своем понимании термина "клиентский курсор".

Могу сказать так: я делал приложение, в котором в одной сессии работали несколько десятков DBGrid-ов с соответствующими им источниками данных, никаких проблем не было. Oracle+BDE (да, да, я все знаю, но в 99-м году вариантов выбора особо не было).
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961406
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Именно это и есть клиентский курсор - открытый TDataSet. В Oracle этой проблемы нет, ни через BDE, ни через ODAC. С ODAC правда были какие-то другие проблемы, но я их решил и уже забыл.
А сейчас на работе у нас приложение BDE+MSSQL 2000, так вот там ужас - если открыт DBGrid и приложение открывает еще один - первый Fetch'ит все записи.
Но у Oracle и Sybase ASE (там вроде тоже все работает) есть недостаток - они громоздки, для крупных проектов это неважно, но вот для мелких критично. А Firebird - вообще не сервер (убедительная просьба на эту фразу не реагировать и флейм не начинать). Пытаюсь смотреть в сторону Sybase ASA, но скачать 190 мегабайт не могу, поэтому хочу услышать мнение, а потом уже озабочусь доставанием дистрибутива...
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961410
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
softwarerOracle+BDE (да, да, я все знаю, но в 99-м году вариантов выбора особо не было).

Кстати, если сравнивать BDE и ADO, то BDE мне нравится больше. В AnyDAC был тест на скорость разных средств доступа - BDE в некоторых тестах быстрее
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961416
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КНо у Oracle и Sybase ASE (там вроде тоже все работает) есть недостаток - они громоздки, для крупных проектов это неважно, но вот для мелких критично.
Немного не понял, в чем конкретно заключается громоздкость Oracle?
Не могли бы здесь поподробней объяснить?
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961506
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
В размере проинсталлированного продукта. Просто клиент Oracle 9i если не ошибаюсь, занимает 350 мегабайт. Сервер почти 2 гигабайта. Если программа работает на 2-3 рабочих местах и нет выделенного сервера, то многие пользователи просто не поймут зачем 2 GB.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961515
RENaissance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если для доступа к MSSQL-серверу используется ADO, то пулинг можно отключить.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961549
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
RENaissance
Если для доступа к MSSQL-серверу используется ADO, то пулинг можно отключить.

А что он будет в этом случае делать при открытии второго запроса ? Дофетчивать первый ?

У меня используется старый SDAC
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961564
RENaissance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K
А что он будет в этом случае делать при открытии второго запроса ? Дофетчивать первый ?

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


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961572
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КВ размере проинсталлированного продукта. Просто клиент Oracle 9i если не ошибаюсь, занимает 350 мегабайт. Сервер почти 2 гигабайта. Если программа работает на 2-3 рабочих местах и нет выделенного сервера, то многие пользователи просто не поймут зачем 2 GB.
а чем не устраивает oracle xe - весь сервер 280mb (260 инсталяция) ?
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961597
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Какой-то у Вас (или у меня) неправильный XE. Мой был дистрибутив - 100 с чем-то, а поставился на 1.5 гига. Еще вопрос по теме - где достать Java-машину чтобы утилиты от XE работали под IE 6.0 ?
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961625
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ККакой-то у Вас (или у меня) неправильный XE. Мой был дистрибутив - 100 с чем-то, а поставился на 1.5 гига. Еще вопрос по теме - где достать Java-машину чтобы утилиты от XE работали под IE 6.0 ?
незнаю у кого, но точно не у меня :)
# du -h --max-depth=1 /usr/lib/oracle/xe/app/oracle/
279M /usr/lib/oracle/xe/app/oracle/product
101M /usr/lib/oracle/xe/app/oracle/flash_recovery_area
252K /usr/lib/oracle/xe/app/oracle/doc
248K /usr/lib/oracle/xe/app/oracle/admin
380M /usr/lib/oracle/xe/app/oracle/

java для админ части не нужна в принципе, там чистый html и javascript, как и во взрослых версиях оракла.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961638
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Ой, у меня же Windows ! так вот там из утилит есть только Go to server home page, который открывает IE на Localhost, а там везде апплеты
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961656
casmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASA и BDE - будут небольшие проблемы.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961661
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КОй, у меня же Windows ! так вот там из утилит есть только Go to server home page, который открывает IE на Localhost, а там везде апплеты

да нету там аплетов, это же apex, бывший htmldb хоть под нетваре аплетов там нет. я из под firefox работаю, там что-то помнится не работало из-за javascript но не критичное. попробуй firefox или мазилу, она вообще помоему супортится официально.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961674
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Yo.!!да нету там аплетов

может я не тот Oracle пользовал ? Сколько себя помню (еще с 8-го), все утилиты администрирования (Configuration manager, enterprise manager) там всегда были на java... Попробую сегодня дома еще раз поставить, может мне Firewall лишнее отфильтровал...

casmithASA и BDE - будут небольшие проблемы.
А в чем именно проблемы ? И есть ли сейчас компоненты (лучше бесплатные) для доступа без BDE ?
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961701
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К
может я не тот Oracle пользовал ? Сколько себя помню (еще с 8-го), все утилиты администрирования (Configuration manager, enterprise manager) там всегда были на java... Попробую сегодня дома еще раз поставить, может мне Firewall лишнее отфильтровал...

не знаю тебе видней :) "Go to server home page, который открывает IE на Localhost" похоже на XE, тока порт 8080, java там и не пахнет.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961810
casmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К casmithASA и BDE - будут небольшие проблемы.
А в чем именно проблемы ? И есть ли сейчас компоненты (лучше бесплатные) для доступа без BDE ?Обязательный Fetch после открытия запроса, если мне память не изменяет.
Sybase и MS SQL - они родственники...
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961843
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Родственники, да не совсем. Насколько я знаю, когда MS клонировали Sybase (ASE а не ASA, а ASA был вроде Watcom SQL), был DB-library. В 11 ASE был уже CT-library, который как раз был сделан чтобы держать открытые курсоры, потом если не ошибаюсь его назвали Open Client и ввели его поддержку в ASA. А мелкомягкие только в 2005 сделали MARS - что-то подобное
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33961847
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Во всяком случае в Sybase Adaptive Server Enterprise 11.9.2 (NT, Linux) у нас (Аккорд 5 если кто слышал) могло быть открыто сколько угодно недофетченных запросов через BDE
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33963135
Stas Tristan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как насчет VistaDB? Там есть специальные объекты для DDA-доступа, которые открывают scrollable cursor. Данные в гриде отображаются почти мгновенно после запроса. Есть там и простенький серверок для мультипользовательского доступа
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33963156
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Хотелось бы чтобы были триггеры, процедуры и разрабатывать модель в Power Designer'е...
В общем, придется доставать ASA и смотреть, или вообще заброшу проект
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33963494
Stas Tristan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в VistaDB есть и триггера и процедуры (начиная с 3-й версии - на .NET) и представления и встроенная поддержка шифрования (на уровне базы, таблицы, столбца)
Да че я рассказываю - почитать можно здесь:
http://www.vistadb.com/vistadb3.asp
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33963516
pavelvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кили вообще заброшу проект ИМХО самое верное решение в данном случае :-)
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33963695
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
pavelvp Кили вообще заброшу проект ИМХО самое верное решение в данном случае :-)

Верное, потому что это не коммерческий проект и не для работы - а так, для души. Очередной клон UDE/ПИРС или Тектон Matrix (какая по счету попытка - уже и не вспомню)
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33963835
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, а зачем вообще открывать курсоры на все данные, но тянуть их только часть ? Что мешает просто через запросы порциями подгружать нужное кол-во данных, как это к примеру делается в интернет приложениях, разбивающих данные на страницы ?

--
www.rusug.ru - портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964196
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Пример - необходимо открыть большой справочник (классификатор например). Никакого фильтрующего признака нет - только код и наименование. Используется стандартный компонент Delphi - DBGrid (ну или DXDBGrid, DBGridEh). И что делать ? В обычном, не интернет, приложении, показывать в гриде 20 записей и делать кнопочку "след. страница" - юзер не поймет...
В конце-то концов, для чего придумывать все новые и новые интерфейсы к СУБД (я про Microsoft), если они все равно работают по тупому принципу "отправил запрос - получил все данные - работай дальше" ?

Посмотрел вчера еще раз ASE 11.9 - там все прекрасно. Теперь хочу ASA. Регистрационный код получил, а вот скачать не могу - трафик. У пиратов почему-то только MS SQL, а СВОБОДНО СКАЧИВАЕМЫХ ASA developer edition и Oracle XE нет в принципе. (оказывается он у меня был неправильный, без поддержки русского)
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964217
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то я видел в BOL утверждение что в пределах коннекта может быть
только один безымянный открытый курсор. Из этого я сделал вывод что
поименованных может быть много и побежал дальше. Я был неправ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964273
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К В MS SQL (не используя серверные курсоры) на каждый запрос дублируется подключение, что не есть хорошо.
попробуй заюзать связки TADOConnetion + TADOCommand,TADOTable,TDAOQuery
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964316
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Почитал документацию. Вот что там написано

The client cannot send any other Transact-SQL statements on that connection until the application has either processed all the rows returned by SQL Server or sent SQL Server a request to cancel the rest of the results. No updates can be done on the connection until all the results have been processed; the result sets are read-only.

Серверные курсоры - вроде как выход, но есть у них ограничения, из-за которых использовать их невозможно (Dynamic не поддерживает Bookmarks, а Keyset не видит изменений сделанных вне курсора)
Так что вопрос о MS SQL снимается - он мне не подходит.
Всем спасибо !
А вопрос про ASA пока остается...
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964443
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К...
мдааа...
"хорошему танцору ничего не мешает, а плохому и хирург не поможет" (С) не мое
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964589
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Да нет, просто не хочется выбирать продукт с заведомо существующей проблемой и потом придумывать костыли чтобы ее обходить, если есть другие продукты где такой проблемы нет вообще

Просто удивляет, как такой гигант как Microsoft все эти годы даже не задумывался над тем, что у других есть уже очень давно
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964680
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КДа нет, просто не хочется выбирать продукт с заведомо существующей проблемой и потом придумывать костыли чтобы ее обходить, если есть другие продукты где такой проблемы нет вообще
Просто удивляет, как такой гигант как Microsoft все эти годы даже не задумывался над тем, что у других есть уже очень давно
и как немерянное количество разработчиков пишут продукты на таком кривущем софте с такой грандиозной недоработкой?
просто жуть берет, как же они мучаются, при вытаскивании наборов данных на клиента.
тока осталось этих разработчиков оповестить о том, какая же у них жись тяжелая....
ну или все-таки рассмотреть не совсем приятный вариант, что проблема в hand.sys или brain.dll и кинуться читать доки.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964717
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andy stтока осталось этих разработчиков оповестить о том, какая же у них жись тяжелая....


foxpro умер, но дело его живет
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964739
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
andy stну или все-таки рассмотреть не совсем приятный вариант, что проблема в hand.sys или brain.dll и кинуться читать доки.

Вместо того чтобы наезжать, объяснил бы как с этим жить. Упрощаю задачу - есть MS SQL 2000, Delphi 7, SDAC 3.0. В базе 2 таблицы по 10000 записей с BLOB-полями. Нужно в приложении открыть два окна редактирования этих таблиц, каждое с TDBGrid и без фильтров. Чтобы работало быстро, надежно, красиво. Коненкт к базе должен быть один - по sysprocesses контролируется соблюдение ограничения на количество рабочих мест. Итак, я внимаю Вам, магистр ! :)
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964790
_nicht_schissen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно открыть все 10000 записей - открывай. Сразу. Все. На клиент.
И не говорите, что пользователь будет со всем этим работать. НЕ БУДЕТ. СРАЗУ СО ВСЕМИ. А если будет (интересно, каков процент таких задач, если они вообще есть), то пусть все качается. С блобами.
Блин, сколько раз жевалась эта жвачная масса...
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964812
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Он не будет работать со всем сразу. Например это справочник банков Центробанка. Он нажмет Ctrl-F и будет искать. или просто листать - заранее сказать нельзя, юзеры - существа непредсказуемые. А найдет он свой банк, например 500-м по порядку. Зачем все на клиент ?
Или более реальный пример - реестр документов. Он ему нужен за весь период, надо ему найти документик хитрый, попутно еще несколько посмотреть. А документов-то всего 100000 например, а найдет он его 1300-м. И ?
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964827
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КВместо того чтобы наезжать, объяснил бы как с этим жить. Упрощаю задачу - есть MS SQL 2000, Delphi 7, SDAC 3.0. В базе 2 таблицы по 10000 записей с BLOB-полями. Нужно в приложении открыть два окна редактирования этих таблиц, каждое с TDBGrid и без фильтров. Чтобы работало быстро, надежно, красиво. Коненкт к базе должен быть один - по sysprocesses контролируется соблюдение ограничения на количество рабочих мест.
Упростили дальше некуда. А что, это попробовали и решить задачу не получилось?:
andy_stпопробуй заюзать связки TADOConnetion + TADOCommand,TADOTable,TDAOQuery
Естественно через один модуль данных.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964839
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
А вообще-то изначально был вопрос "могут ли так другие сервера". Вместо этого мне пытаются доказать что мне это не надо... это все равно что я спрошу "как в плеере включить радио" а мне скажут "запиши весь эфир на кассету и слушай"
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964842
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да просто задача никакого отношения к серверу БД не имеет.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964850
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Еще как имеет. От сервера зависит, как он умеет отдавать результаты запросов. Oracle - умеет отдавать от того запроса который скажу. MS - от текущего и новый открыть не даст
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964859
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Чувствую, пора тему закрывать. Еще раз всем спасибо !
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964912
_nicht_schissen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поднять на клиента даже 10000 записей с полями, интересными в плане "визуального" поиска конкретной записи, отсортированного в нужной последовательности для любого сервера из указанных - это просто и быстро. Искать какой-то специализированный для такой задачи - смешно.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964957
К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
К
Гость
Скажу так. мне просто не нравится идея качать весь запрос на клиента. Надеюсь, больше возражений не будет ?
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33964973
_nicht_schissen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КСкажу так. мне просто не нравится идея качать весь запрос на клиента. Надеюсь, больше возражений не будет ?Хозяин - барин. Однако, это даже не вежливо со стороны клиента, спросить у сервера и даже весь ответ не выслушать! :) Как-то не вяжется с идеологией таких систем. :)

Пошел флейм.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33965075
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КСкажу так. мне просто не нравится идея качать весь запрос на клиента. Надеюсь, больше возражений не будет ?
что-то мешает сделать запрос чуть посложнее, добавив условия во where по предварительным критериям, которые задал пользователь?
что-то мешает сделать многоуровневую систему таблиц с раскрытием групп вниз по уровням?
или представляется тока список на 100000 записей на клиента (даже с навороченной отложенной выборкой данных с сервера) и тупой поиск по ctrl+F как единственный способ поиска нужных записей ???
join-ишь таблицы поди тоже на клиенте?
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33965206
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КСкажу так. мне просто не нравится идея качать весь запрос на клиента. Надеюсь, больше возражений не будет ?Заведомо неверно. Запрос должен ограничить набор данных по критериям, для этого и существует язык запросов. Другое дело как результат фетчить, сразу или порциями. Вообще вопрос для ветки Delphi. Там вам объяснят, если надо про асинхронные запросы и про нормальный фетчинг. Кстати нормально работают связки по ADO, а уж по SDAC тем более. СУБД тут не при чем, как уже говорилось.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33969579
Dmitriy Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello К,
"К" <nospam@sql.ru>; wrote:

К> А вообще-то изначально был вопрос "могут ли так другие сервера".
К> Вместо этого мне пытаются доказать что мне это не надо... это все
К> равно что я спрошу "как в плеере включить радио" а мне скажут
К> "запиши весь эфир на кассету и слушай"

Правильная терминология определена еще в ODBC. Сначала открываются
connection, затем на него вешаются statements.
MSSQL - только один statement per connection,
MS Access (если, конечно, ее можно считать сервером) - 256,
Oracle - несколько, точно не знаю.

Мысль о том, что дело не в сервере, а в интерфейсе доступа (ODBC, OCI и
т.п.), не лишена основания. Хотя возможности интерфейса завязаны на сервер.
Как MS не пыжится, выдумавая новые интерфейсы (OLEDB и проч.), но
ограничение, имеющееся при работе с ODBC драйвером, остается и для них.
Видимо, в сервере что-то жестко зашито.
--
Sincerely,
Dmitriy Ivanov


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33970084
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy IvanovMSSQL - только один statement per connection,
MS Access (если, конечно, ее можно считать сервером) - 256,
Oracle - несколько, точно не знаю.
Не знаю, как ведет себя Oracle via ODBC, но думаю так же, как и в других случаях. Количество курсоров, которые могут быть одновременно открыты одной сессией, задается системным параметром open_cursors и относится ко всем видам курсоров (запросы с клиента, явные и неявные курсоры в выполняемых ХП и триггерах, динамическом SQL итд).

Оптимальное значение open_cursors зависит от приложения. В большинстве случаев я полагаю правильным ограничить этот параметр достаточно небольшим значением (20-40); это позволяет вовремя (на этапе разработки) отловить утечки в приложении.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33970484
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy Ivanov
Правильная терминология определена еще в ODBC. Сначала открываются
connection, затем на него вешаются statements.
MSSQL - только один statement per connection ,

Для MS SQL информация не соответствует действительности. Ниже код, который явно содержит более одного statement per connection (если я конечно правильно понял, что Вы имеете ввиду под этим).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
BEGIN TRAN

DECLARE
    @ITEMNO VARCHAR( 24 ) -- код товара
    ,@_ITEMNO VARCHAR( 24 )-- текущая позиция
    ,@D DATETIME -- дата периода
    ,@OPENUM INT -- начальный остаток
    ,@_OPENUM INT -- расчетный остаток для след. периода
    ,@OPENCOST DECIMAL( 18 , 2 )-- начальная стоимость
    ,@_OPENCOST DECIMAL( 18 , 2 )-- расчетная стоимость для след. периода
    ,@INPUTUM INT -- поступление, кол-во
    ,@INPUTCOST DECIMAL( 18 , 2 )-- стоимость поступивщего
    ,@OUTUM INT -- выбытие, кол-во
    ,@OUTCOST DECIMAL( 18 , 2 )-- расчетная себестоимость
    ,@I INT -- номер периода

DECLARE C CURSOR FOR
SELECT TOP  100  PERCENT ITEMNO,PDATE,OH,AMOH,P,AMP,S
FROM INV01 WHERE PDATE >= :StartPeriod
ORDER BY ITEMNO,PDATE

OPEN C

FETCH NEXT FROM C INTO @ITEMNO,@D,@OPENUM,@OPENCOST,@INPUTUM,@INPUTCOST,@OUTUM
SET @_ITEMNO = @ITEMNO
SET @I =  0 
SET @_OPENUM = @OPENUM
SET @_OPENCOST = @OPENCOST

WHILE @@FETCH_STATUS =  0 
BEGIN
SET @OUTCOST =  0 
IF (@_OPENUM + @INPUTUM) >  0 
    SET @OUTCOST = (@_OPENCOST + @INPUTCOST)/(@_OPENUM + @INPUTUM)*@OUTUM

-- Обновление расчетной таблицы
IF @I >  0 
    UPDATE INV01 SET
    OH = @_OPENUM
    ,AMOH = @_OPENCOST
    ,CMS = @OUTCOST
    WHERE ITEMNO = @ITEMNO AND PDATE = @D
ELSE
    UPDATE INV01 SET CMS = @OUTCOST
    WHERE ITEMNO = @ITEMNO AND PDATE = @D
-- Расчет остатков для следующего периода
SET @_OPENUM = @_OPENUM + @INPUTUM - @OUTUM
SET @_OPENCOST = (@_OPENCOST + @INPUTCOST) - @OUTCOST


FETCH NEXT FROM C INTO @ITEMNO,@D,@OPENUM,@OPENCOST,@INPUTUM,@INPUTCOST,@OUTUM
SET @I = @I +  1 

IF @ITEMNO <> @_ITEMNO
BEGIN
        SET @_ITEMNO = @ITEMNO
        SET @I =  0 
        SET @_OPENUM = @OPENUM
        SET @_OPENCOST = @OPENCOST
END -- новая позиция

END -- все позиции обработаны

CLOSE C
DEALLOCATE C

IF @@ERROR <>  0 
ROLLBACK TRAN
ELSE
COMMIT TRAN;
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33970580
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm, и что это демонстрирует?
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33970653
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это демонстрирует то, что в драйверах доступа к MS SQL нет ограничения на statements, о котором сказал Dmitriy Ivanov, ничего больше. Приведенный код не исполняется как ХП на сервере.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33970668
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm
Ниже код, который явно содержит более одного statement per connection
(если я
конечно правильно понял, что Вы имеете ввиду под этим).

Судя по всему - неправильно. Имелось ввиду, конечно не SQL statement
вообще, а открытый недофетченный курсор. Т.е. если бы в Вашем примере
было так:
Код: plaintext
1.
2.
3.
4.
5.
6.
DECLARE CURSOR C...
DECLARE CURSOR D...
OPEN C
OPEN D
FETCH C
FETCH D
было бы гораздо интереснее.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33970695
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий, такое тоже вне сервера MS SQL работает.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33970723
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
-- Курсор Потребности
DECLARE MS CURSOR FOR
select
d.itemid, -- Продукт
d.id, -- Запись BOM
d.trlineid, -- Строка заявки
d.nodelevel, -- уровень вложенности
d.custid,
d.whid,
d.parentid,
d.btype, -- тип накладной
d.margin as margin,
d.pqty, -- число заявок
t.vatprc, -- ндс (тип реализации)
c.postcode
from invtrbom d
inner join org c on c.id = d.custid
inner join invtrline t on t.id = d.trlineid
where
d.batchid = :pBatchId
.....

OPEN MS

FETCH NEXT FROM MS INTO @mitemid,@qty,@lineid,@trlineid,@nodelevel,@custid,@whid,@parentid,@btype,@margin,@pqty,@pvatprc,@postgrp
WHILE @@FETCH_STATUS =  0 
BEGIN

    DECLARE C CURSOR FOR
    select
    d.id, -- складская запись
    d.itemid, -- продукт
    round(d.qty, 3 ) as oh, -- в наличии
    d.price, -- учетная цена
    d.sertnum,
    d.rdate,
    case when isnull(@pvatprc, 0 ) =  18  then @pvatprc else isnull(d.vatprc, 0 ) end as vat
    from ##invtmp d
    where ((d.itemid = @mitemid) or (d.parentid is not null and d.parentid = ...

    OPEN C
....

Иногда приходится выносить такие расчеты на сервер приложений. Правда получается только в MS SQL.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33971055
Dmitriy Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello Dimitry,
"Dimitry Sibiryakov" <nospam@sql.ru>; wrote:

DS> Ниже код, который явно содержит более одного statement per
DS> connection (если я
DS> конечно правильно понял, что Вы имеете ввиду под этим).
DS>
DS>
DS> Судя по всему - неправильно. Имелось ввиду, конечно не SQL
DS> statement вообще, а открытый недофетченный курсор. Т.е. если бы в
DS> Вашем примере было так:
DS>
DS> DECLARE CURSOR C...
DS> DECLARE CURSOR D...
DS> OPEN C
DS> OPEN D
DS> FETCH C
DS> FETCH D
DS>
DS> было бы гораздо интереснее.

Да, именно такое я имел в виду. Просто statement в терминологии ODBC - это
структура для выполнения SQL-предложения, ссылка на которую осуществляется
через указатель (handle). Предложение может быть не обязательно типа DQL,
т.е. SELECT, как для курсора, но и DML (UPDATE, INSERT и т.п.) или DDL
(CREATE ...).

Выражаясь более низко, в MSSQL на один открытый хэндл коннекта может
приходиться не более одного открытого хэндла предложения.
--
Sincerely,
Dmitriy Ivanov


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33972530
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm-- Курсор Потребности
Хм. Может быть, я ошибаюсь, но как мне представляется, тот скрипт, который Вы привели, весь целиком является единственным statement-ом.

Насколько я понимаю, Дмитрий имеет в виду примерно следующее. Фрагмент кода

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  Query1.SQL.Text := 'select * from таблица_на_миллиард_строк' ;
  Query2.SQL.Text := 'select * from другая_таблица_на_миллиард_строк' ;
  Query1.Open ;
  Query2.Open ;
  Query1.Next ;
  Query2.Next ;
  Query1.Next ;
  Query2.Next ;
  Query1.Close ;
  Query2.Close ;
end ;

в случае MSSQL не имеет шанса на быстрое выполнение.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33972568
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer iscrafm-- Курсор Потребности
Хм. Может быть, я ошибаюсь, но как мне представляется, тот скрипт, который Вы привели, весь целиком является единственным statement-ом.

там их несколько на самом деле, это попался первый в точности как Дмитрий описал. Причем такие фишки проходят только с MS SQL, остальные принимают только по одному. Тот примерчик что Вы привели конечно клиентский курсор не потянет. Вернее потянет но не "на_миллиард_строк". Хотя кто его знает что каждый понимает под "statement" :)
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33972574
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer iscrafm-- Курсор Потребности
Хм. Может быть, я ошибаюсь, но как мне представляется, тот скрипт, который Вы привели, весь целиком является единственным statement-ом.

Насколько я понимаю, Дмитрий имеет в виду примерно следующее. Фрагмент кода

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  Query1.SQL.Text := 'select * from таблица_на_миллиард_строк' ;
  Query2.SQL.Text := 'select * from другая_таблица_на_миллиард_строк' ;
  Query1.Open ;
  Query2.Open ;
  Query1.Next ;
  Query2.Next ;
  Query1.Next ;
  Query2.Next ;
  Query1.Close ;
  Query2.Close ;
end ;

в случае MSSQL не имеет шанса на быстрое выполнение.Всё зависит от того, чем являются Query1 и Query2 :
В случае с BDE строка Query2.Open вызовет неявно Query1.FetchAll.
В случае с ADO строка Query2.Open вызовет неявно новый коннект, в котором и будут производится действия с Query2
За остальные компоненты не скажу.

Как уже упоминалось выше, в MSSQL 2005 ввели Multiple Active Result Sets (MARS)
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33972575
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmПричем такие фишки проходят только с MS SQL, остальные принимают только по одномуГм. Вы уверены ? Можно огласить список остальных ? :)
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33972586
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, может я конечно чего-то не понимаю, но мы в этом топике обсуждаем клиентские курсоры, а MARS расширяет возможности серверных. Или мы о разных курсорах общаемся? Клиентский курсор никаких неявных коннектов не создает. Почти уверен в этом, т.к. у нас работает возможность ограничивать количество подключений к СУБД, т.е. сервер приложений держит столько коннектов к БД, сколько ему указано и на это количество выстраивает пул запросов. Думаю что если бы создавались неявные, то они бы блокировались... С серверными курсами да, похоже на действительность. Могу ошибаться :)
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33972590
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm softwarerХм. Может быть, я ошибаюсь, но как мне представляется, тот скрипт, который Вы привели, весь целиком является единственным statement-ом.
там их несколько на самом деле,
Не думаю. Если грубо и на пальцах, Statement - это объект, обладающий свойствами Connection (соединение, к которому относится), Text (собственно текст команды), а также методами Prepare и Execute. То, что Вы написали - это Text одного-единственного statement-а. MSSQL, в отличие допустим от Oracle, умеет воспринимать и выполнять подобные скрипты, но из этого никак не следует, что в этом участвует несколько statement-ов (напомню, statement именно в том смысле, который употребил Дмитрий. В дельфе это понятие представлено различными наследниками TDataSet).

iscrafmТот примерчик что Вы привели конечно клиентский курсор не потянет.
Если так, то Дмитрий видимо прав в своем исходном утверждении. Не знаю как другие, а Oracle такой пример выполнит без малейших проблем. То есть расхождение реально есть, и именно в случае гридов оно "стрельнет" при попытке переноса приложения.
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33972613
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmhvlad, может я конечно чего-то не понимаю, но мы в этом топике обсуждаем клиентские курсорыДа, конечно клиентские

iscrafmа MARS расширяет возможности серверныхКак раз клиентских :)
Во-первых, это из "Features of SQL Native Client",
во-вторых, из вышеупомянутой ссылки
BOLSQL Server 2005 provides support for multiple active result sets (MARS) in applications accessing the Database Engine. In earlier versions of SQL Server, database applications could not maintain multiple active statements on a connection. When using SQL Server default result sets, the application had to process or cancel all result sets from one batch before it could execute any other batch on that connection. SQL Server 2005 introduces a new connection attribute that allows applications to have more than one pending request per connection, and in particular, to have more than one active default result set per connection.

MARS simplifies application design with the following new capabilities:

Applications can have multiple default result sets open and can interleave reading from them.

Applications can execute other statements (for example, INSERT, UPDATE, DELETE, and stored procedure calls) while default result sets are open.

iscrafmИли мы о разных курсорах общаемся? Клиентский курсор никаких неявных коннектов не создает. Почти уверен в этом, т.к. у нас работает возможность ограничивать количество подключений к СУБД, т.е. сервер приложений держит столько коннектов к БД, сколько ему указано и на это количество выстраивает пул запросов. Думаю что если бы создавались неявные, то они бы блокировались... С серверными курсами да, похоже на действительность. Могу ошибаться :)Пул запросов или пул коннектов ? :)
Возможно в вашем сервере приложений просто нет ситуации когда в одном коннекте нужно иметь открытыми более одного клиентского курсора - например вы используете серверные курсоры, или сразу кешируете на клиенте всю выборку
...
Рейтинг: 0 / 0
MSSQL и другие & клиентские курсоры
    #33973076
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПул запросов или пул коннектов ? :)

и пул коннектов и пул запросов, если Вы уж так ставите вопрос.
...
Рейтинг: 0 / 0
68 сообщений из 68, показаны все 3 страниц
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / MSSQL и другие & клиентские курсоры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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