Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Запрос SQL


Автор: jorka 4.10.2009, 17:41
MS Access, ADO. 
Есть две таблицы(поля):
1)   DType ( Key(число), TypeName(строка))
2)   DName (Key(число), DetailName(строка), DetailType(число))

DType.Key и DName.DetailType связаны 1кМ

Помогите с запросом: выбрать все DetailName из DName так, чтоб они относились к одному типу.
Код

AdoQuery2.SQL.Text:='Select DetailName from DName where DetailType="'+ IntToStr(AdoQuery1.FieldByName('key').asInteger) +'" ';

Набросал код, но при выполнении ошибка "Несоответствие типов данных в выражении условия отбора"

ЗЫ 

AdoQuery1 выглядит так:
Код

AdoQuery1.SQL.Text:='Select * from DType';

Автор: Данкинг 4.10.2009, 18:20
smile 
Код

AdoQuery2.SQL.Text:='Select DetailName from DName where DetailType='+ IntToStr(AdoQuery1.FieldByName('key').asInteger)';


Добавлено через 43 секунды
Цитата(jorka @  4.10.2009,  18:41 Найти цитируемый пост)
AdoQuery1 выглядит так:

А к чему здесь AdoQuery1 ?

Автор: jorka 4.10.2009, 19:08
Цитата(Данкинг @ 4.10.2009,  18:20)
А к чему здесь AdoQuery1 ?

он дает мне список всех названий типов (DType.TypeName)
после чего я делаю While not AdoQuery1.Eof do и заношу в дерево все названия деталей

Автор: Данкинг 4.10.2009, 19:16
Главная проблема-то решена?

Автор: jorka 4.10.2009, 19:31
Цитата(Данкинг @ 4.10.2009,  19:16)
Главная проблема-то решена?

Да, правильный ответ звучи так:
Код

AdoQuery2.SQL.Text:='Select DetailName from DName where DetailType='+ IntToStr(AdoQuery1.FieldByName('key').asInteger) +' ';

Спасибо

Автор: Данкинг 4.10.2009, 19:50
Ну да, у меня последняя кавычка лишняя, и пробела в конце никакого тоже не нужно:
Код

AdoQuery2.SQL.Text:='Select DetailName from DName where DetailType='+ IntToStr(AdoQuery1.FieldByName('key').asInteger);

Если вопрос закрыт - отмечай тему решённой. smile 

ЗЫ: а вообще зачем столько преобразований-то - вот так же проще:
Код

AdoQuery2.SQL.Text:='Select DetailName from DName where DetailType='+AdoQuery1.FieldByName('key').asString;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)