Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.06.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
4-65282
Darlok
2002-04-16 17:49
2002.06.20
Запуск программы от имени другого пользователя


1-65058
Mateus
2002-06-10 08:09
2002.06.20
Каким образом можно запустить отладку COM+ приложения?


1-65142
AL2002
2002-06-07 13:34
2002.06.20
RichEdit. Можно ли перетащить содержимое из этого элемента?


3-64937
dens
2002-05-27 13:02
2002.06.20
Table1.Filter= *mmm* не работает.


3-64961
victo73
2002-05-27 01:33
2002.06.20
Как вставить запись в середину таблицы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский