Форум: "Базы";
Текущий архив: 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.013 c