Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.03.2016, 21:12
Alex-25 Alex-25 вне форума
Прохожий
 
Регистрация: 07.03.2016
Сообщения: 5
Версия Delphi: delphi 7
Репутация: 10
По умолчанию Поиск в DbGrid

помогите, пожалуйста, в чем ошибка?

Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Mask, DBCtrls;

type
  TForm3 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm3.BitBtn2Click(Sender: TObject);
begin
  form3.Close;
  Form1.Enabled:=true;
  Form1.Button1.Enabled:=true;
  form1.Button2.Enabled:=true;
  form1.Button3.Enabled:=true;
end;


procedure TForm3.BitBtn1Click(Sender: TObject);
begin
  If not Form1.DBGrid1.DataSource.DataSet.Locate(Form3.ComboBox1.Text,([Form3.Edit1.Text]),[]);
  Then ShowMessage('Поиск не дал результатов :(');
end;

end.

lmikle: Пользуемся тегами.

Последний раз редактировалось lmikle, 08.03.2016 в 05:53.
Ответить с цитированием
  #2  
Старый 08.03.2016, 05:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ошбка - в прокладке.
Ты бы хоть описал что не так работает. На первый взгляд все правильно.
Возможно, надо доп флаги указать, что бы искало по части текста и без учета регистров.
Ответить с цитированием
  #3  
Старый 08.03.2016, 10:59
Alex-25 Alex-25 вне форума
Прохожий
 
Регистрация: 07.03.2016
Сообщения: 5
Версия Delphi: delphi 7
Репутация: 10
По умолчанию Вот такая я хреновая прокладка

При проверке выдает ошибку
[Ошибка] Unit3.pas(44): Ordinal type required

я пробовал прописывать тип, не дало результатов
Ответить с цитированием
  #4  
Старый 08.03.2016, 12:14
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Код:
DataSet.Locate(Form3.ComboBox1.Text,([Form3.Edit1.Text]),[]);
Вы откуда такой синтаксис нашли? Это что? - ([Form3.Edit1.Text])
Видимо было в исходном примере: VarArrayOf([Form3.Edit1.Text])
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 08.03.2016, 12:45
Alex-25 Alex-25 вне форума
Прохожий
 
Регистрация: 07.03.2016
Сообщения: 5
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

нет,у меня dbgrib на форме 1, а окно поиска на форме 3, где есть эдит и комбобокс. задача такова, что в каком из столбцов дбгрида поиск текста в эдите зависит от комбобокса.
а с vararrayof пробовал, не получается, выдает ошибку

[Ошибка] Unit3.pas(44): 'THEN' expected but ';' found
[Ошибка] Unit3.pas(50): Statement expected but end of file found
[Фатальная ошибка] Project1.dpr(7): Could not compile used unit 'Unit3.pas'
Ответить с цитированием
  #6  
Старый 08.03.2016, 12:52
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

В Locate можно передавать несколько значений для поиска и тогда нужно эти значения завернуть в VarArrayOf(). Либо одно значение и тогда это просто строка:
Код:
DataSet.Locate(Form3.ComboBox1.Text,Form3.Edit1.Text,[]);

ПС: А ваши ошибки вообще к синтаксису локейта не имеют никакого отношения.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 08.03.2016, 20:50
Alex-25 Alex-25 вне форума
Прохожий
 
Регистрация: 07.03.2016
Сообщения: 5
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

попробовал и так и этак, результат один и тотже
Изображения
Тип файла: jpg Буфер обмена01.jpg (89.2 Кбайт, 6 просмотров)

Последний раз редактировалось Alex-25, 08.03.2016 в 20:52.
Ответить с цитированием
  #8  
Старый 08.03.2016, 22:23
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Цитата:
Сообщение от Alex-25
попробовал и так и этак, результат один и тотже
Код:
 If not Form1.DBGrid1.DataSource.DataSet.Locate(Form3.ComboBox1.Text,([Form3.Edit1.Text]),[]);
У тебя тут в конце строки знак ;
Убери его
Ответить с цитированием
Этот пользователь сказал Спасибо ApxaHGe1 за это полезное сообщение:
Alex-25 (10.03.2016)
  #9  
Старый 10.03.2016, 18:14
Alex-25 Alex-25 вне форума
Прохожий
 
Регистрация: 07.03.2016
Сообщения: 5
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

в дбгриде (форма1) поля берутся из мдб. в таблице поля называютя "Код товара" и "Наименование товара", а в комбобоксе окна Поиск (форма3) - "По коду" и "По наименованию". как указать правильно в каком поле искать, могу ли я искать по номеру поля через "Columns" ? и где (в какой строке это прописать) ?
это будет примерно так, просьба подсказать

if Form3.ComboBox1.Text='По наименованию'
then Form1.DBGrid1.DataSource.DataSet.Locate(Form1.DBGr id1.Columns[0],VarArrayOf([Form3.Edit1.Text+'%']),[]);

Последний раз редактировалось Alex-25, 10.03.2016 в 20:34.
Ответить с цитированием
  #10  
Старый 10.03.2016, 21:21
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Можно подставить имя поля для поиска по индексу в комбобоксе
Код:
DBGrid1.DataSource.DataSet.Locate(DBGrid1.DataSource.DataSet.Fields[ComboBox1.ItemIndex].FieldName, Edit1.Text,[]);

З.Ы. Ваш код нуждается в оптимизации, поскольку такие длинные конструкции особливо обращение к гридовому поставщику через эту же сетку всегда являлось и является моветоном
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter