Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DBLookupComboBox программное позиционирование? [D5, DBLookupComboBox]


Matvey ©   (2002-10-28 21:18:00) 

Господа подскажите если знаете как програмно спозиционировать в DBLookupComboBox "указатель" у этого компонента к сожалению нет, да и не может быть свойства Items, а при заполнении его списком из БД он не позиуионируется, т.е. пользователь должен в любом соучае торкнуть мышой и начать выбор. К сожалению например Query1.First; ни к чему не приводят, ни каких свойст типа Select или MoveBy у DBLookupComboBox нет. Как это cделать???

Да и еще в догонку долго мучился как передать в запрос переменную типа String, пришел к выводу что делается это так

str:="WHERE TrackNumber=1" ;
Query1.sql.Add("SELECT * FROM Tracks "+str+"");

например, но в литературе натыкался на конструкцию типа WHERE=:qqq, где qqq - пременная типа string.
_______________________________________________
Проясните с синтаксисом пожалуста, кде и сколько кавычек ставить и знаков + ?


Matvey   (2002-10-29 22:21:00) [1]

Всем спасибо я все понял :)


ЮЮ   (2002-10-29 10:32:00) [2]

>препарирование будет сделано неявно в случае его неуказания...
А я о том, что каждый раз, при изменении текста запроса


Johnmen   (2002-10-29 10:22:00) [3]

>ЮЮ © (29.10.02 10:04)

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


ЮЮ   (2002-10-29 10:04:00) [4]

Johnmen © (29.10.02 09:46)
>Ну и что такого ?

Ну и ничего :-) Если это запрос для отображение Master-Detail, то, естественно, нужен "персональный" параметрический запрос, с выполненным Prepare. Если же это используется, например, для выборки по запросу пользователя, то текст запроса можно (и нужно)формировать динамически. Вот и всё :-)


Victor_Cr   (2002-10-29 09:59:00) [5]

Для позиционирования я использую закладки:


procedure TLimitPower.FormShow(Sender: TObject);
var
BM: TBookmarkStr;
begin
qDate.Active := True;
// первоначальное заполнение dcbDate
while not qDate.Eof do
begin
if /запись надо отобразить первой/ then
BM := qDate.Bookmark;
dcbDate.Items.Append(qDateNM.AsString);
qDate.Next;
end;
qDate.Bookmark := BM;
end;

где qDate - TQuery
dcbDate - TDBScrollCombo связаный с qDate


Johnmen   (2002-10-29 09:46:00) [6]

>ЮЮ © (29.10.02 09:37)

2) Безусловно, параметрический запрос предпочтительней...

>Вариант с изменением текста запроса Query1.sql.Add("SELECT *
>FROM Tracks "+str+""); вынуждает снова и снова компилировать
>запрос.

Ну и что такого ?



ЮЮ   (2002-10-29 09:37:00) [7]

1) Если DBLookupComboBox связан с полем НД (заполнены DataField и DataSource), то, естественно, надо первоначально установить какое-либо значение для этого поля, тогда оно и отразится.
Если же он не связан с полем НД, а используется только для выбора записей из ListSourсе, то тогда устанавливать значение KeyValue.
Сам предпочитаю RxDBLookupCombo, т.к. кроме позиционирования по KeyValue позволяет позиционироваться по Value b DisplayValue. Более того,там полезней интерфейс при автоинкрементном поиске по вводимым символам, особенно для пользователей, которые не могут "строчить" по клаве, как из пулемёта :-)

2)Конструкция WHERE=:qqq позволяет создавать параметрические запросы, что даёт значительный выигрыш при многократном использованнии (см.Prepere). Но изменять значение надо через Params. Вариант с изменением текста запроса Query1.sql.Add("SELECT * FROM Tracks "+str+""); вынуждает снова и снова компилировать запрос.


Наверх

Титульная страница Поиск, карта сайта Написать письмо