Delphi+SQL

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Exile1985, 11 Apr 2008.

  1. Exile1985

    Exile1985 Elder - Старейшина

    Joined:
    10 Aug 2006
    Messages:
    124
    Likes Received:
    35
    Reputations:
    1
    Привет, вообще парни помогите одержать победу над SQL :)

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

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

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

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

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

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

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

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

    Code:
    SELECT *
    FROM KB outer
    WHERE :CK = (SELECT [СК скоращенное наименование] FROM SC inner
    WHERE Key1 LIKE outer.[Страховая компания]) AND Текущий = true;
    в теория я думал что должен получить 1 строку, но при переводе QSLQuery в true он ругается что нашел ошибку в предложении FROM

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

    dos999 Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    что то ты слишком уж сильно намудрил =) со стуктурой БД, или просто я не внимательно читал

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