Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как составить запрос. 
:(
    Опции темы
Mach3
Дата 6.1.2011, 04:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 26.11.2005

Репутация: нет
Всего: 2



Первый раз работаю с БД, посему.. прошу не пинать.. =))
У меня три таблички: 1- авто, 2- содержит производителей авто, 3- марки машин (сгруппированы через разделитель case)
Для наглядности:
user posted image
Мне необходимо заполнить табличку авто.
Т.е.- выбираю в основной таблице производителя, например Acura (в таблице T_Marka, ей(Acur'е) соответствуют марки под Case2), необходимо, чтобы второе поле осн. таблице заполнилось соответствующими марками..
Что-то в этом духе:
user posted image
Уфф.. Надеюсь правильно изъяснился..
Как правильно составить запрос?
Можно ли это реализовать используя TADOTable?
З.Ы. Наличие связей и схемы данных в БД, как-нибудь влияет на структуру при работе через АДО?
Или все что нужно от бд это таблицы, а связи создаются непосредственно в дельфи?

Спасибо

Это сообщение отредактировал(а) Mach3 - 6.1.2011, 05:11
--------------------
Век живи - век учись...
PM MAIL ICQ   Вверх
Mach3
Дата 6.1.2011, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 26.11.2005

Репутация: нет
Всего: 2



пытаюсь делать так:
Код

procedure TDataModule2.ADOTable1L_proizChange(Sender: TField);
begin
ADOTable2.Filtered:=true;
ADOTable2.Filter:='marka>''case '+ADOtable1A_proiz.AsString+'''';
end;

но это неправильно..

подскажите, как получить значение из одного столбца, если соответствующее значение из другого столбца этой же таблице сравнимо с таким-то значением?
хочу найти значение ключевого столбца для case X и для case X+1, а затем сделат выборку..
--------------------
Век живи - век учись...
PM MAIL ICQ   Вверх
Mach3
Дата 6.1.2011, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 26.11.2005

Репутация: нет
Всего: 2



Код

procedure TDataModule2.ADOTable1L_proizChange(Sender: TField);
var
s,s1,s2 :string;

begin

s1:='';
s2:='';
s:=inttostr(ADOTable3.recno);

adotable2.First;
while adotable2.Eof <> true do begin
if adotable2marka.AsString = 'case '+s then begin
s1:= adotable2num_key.AsString;
end;
if s1>'' then
if adotable2marka.AsString = 'case '+inttostr(strtoint(s)+1) then begin
s2:= adotable2num_key.AsString;
break;
end;
adotable2.Next;
end;

ADOTable2.Filtered:=false;
ADOTable2.Filter:='num_key>' + QuotedStr(s1)+'and'+  'num_key<' + QuotedStr(s2) ; 
ADOTable2.Filtered:=true;
end;


Что-то наваял..
Если в фильтровать так: 
Код

ADOTable2.Filter:='num_key>' + QuotedStr(s1);
то норм, а если с AND.. то несовпадение типов..
--------------------
Век живи - век учись...
PM MAIL ICQ   Вверх
Akella
Дата 8.1.2011, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Mach3 @  6.1.2011,  12:51 Найти цитируемый пост)
QuotedStr(s1)+'and'+

мне кажется, что здесь пробела не хватает перед and

Добавлено через 14 секунд
и после тоже

Добавлено через 55 секунд
Цитата(Mach3 @  6.1.2011,  12:51 Найти цитируемый пост)
ADOTable2.Filter:=

дебагером религия не позволяет посмотреть, что здесь получается?
PM MAIL   Вверх
c00per
Дата 2.2.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.1.2009

Репутация: нет
Всего: нет



Цитата(Mach3 @ 6.1.2011,  04:52)
3- марки машин (сгруппированы через разделитель case)


Абсолютно неверный подход. Если вы и начали извращаться - лучше создайте дополнительное поле в таблице марки, где и будут указаны эти Ваши кейсы.

Таблица Марки:
поле1           поле2             поле3
   1                марка             кейс1
   2                марка             кейс1
   3                марка             кейс2
   4                марка             кейс2
                  ...
И далее делайте запрос:
Код

SELECT T_proiz.proiz, T_marka.marka  FROM T_proiz INNER JOIN (T_marka 
                                                  INNER JOIN T_auto ON T_auto.A_marka=T_marka.num_key) 
                                                                    ON T_auto.A_proiz=T_proiz.num_key
WHERE <условие>


Это сообщение отредактировал(а) c00per - 2.2.2011, 21:20
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1866 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.