Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Вниз

Создание SQL запроса   Найти похожие ветки 

 
Наташа   (2002-11-02 17:44) [0]

На этапе разработки приложения я создаю статические поля. В дальнейшем при выполнении SQL запроса выдается сообщение об ошибке, что не может найти ключевое поле. Однако, если прошу выбрать все поля (*), то все находит без проблем. Как быть?


 
MsGuns   (2002-11-02 18:09) [1]

Для начала не мешало бы запрос показать 8))


 
Alexsys   (2002-11-02 18:11) [2]

Нда. Неплохо бы...


 
Наташа   (2002-11-02 18:19) [3]

На это не находит ключевое поле L_N.L_N_Id в таблице L_N
FDM.QList_Nakl.Close;
FDM.QList_Nakl.Sql.Clear;
FDM.QList_Nakl.SQL.Add("Select L_N.L_N_Number, V.V_Name");
FDM.QList_Nakl.SQL.Add("from List_Nakl L_N, Vendor V");
FDM.QList_Nakl.SQL.Add("Where V.V_Id=L_N.L_N_Post_Id");
FDM.QList_Nakl.Open;
На аналогичную при условии выдачи всех полей все нормально
FDM.QList_Nakl.Close;
FDM.QList_Nakl.Sql.Clear;
FDM.QList_Nakl.SQL.Add("Select *");
FDM.QList_Nakl.SQL.Add("from List_Nakl");
FDM.QList_Nakl.Open;


 
Наташа   (2002-11-02 19:12) [4]

может ктонибуть вседаки знает?


 
Ihor Osov'yak   (2002-11-02 19:40) [5]

Ох, Наталко-Наталко...

Во первых, запросы не аналогичные. В первом запросе Вы соединяете
две таблицы List_Nakl L_N и Vendor , во втором - выборка идет только с одной List_Nakl.

Для наглядности напишу Ваши же запросы по человечески:

1. Select L_N.L_N_Number, V.V_Name
from List_Nakl L_N, Vendor V
Where V.V_Id=L_N.L_N_Post_Id

2 Select * from List_Nakl;

Разницу улавливаете? Если нет, почитайте чего то типа "Понимание SQL" Грубера.

Далее. Для продолжения ответа по существу недостаточно предоставленой информации.
Судя по вашей инфо об ошибке (маленький совет - в будущем давайте инфо об платформе DB и точную цитату сообщения), движек не смог отыскать какого-то ключевого поля. Хотя для большинства движков для выполнения связки Where V.V_Id=L_N.L_N_Post_Id
ни V_Id ни L_N_Post_Id не должны быть ключевыми - я во всяком случае таких движков не видел. Другое дело - что для быстродействия их желательно делать ключевымы.
Напрягая всю свою способность к телепатии, могу предложить что вы работаете с очень екстравагантным движком, который для вашей примитивной связки хочет, чтобы поля были проиндексировы, или наложен foregin key, либо ваш движок дает несколько неадекватное сообщение об ошибке (типа нет поля V_Id в Vendor, а он, редиска, чего то там бурмочет об оксутствии ключевого поля, хотя сдесь было бы уместным сообщение об отсутсвии поля вообще).

На этом мои телепатические способности подошли к концу.

ЗЫ. Для продолжения разговора нужно несколько условий:

- приведите инфу о движке и о технологии соединения (bde, odbc,ado, компоненты прямого доступа, етс)
- приведите структуру соотв. таблиц
- помолите Господа Бога (Алаха,Будду, етс) о наличии у меня(или другого желащего продолжить разговор) свободного времени и желания поболтать ....


PS - сорри за опечатки, я вообще - то заобно делел тест на скорость набора текста ...











 
Наташа   (2002-11-02 20:15) [6]

1. Что касается аналогичных запросов, то здесь полностью
согласна.
2.Структура таблиц следующая:
таблица Vendor: V_Id-ключевое поле тип Integer<>0
V_Name- Название тип CHAR(30)
V_Address-Адрес тип CHAR(30)
V_Phone-телефон тип CHAR(15);
таблица List_Vendor: L_N_Id -ключевое поле тип Ingeger<>0
L_N_Number № накладной тип Integer<>0
L_N_Date Дата поставки тип DateStamp
L_N_Post_Id Код поставщика Integer<>0
3.технология соединения bde
4. Что касается "движка", то я несовсем поняла, что именно вы имели в виду. Простите за безграмотность, еще совсем чайник!
5. Привожу в точности сообщение об ошибке:"QList_Nakl:Field L_N_Id Not Found"
Большое спасибо за уделенное внимание!!!




 
Ihor Osov'yak   (2002-11-02 21:07) [7]


Ой, Наташо, Наташо..

1. Ищите книжку по реляционным базам и sql. Тот же Грубер для начала подойдет.

2. Разжую то, что вы написали:

Select L_N.L_N_Number, V.V_Name
from List_Nakl L_N, Vendor V
Where V.V_Id=L_N.L_N_Post_Id

Но сначала - небольшое отступление: под движком на сленге понимается платформа DB, ну парадокс, аксес, интербейс и тд.

Разжевывание:
Ах ты чертов движок, обрати внимание на таблички з названиями
List_Nakl и Vendor, причем учти, что в последующих базарах я вместо имени List_Nakl иногда буду говорить L_N, а вместо Vendor - V

^^^ - выше перевод from List_Nakl L_N, Vendor V

и дай перед мои ясные очи набор из двух колонок, и смотри мне, в первую колонку впихивай с таблички L_N (вспомни, ленивец, что я тебе говорила ранее о L_N и что под этим понимать нужно) поле под именем L_N_Number, ва во вторую - поле V_Name из того, что понимается под V

^^^ Select L_N.L_N_Number, V.V_Name

но смотри мне, негодный, впихывай не все, а только поля из тех записей в табличке обозваной мною как L_N где для записей этих находится пара в табличке V, причем под парой нужно понимать равенство значений поля L_N_Post_Id из L_N полю V_Name из V

^^^ Where V.V_Id=L_N.L_N_Post_Id


И наш движок, услышав такую команду нечто базарит в ответ, что в переводже на могучий можно трактировать так:

Протри глазки, дорогая, где это тебе примерещилась филда с именем V_Id в той штуковине, которую ты понимеш как V, то есть List_Vendor? Ах ты такая-сякая, обиделся я на тебя и ничегно на твой запрос пебе не дам ...




Снова включая свои телепатические возможности, смею предложить,
что может біть два варианта

1. если List_Vendor.L_N_Id есть сурогатный праймери кей, то следует сюда ввести доп поле V_Id, которое собственно будет и связкой к таблице поставщиков. Не лишним будет наложить соотв. форин ки (внешний ключ) ... И сюда будем заносить соотв V_Id поставщиков. Тогда ваш запрос подойдет

2 Вы страдаете излишней оригинальностью в именовании полей и под L_N_Id понимаете то, что живет в поле V_ID от таблицы Vendor. Тогда вам придется сделать в качестве праймери кей для второй таблички комбинацию L_N_Id и L_N_Number (последнее - я понимаю, номер наклкдной?) переписать запрос в виде

Select L_N.L_N_Number, V.V_Name
from List_Nakl L_N, Vendor V
Where V.L_N_Id=L_N.L_N_Post_Id

Зы то поводу 2 - здесь также не помешает форин кей между
V.L_N_Id и L_N.L_N_Post_Id (быстродействие, целосность - читайте книжки), ну и давайте более вразумительные имена полям.
ЗыЗы ко 2 - этот вариант так называемых стороников естественных ключей - после прочтения энной книжки поймете чего это, так мой совет - не делайте так, а юзайте вариант один - так называемые суррогатные ключи (но это уже из розряда религий, хотя в религии суррогатных ключей есть намного больше плюсов, чем минусов)


На сем и откланяюсь ...






Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.014 c
1-69294
Брат
2002-11-12 12:34
2002.11.21
Как сделать обратный отсчет времени?


14-69527
Ate
2002-11-01 18:23
2002.11.21
Каменный эдитор


1-69282
Semion
2002-11-09 08:24
2002.11.21
Чтение и запись в файл


1-69234
LongIsland
2002-11-11 15:15
2002.11.21
Глюки TImage или я криворукий?


1-69339
TTCustomDelphiMaster
2002-11-12 18:31
2002.11.21
ActiveX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский