|
#1
|
|||
|
|||
Поиск в 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
|
|||
|
|||
Ошбка - в прокладке.
Ты бы хоть описал что не так работает. На первый взгляд все правильно. Возможно, надо доп флаги указать, что бы искало по части текста и без учета регистров. |
#3
|
|||
|
|||
Вот такая я хреновая прокладка
При проверке выдает ошибку
[Ошибка] Unit3.pas(44): Ordinal type required я пробовал прописывать тип, не дало результатов |
#4
|
||||
|
||||
Код:
DataSet.Locate(Form3.ComboBox1.Text,([Form3.Edit1.Text]),[]); Видимо было в исходном примере: VarArrayOf([Form3.Edit1.Text]) Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
нет,у меня 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
|
||||
|
||||
В Locate можно передавать несколько значений для поиска и тогда нужно эти значения завернуть в VarArrayOf(). Либо одно значение и тогда это просто строка:
Код:
DataSet.Locate(Form3.ComboBox1.Text,Form3.Edit1.Text,[]); ПС: А ваши ошибки вообще к синтаксису локейта не имеют никакого отношения. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
попробовал и так и этак, результат один и тотже
Последний раз редактировалось Alex-25, 08.03.2016 в 20:52. |
#8
|
|||
|
|||
Цитата:
Код:
If not Form1.DBGrid1.DataSource.DataSet.Locate(Form3.ComboBox1.Text,([Form3.Edit1.Text]),[]); Убери его |
Этот пользователь сказал Спасибо ApxaHGe1 за это полезное сообщение: | ||
Alex-25 (10.03.2016)
|
#9
|
|||
|
|||
в дбгриде (форма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
|
||||
|
||||
Можно подставить имя поля для поиска по индексу в комбобоксе
Код:
DBGrid1.DataSource.DataSet.Locate(DBGrid1.DataSource.DataSet.Fields[ComboBox1.ItemIndex].FieldName, Edit1.Text,[]); З.Ы. Ваш код нуждается в оптимизации, поскольку такие длинные конструкции особливо обращение к гридовому поставщику через эту же сетку всегда являлось и является моветоном Я не понял Вашего вопроса, но всё же Вам на него отвечу! |