Вопрос № 99860: Уважаемые эксперты, необходима Ваша помощь. У меня возникли две проблемы при работе с базой данных.
Я работаю с MS Access, используя компоненты ADO. В одном из окон программы есть DBGrid, в котором
отображается списки жителей (Фамилия, Имя, ...
Вопрос № 99.860
Уважаемые эксперты, необходима Ваша помощь. У меня возникли две проблемы при работе с базой данных.
Я работаю с MS Access, используя компоненты ADO. В одном из окон программы есть DBGrid, в котором
отображается списки жителей (Фамилия, Имя, Отчество, Населенный пункт, Улица...).
Вот SQL запрос:
SELECT * FROM PersonalTable
WHERE relation=1
ORDER BY name
Собственно, здесь два поля settlement, street, которые являются числовыми, заменил их на lookup- поля.
Проблема №1: Мне необходимо сортировать по ВСЕМ полям, но как сделать сортировку по lookup - полям??
Я уже думал заменить запрос вот таким:
PersonalTable.name, name2, street PersonalTable INNER JOIN StreetTable ON PersonalTable.street=StreetTable.key1 BY StreetTable.name ASC
но INNER объединяет на сколько я знаю ДВЕ таблицы, а мне необходимо включить также и поле населенный пункт, а это уже три таблицы.
Посоветуйте, как избежать данной проблемы, КАК сделать сортировку по lookup - полям или как их избежать?
Проблема №2 также связанная с этими полями. Есть другая таблица, в которой отображаются данные из другого запроса. В зависимости от определенных условий данный запрос может приобретать полностью разный вид.
И там также могут случаться числовые поля, которые нужно заменять значениями из других таблиц. Как
такое сделать? Я пробовал динамически создавать такие поля, но постоянно возникают ошибки. В нете
нашел многих примеров как делать такую замену, но ничего не выходит.
Посоветуйте, что делать. Ожидаю от Вас каких-нибудь размышлений, советов, примеров.
Заранее благодарный за помощь.
Отправлен: 27.08.2007, 16:49
Вопрос задал: Bohdan (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Виктор Пырлик
Здравствуйте, Bohdan!
Не вижу сложностей...
На пример, использовать так:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var s:string;
begin
s := 'ASC';
if DBGrid1.SelectedField.Tag = 0 then
s := 'DESC';
ADOTable1.Sort := Format('%s %s',[Column.Field.DisplayName,s]);
DBGrid1.SelectedField.Tag := not DBGrid1.SelectedField.Tag;
end;
В данном случае, идет сортировка по событию щелчка на заголовке поля (любого) DBGrid1 и запоминается флаг сортировки в свойстве Tag.
по поводу запроса - кто вам сказал про такое ограничение? Пожалуйста, делайте вложения сколько вам угодно (в разумных приделах) для Access:
SELECT t1.name, t2.state, t3.city, t4.zip
FROM t4 INNER JOIN
(
t3 INNER JOIN
(
t2 INNER JOIN t1 ON t2.id = t1.id
)
ON t3.id = t1.id
)
ON t4.id = t1.id;
для MS SQL
SELECT t1.id, t1.state, t2.city, t3.zip, t4.name
FROM t1 INNER JOIN
t2 ON t1.id = t2.id INNER JOIN
t3 ON t1.id = t3.id INNER JOIN
t4 ON t1.id = t4.id
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 27.08.2007, 17:35 Оценка за ответ: 5