Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2008, 16:44   #1
sw47
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 18
По умолчанию Поиск данных в БД

Хочу сделать записи в Query-таблице по двум полям одновременно. Первое поле-edit, второе выбирается из выпадающего списка.
Результат выводится в Panel.
Не знаю через что делать. Locate, LookUp или Find. Пока курю методичку.
Помогите.
sw47 вне форума Ответить с цитированием
Старый 07.12.2008, 17:11   #2
sw47
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 18
По умолчанию

procedure TForm3.Button1Click(Sender: TObject);
begin
if not DataModule2.Query1.Locate('Nomer_kn igi;Avtor', VarArrayOf([Edit1.text, Combobox1.text]))
then showmessage ('net');
end;

поиск по полю и комбобоксу по щелку на кнопке без вывода на panel.
не работает. пишет что: "not enough actual parameters"
sw47 вне форума Ответить с цитированием
Старый 07.12.2008, 17:19   #3
Mitriy08
Пользователь
 
Регистрация: 11.07.2008
Сообщений: 91
По умолчанию

Пример из дельфийского хелпа
Код:
with ADOTable1 do
             Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);
Ищем 10 отличий
Mitriy08 вне форума Ответить с цитированием
Старый 07.12.2008, 17:40   #4
sw47
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 18
По умолчанию

Спасибо.
у меня возникла другая проблема. надо сделать сортировку записей в таблице по трем полям. поля выбираются в из радиогрупы.

procedure TForm2.RadioGroup1Click(Sender: TObject);
begin
if radiogroup1.ItemIndex=0 then
DataModule2.Table1.indexfieldnames: ='Avtor';

if radiogroup1.ItemIndex=1 then
datamodule2.table1.indexfieldnames: ='Nazvanie_knigi';

if radiogroup1.ItemIndex=2 then
datamodule2.table1.indexfieldnames: ='Izdatelstvo';
end;

выдает ошибку: Table1: No index for fields'Avtor'
может надо назначить на эти поля secondary indexes в Database desctope?
sw47 вне форума Ответить с цитированием
Старый 07.12.2008, 17:50   #5
sw47
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Mitriy08 Посмотреть сообщение
Пример из дельфийского хелпа
Код:
with ADOTable1 do
             Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);
Ищем 10 отличий
if not DataModule2.Query1.Locate('Nomer_kn igi;Avtor', VarArrayOf(['Edit1.text', 'Combobox1.text']))
then showmessage ('net');
такая же ошибка. я плохо разбираюсь.
p.s. проблему с сортировкой уже решил

Последний раз редактировалось sw47; 07.12.2008 в 17:54.
sw47 вне форума Ответить с цитированием
Старый 07.12.2008, 17:53   #6
Mitriy08
Пользователь
 
Регистрация: 11.07.2008
Сообщений: 91
По умолчанию

Я бы сделал так:
Код:
 Case radiogroup1.ItemIndex of
   0 : DataModule2.Table1.Sort:='Avtor ASC'; //По возрастанию, Desc - по убыванию
   1 : datamodule2.table1.Sort:='Nazvanie_knigi ASC';
   2:  datamodule2.table1.Sort:='Izdatelstvo ASC';
 else ShowMessage('Чет не понял что ты выбрал.....:)');
End;
Mitriy08 вне форума Ответить с цитированием
Старый 07.12.2008, 17:57   #7
sw47
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Mitriy08 Посмотреть сообщение
Я бы сделал так:
Код:
 Case radiogroup1.ItemIndex of
   0 : DataModule2.Table1.Sort:='Avtor ASC'; //По возрастанию, Desc - по убыванию
   1 : datamodule2.table1.Sort:='Nazvanie_knigi ASC';
   2:  datamodule2.table1.Sort:='Izdatelstvo ASC';
 else ShowMessage('Чет не понял что ты выбрал.....:)');
End;
Спасибо. Я решил проблему создав для каждого поля свой secondary index в DataBasedesktop.
sw47 вне форума Ответить с цитированием
Старый 07.12.2008, 17:59   #8
Mitriy08
Пользователь
 
Регистрация: 11.07.2008
Сообщений: 91
По умолчанию

Цитата:
Сообщение от sw47 Посмотреть сообщение
if not DataModule2.Query1.Locate('Nomer_kn igi;Avtor', VarArrayOf(['Edit1.text', 'Combobox1.text']))
then showmessage ('net');
такая же ошибка. я плохо разбираюсь.
p.s. проблему с сортировкой уже решил
function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean;

TLocateOptions:
loCaseInsensitive Key fields and key values are matched without regard to case.
loPartialKey Key values can include only part of the matching key field value; for example, 'HAM' would match both 'HAMM' and 'HAMMER.'

Если вам этого не надо то можно просто оставить [] - пустое

ps. Учись пользоваться хелпом....
Mitriy08 вне форума Ответить с цитированием
Старый 07.12.2008, 21:35   #9
sw47
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 18
По умолчанию

Я хочу сделать фильтрация одновременно по двум полям. поля dblookupcombobox.
по одному полю вот такой код:

procedure TForm3.Label3Click(Sender: TObject);
begin
if dblookupcombobox2.text <>'' then begin
datamodule2.query1.filter:='Avtor=' ''+dblookupcombobox2.Text+'''';
datamodule2.query1.filtered:=true;
end;

а как сделать сразу по двум?
sw47 вне форума Ответить с цитированием
Старый 07.12.2008, 21:39   #10
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

использовать в фильтре AND
_Engine_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в базе данных St-Dyx Microsoft Office Excel 8 19.10.2008 12:13
Поиск данных aston Microsoft Office Excel 9 04.04.2008 16:30
МАКРОС!ПОИСК ДАННЫХ. HELP! jungo Microsoft Office Excel 8 02.04.2008 10:50
Поиск по базе данных ERASERROR БД в Delphi 4 14.03.2008 16:34