Неверный результат запроса

lihach

Запрос выдаёт какую то муть. Сортирует только по одному полю,причём не потому,которому хочу.procedure TFindForm.Button1Click(Sender: TObject);vara:array of string;i:integer;InputStringGrid,InputStringTable,Input:string;beginInputStringGrid:=DBGrid1.SelectedField.Name;delete(InputStringGrid,1,length(DataModule2.FindQuery.Name));for i := 1 to DataModule2.PersonalTable.FieldCount-1 do beginInputStringTable:=dataModule2.PersonalTable.Fields[i].Name; delete(InputStringTable,1,length(DataModule2.PersonalTable.Name));if InputStringGrid=InputStringTable then begin Input:=dataModule2.PersonalTable.Fields[i].DisplayLabel; DataModule2.FindQuery.Parameters.ParamByName('b').Value:=Input; DataModule2.FindQuery.Active:=false; DataModule2.FindQuery.SQL.Clear; DataModule2.FindQuery.SQL.Add('select *'); DataModule2.FindQuery.SQL.Add('from Сотрудники'); DataModule2.FindQuery.SQL.Add('order by :b '); dataModule2.FindQuery.Active:=true; end;end;end;сортирует только по одному полю,так точнее.
24 ответа

lihach

ну что бедному делать если ты задал сортировку по одному полю
DataModule2.FindQuery.SQL.Add('order by :b ');
----www.hramin.jino-net.ru


lihach

Это еще какие параметры для метаданных--http://www.podgoretsky.com


lihach

и ешё пользуйся кнопкой SRC для кода...----www.hramin.jino-net.ru


lihach

Код перед запросом вытягивает имя текущего выделенного столбца. Проверяю,вытягивает. Так по нему не сортирует. Только по 2 полю в таблице.


lihach

DataModule2.FindQuery.Parameters.ParamByName('b').Value:=Input;
DataModule2.FindQuery.Active:=false;
DataModule2.FindQuery.SQL.Clear;
<i>//всё, после этого ваш параметр уже умер</i>
DataModule2.FindQuery.SQL.Add('select *');
DataModule2.FindQuery.SQL.Add('from Сотрудники');
DataModule2.FindQuery.SQL.Add('order by :b ');
<i>//а тут параметр :b ещё не определён</i>
dataModule2.FindQuery.Active:=true;
Должно быть так
DataModule2.FindQuery.Active:=false;
DataModule2.FindQuery.SQL.Clear;
DataModule2.FindQuery.SQL.Add('select *');
DataModule2.FindQuery.SQL.Add('from Сотрудники');
DataModule2.FindQuery.SQL.Add('order by :b ');
DataModule2.FindQuery.Prepare;
DataModule2.FindQuery.Parameters.ParamByName('b').Value:=Input;
dataModule2.FindQuery.Active:=true;


lihach

Результат тот же


lihach

Да в принципе запрос ничего не возвращает.Всё как было так и остаётся.Если писать запрос не с параметром,то всё отлично.Тут может возникнуть мысль,что параметр я не так ищу,но уже пробовал через ввод в просто Edit. всё равно параметр не передаётся.


lihach

ухх ты я не видел там :b а кто вам советовал использовать параметры в метаданных? нелзя----www.hramin.jino-net.ru


lihach

Сортировать то больше никак....


lihach

Да и как что нибудь искать или сортировать по текущему столбцу без метаданных? Как в таком случае быть то?


lihach

Сортировать то больше никак....
order by 1 (или 2,3,4,... - какое надо)


lihach

почему никак?а чем не устраивает
DataModule2.FindQuery.SQL.Add('select *');
DataModule2.FindQuery.SQL.Add('from Сотрудники');
DataModule2.FindQuery.SQL.Add('order by nujniyField ');
----www.hramin.jino-net.ru


lihach

Сортировать то больше никак....
Это почему никак? Нормально сортируется без параметров.


lihach

В вашем случае, видимо, как-то так (если Input- это имя поля, по которому надо сортировать):...DataModule2.FindQuery.SQL.Add('order by '+Input);...ЗЫ. В некоторых компонентах (например, DOA), есть возможность использовать substitution variables.


lihach

Сортировать надо по столбцу в котором стоит выделение. А не по заранее заданному. DataModule2.FindQuery.SQL.Add('order by '+Input); - это не подойдёт...сразу ошибка.


lihach

Сортировать надо по столбцу в котором стоит выделение. А не по заранее заданному. DataModule2.FindQuery.SQL.Add('order by '+Input); - это не подойдёт...сразу ошибка.
Как раз таки это и подойдет. А какая ошибка?


lihach

Ошибка синтаксиса в строе ORDER BY....


lihach

Нашёл косяк в месте определения названия поля. Исправлю сейчас,может будет всё хорошо


lihach

ЗЫ. В некоторых компонентах (например, DOA), есть возможность использовать substitution variables.
Все наследники TDataset это поддерживают, через функцию Format


lihach

Сортировать надо по столбцу в котором стоит выделение. А не по заранее заданному. DataModule2.FindQuery.SQL.Add('order by '+Input); - это не подойдёт...сразу ошибка.
Страшные вещи рассказываешь.


lihach

Почему то так и думал.Input какого типа? inttostr не поможет?


lihach

Исправил поиск имени поля.Всё равно никакого результата. Странное дело..А почему страшные вещи?


lihach

DataModule2.FindQuery.SQL.Add('order by '+Input);
вполне правильный вариант... покажы что ты натворил...----www.hramin.jino-net.ru


lihach

procedure TFindForm.SpeedButton1Click(Sender: TObject);vara:array of string;i:integer;InputStringGrid,InputStringTable,Input:string;beginInputStringGrid:=DBGrid1.SelectedField.Name;delete(InputStringGrid,1,length(DataModule2.FindQuery.Name));for i := 1 to DataModule2.PersonalTable.FieldCount-1 do beginInputStringTable:=dataModule2.PersonalTable.Fields[i].Name; delete(InputStringTable,1,length(DataModule2.PersonalTable.Name));if InputStringGrid=InputStringTable then begin DataModule2.FindQuery.Active:=false; Input:=InputStringGrid; label1.Caption:=Input; DataModule2.FindQuery.Parameters.ParamByName('b').Value:=Input; DataModule2.FindQuery.SQL.Clear; DataModule2.FindQuery.SQL.Add('select *'); DataModule2.FindQuery.SQL.Add('from Сотрудники'); DataModule2.FindQuery.SQL.Add('order by :b'); dataModule2.FindQuery.Active:=true;end;end;end;теперь даже через Label проверял имя...всё одно.Почему то параметр не передаётся. Так может объясните почему для метаданных нельзя делать так? Или будете продолжать стебаться?