PDA

Просмотр полной версии : Delphi+SQL


Exile1985
11.04.2008, 12:56
Привет, вообще парни помогите одержать победу над SQL :)

как мне правильно составить SQL запрос, вообщем задача такова:
есть 3 таблицы MS Access,
1-я: Называется SC
Поля
Key1=ключевое поле-счетчик
СК полное наименование = полное наименование компании
СК скоращенное наименование = соответсвенно сокращенное наименование

2-я: наз. TypeSH
поля
Key1 = аналогично пред-щей
Тип страхования = содержит види страх-я

3-я: наз. КВ
поля
Key1 - ....
Страховая компания = тип integer, содержит соответствующий номер записи в таб. SC в соответсвии с ее счетчкиком

Текущий = логическое

переменные SQL: :CK - содержит данные из SCBox.Text

DataModule2.KBQuery.Parameters.ParamByName('CK').V alue:=SCBox.Text;
Где SCBox это DBLookupComboBox указывающий на таблицу SC, поле "СК скоращенное наименование",
что такое DataModule и KBQuery думаю пояснять не нужно.

мне нужно выбрать из таблицы KB поле в котором поле "Страховая компания" будет равно полю "СК скоращенное наименование" из таблциы SC, и в котором поле "Текущий"(в таблице KB) будет равно true.

В SQLQuery пишу следующий запрос:

SELECT *
FROM KB outer
WHERE :CK = (SELECT [СК скоращенное наименование] FROM SC inner
WHERE Key1 LIKE outer.[Страховая компания]) AND Текущий = true;

в теория я думал что должен получить 1 строку, но при переводе QSLQuery в true он ругается что нашел ошибку в предложении FROM

Сразу извиняюсь за такую муть :), SQL использую впервый да и базу пишу в принципе тоже, просто для уменьшения размера базы я вынес повторяющиеся данные в разные таблицы, а в тех таблицах где они используются просто указываю текущий норме(по счетчкику в таблице содержащей нужные данные) записи таким образом у меня например название компании Первая Страховая Компания, бедет только в 1 таблице, а все таблицы и записи в которых указывается эта компания будет только цифра 1 т.к. эта компания идет первой по счету в таблице списка компаний

dos999
11.04.2008, 15:39
что то ты слишком уж сильно намудрил =) со стуктурой БД, или просто я не внимательно читал

исправь запрос на
SELECT * FROM KB o1
WHERE Текущий = true AND :CK =
(SELECT [СК скоращенное наименование] FROM SC
WHERE Key1 = o1.[Страховая компания])
может поможет... если чё пиши сюда