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

Вниз

IBDataSet и сбрасывание значений параметров   Найти похожие ветки 

 
Maks Zyuzin ©   (2009-08-23 22:56) [0]

Приветствую, Уважаемые мастера.

После продолжительной работы с компонентами доступа ADO вернулся к связке IBX + FireBird 2.1
И столкнулся с такой проблемой (или не проблемой):
При динамическом изменении IBDataSet.SelectSQL при включенном ParamCheck сбрасываются все значения параметров.
т.е.
IBDataSet1.SelectSQL.Text := " select * from MyTable where MyField = :pMyParam ";
IBDataSet1.ParamByName("pMyParam").value := 1;
IBDataSet1.SelectSQL.Text := IBDataSet1.SelectSQL.Text + " order by 1 ";
// После этой строки значение pMyParam какое угодно кроме 1.

В ADODataSet таких проблем не было, и все значения оставались на месте.

Может, конечно, это просто особенность.
Данная конструкция была удобна при использовании библиотеки EhLib и ее стандартными сортировками.


 
turbouser ©   (2009-08-24 00:03) [1]


> Maks Zyuzin ©   (23.08.09 22:56)  

Ну так ССЗБ.
То, что в адо такого небыло - это косяк в адо (!)


 
Германн ©   (2009-08-24 01:29) [2]

Где-то тут недавно sniknik приводил что-то подобное как пример того как не надо работать с SQL.Text.


 
sniknik ©   (2009-08-24 08:04) [3]

> пример того как не надо работать с SQL.Text.
не путай человека, не с SQL.Text а с SQL.Add т.к. именно он вносит(/вносил в каких то версиях дельфи) запрос частями.
потом речь была исключительно об ADO, про IBX не знаю как он ведет себя при вносе запроса частями, есть у него действия по обработке запроса, и актуально ли это для него.
ну и даже если есть, то тут меняется целый запрос, с правильного на правильный. т.е. и в ADO это было бы нормально.

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

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


 
Anatoly Podgoretsky ©   (2009-08-24 08:49) [4]


> // После этой строки значение pMyParam какое угодно кроме 1.

А какое оно еще может быть, поскольку после смены запроса значение параметра не установлено.


 
sniknik ©   (2009-08-24 09:18) [5]

> А какое оно еще может быть, поскольку после смены запроса значение параметра не установлено.
в ADO коллекция параметров не трогается при смене запроса без реальной необходимости, т.что изменение запроса не меняющее сам параметр оставит его в "живых".
ну, так как он на IBX переходит с ADO это сбивает с толку. хотя это дополнительный сервис, и везде его внедрять никто не обещал. (и в ADO такое поведение не из-за желания добавить удобств, как понимаю, а из-за общей логики получения параметров, они там инфу о типах запрашивают от движка, что делает их добавление слегка тяжеловесным, ну, напряжнее чем просто парсинг и создание объектов на клиенте, поэтому чтобы минимизировать "тяжёлые" действия, их и не делают без необходимости. ИМХО, на самом дело о причинах можно только догадываться...)


 
Maks Zyuzin ©   (2009-08-24 09:47) [6]

Спасибо за ответы.
Привык просто пользоваться связкой EhLib + ADO удобно и быстро настраивать сортировки по столбцам. А здесь видимо придется все обработки руками прописывать.


 
sniknik ©   (2009-08-24 09:53) [7]

> Привык просто пользоваться связкой EhLib + ADO удобно и быстро настраивать сортировки по столбцам.
ADO и само умеет сортировать локальный рекордсет, без перезапросов. так как делал ты (показано в [0]) для ADO явная глупость... по привычке.


 
Maks Zyuzin ©   (2009-08-24 10:10) [8]

>sniknik ©   (24.08.09 09:53) [7]
То что было в 1 - был один из примеров и использовалось при фильтрации и первом запуске формы (когда из файла настройки загружалась информация о порядке, ширине, видимости и порядке сортировки столбцов)

Вообще. просто у меня фильтры на основные таблицы вынесены в отдельные формы с галочками, где пользователь отмечает поля, которые ему нужно фильтровать и потом итоговый запрос строится примерно следующим способом:


ADODataSet1.CommandText := " select * from MyTable ";

if FilterForm.Filter1CheckBoxChecked then
begin
     ADODataSet1.CommandText := ADODataSet1.CommandText + " where MyField1 = :pMyParam1 ";
     ADODataSet1.Params.ParamByName("pMyParam1").value := 1;
end;
//подобные конструкции повторяются по всем полям фильтрации
...
// А в конце идет занесение порядков сортировок
    if ActListDBGridEh.SortMarkedColumns.Count > 0 then
    begin
           // добавление в конец запроса Order by
    end;


 
sniknik ©   (2009-08-24 19:05) [9]

> Вообще. просто у меня фильтры на основные таблицы вынесены в отдельные формы с галочками ...
да неважно где, как и почему ты делаешь, речь о другом, о цели ради которой ты это делаешь...  
т.е. если бы эти фильтры были ради запроса новых данных из базы по изменившимся критериям, это было бы нормально.
но ты то делаешь(/делал) пере-запрос, "напрягаешь" базу просто ради пересортировки по другому полю, что ADO ЭЛЕМЕНТАРНО делает и на клиенте. цель у тебя не та. вот это то и есть глупость (мало того что "напрягается" сервер, так еще и логика страдает, кликает например юзер на заголовок, отсортировать по нему имеющиеся 3-и записи, раз а там уже 10-ть... неправильно это, сортировка это сортировка отбор это отбор, и даже если в отборе имеется возможность сортировать отбираемое, все равно не стоит их смешивать).

> /делал
сейчас как понимаю уже выбора нет, IBX так не умеет (? кстати вопрос), а самостоятельная реализация (например через клиентский рекордсет) гораздо проблематичнее, чем разные мелкие накладки, или излишний напряг базы.


 
Maks Zyuzin ©   (2009-08-24 20:48) [10]

>sniknik ©   (24.08.09 19:05) [9]
Я понял твой посыл. Дело в том что ты не совсем меня понял. все эти рассуждения велись к тому что IBDataSet не умеет локальную сортировку делать и по этому приходится делать ее на сервере. 99% таблиц в приложении отфильтрованы по каким то параметрам, по этому во всех запросах есть параметры, вот с ними и возникла проблема.
А фильтрациях вроде Maks Zyuzin ©   (24.08.09 10:10) [8] сортировка в конце добавлена как бонус, дабы лишний раз после выборки не пересортировывать датасет на клиенте. все сортировки делались только локально (в ADO).

>сейчас как понимаю уже выбора нет
Да нет. выбор то как раз есть. вот я и выбираю. Приложение только начинаю разрабатывать... и уже думаю не пойти ли мне к Firebird-у через ADO

Кстати условия задачи очень щадящие для сервера. в основную рабочую таблицу будет добавляться максимум 50-100 записей в день. и они же будут изменяться.


 
Виталий Панасенко(дом)   (2009-08-24 22:05) [11]

FIBPlus? там есть опция "Сохранять сортировку"... т.е. кеш ФИБов сортируется.. правда, не бесплатные(но и не дорогие, по карману практически любому :-) ).. но 100% поддерживают (и по кличу компании, будут поддерживать) все фишки ФБ..


 
turbouser ©   (2009-08-24 22:21) [12]


> sniknik ©   (24.08.09 09:18) [5]


> в ADO коллекция параметров не трогается при смене запроса
> без реальной необходимости,

Сам факт изменения текста запроса - уже реальная необходимость.


 
Maks Zyuzin ©   (2009-08-25 16:57) [13]

>Виталий Панасенко(дом)   (24.08.09 22:05) [11]
С ними не работал, и они, как вы верно заметили, платные, а это проблема.


 
Виталий Панасенко(дом)   (2009-08-25 19:49) [14]

http://www.devrace.com/ru/fibplus/.. цены реально доступные...обновление лицензии - 50%



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

Форум: "Базы";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
15-1285524433
TUser
2010-09-26 22:07
2011.01.09
Не все ж на семинары эмберкадеро ходить :)


11-1227534671
Валера
2008-11-24 16:51
2011.01.09
Не могу найти подходящий компонент


15-1285360161
Юрий
2010-09-25 00:29
2011.01.09
С днем рождения ! 25 сентября 2010 суббота


15-1285391446
ForumReader
2010-09-25 09:10
2011.01.09
Хочу предложить сервис платных ответов на срочные/сложные вопросы


15-1285344289
Дмитрий Тимохов
2010-09-24 20:04
2011.01.09
Посоветуйте какой Windows Server ставить.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский