Текущий архив: 2002.06.20;
Скачать: CL | DM;
Вниз
TQuery Найти похожие ветки
← →
lak_b (2002-05-24 18:36) [0]Как можно результаты работы одного TQuery использовать другим TQuery?
← →
TSV (2002-05-24 19:52) [1]Запросы надо грамотно писать. Фактически речь идет от вложенном подзапросе или дополнительных WHERE-условиях и т.п.
← →
MAxiMum (2002-05-24 19:58) [2]А может нужно и другое. Короче, под 1-ый Query ставишь 1-ый DataSource и свойство MasterDataSource ставишь на DataSource первого. Таким образом ты выбираешь только данные из 1-ого запроса, при этом еще получая возможность использовать первый. Если така явозможность не нужна, то используй вложенные запросы и/или where-условия и зависимости join.
← →
lak_b (2002-05-24 23:54) [3]К вопросу об использовании TQuery другим TQuery (lak_b).
Я написал процедуру
// Поиск адреса по показателям ФИО и/или Телефона:
{***}
procedure AddSearchFioAndPhoneOutput (Query: TQuery; Surname, Name, SecondName, Phone: string);
begin
if Phone <> "" then //Если ввели телефон
begin
// Сначала Фильтруем по телефону, потом по фамилии:
Query.Close;
Query.SQL.Clear;
Query.SQL.Add("Select");
Query.SQL.Add("PersonIDField, SurnameField, NameField, SecondNameField, PlaceIDField, PartIDField");
Query.SQL.Add("From Persons");
Query.SQL.Add("where PlaceIdField = (Select PlaceIdField from Phones where PhoneField like :PPP) ");
Query.SQL.Add("and PartIdField = (Select PartIdField from Phones where PhoneField like :PPP) ");
If Surname <> "" then Query.SQL.Add("and SurnameField = :AAA");
If Name <> "" then Query.SQL.Add("and NameField = :BBB");
If SecondName <> "" then Query.SQL.Add("and SecondNameField = :CCC");
Query.ParamByName("PPP").AsString := Phone+"%";
If Surname <> "" then Query.ParamByName("AAA").AsString := Surname;
If Name <> "" then Query.ParamByName("BBB").AsString := Name;
If SecondName <> "" then Query.ParamByName("CCC").AsString := SecondName;
Query.Open;
end
else // Телефона не ввели - фильтруем просто по фамилии
begin
Query.Close;
Query.SQL.Clear;
Query.SQL.Add("Select");
Query.SQL.Add("PersonIDField, SurnameField, NameField, SecondNameField, PlaceIDField, PartIDField");
Query.SQL.Add("From Persons Where ");
If Surname <> "" then //Начало с фамилии
begin
Query.SQL.Add("SurnameField = :AAA");
If Name <> "" then Query.SQL.Add("and NameField = :BBB");
If SecondName <> "" then Query.SQL.Add("and SecondNameField = :CCC");
end
else
begin
If Name <> "" then //Начало с имени
begin
Query.SQL.Add("NameField = :BBB");
If SecondName <> "" then Query.SQL.Add("and SecondNameField = :CCC");
end
else If SecondName <> "" then Query.SQL.Add("SecondNameField = :CCC")
else //Все поля = ""
begin
//Ничего не делаем
end;
end;
If Surname <> "" then Query.ParamByName("AAA").AsString := Surname;
If Name <> "" then Query.ParamByName("BBB").AsString := Name;
If SecondName <> "" then Query.ParamByName("CCC").AsString := SecondName;
if (Surname <> "") or (Name <> "") or (SecondName <> "") then Query.Open
else // В противном случае создаем невыполнимый запрос:
begin
Query.SQL.Add("PersonIDField = -1");
Query.Open;
end;
end;
end;
{***}
Весь прикол в том, что из курсора, возвращаемого Query мне нужно забрать значения двух только полей: PlaceIDField, PartIDField для всех записей для других целей. Использовать текущий курсор не могу, так как значения этих полей в нем повтояются в записях а мне нужен курсор с уникальными записями из этих двух полей. Писать такую же процедуру для другого Query не хочу. Можно ли как-нибудь доступиться другим Query до Курсора первого Query и выбрать оттуда нужную инфу?
Если ты знаешь, как написать грамотный запрос, пожалуйста напиши.
Буду очень признателен.
← →
Fay (2002-05-25 15:23) [4]Странный запрос
Страницы: 1 вся ветка
Текущий архив: 2002.06.20;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.005 c