IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   SQL vs BDE? (https://www.imho.ws/showthread.php?t=35111)

Felan 24.07.2003 17:08

SQL vs BDE?
 
Сделал я вот такой запрос.

А он работать не хочет. Все части по отдельности работают, все вместе нет. В DD тоже работает, а вот в дельфе фиг. Есть у меня такое подозрение, что это ограничение делфи или БДЕ на вложенность, т.е. если самую внутренню часть (которая и нехочет работать ктогда все вместе) поднять на уровень вверх, то все работает.

Вопрос собственно в том, как можно обойти это ограничение, или сделать по другому, или в чем вообще тут проблема?

Способы введения дополнительного кода в приложение не предлогать. Надо решить вопрос либо радикально по другому, либо средствами SQL

SQL_Delete.Add('Select * FROM Sostav_Otdelov');
SQL_Delete.Add('WHERE Sostav_Otdelov.Sos_Code=');
SQL_Delete.Add(' (');
SQL_Delete.Add(' SELECT Sostav_otdelov.Sos_Code');
SQL_Delete.Add(' FROM Sostav_Otdelov');
SQL_Delete.Add(' WHERE (Sostav_otdelov.Sos_Otdel_Code=:CurOtdel)');
SQL_Delete.Add(' And (Sostav_otdelov.Sos_Sotrudnik_Code=:CurSotrudnik)');
SQL_Delete.Add(' And (Sostav_otdelov.Sos_Razryad=:CurRazryad)');
SQL_Delete.Add(' And (Sostav_otdelov.Sos_Stavka_Code=');
SQL_Delete.Add(' (');
SQL_Delete.Add(' SELECT Stavki.S_Code');
SQL_Delete.Add(' FROM Stavki');
SQL_Delete.Add(' WHERE (UPPER(TRIM(Stavki.S_Name))=UPPER(TRIM(:CurStavka)))');
SQL_Delete.Add(' ))');
SQL_Delete.Add(' And (Sostav_otdelov.Sos_Dolgnost_Code=');
SQL_Delete.Add(' (');
SQL_Delete.Add(' SELECT Dolgnosti.D_Code');
SQL_Delete.Add(' FROM Dolgnosti');
SQL_Delete.Add(' WHERE (UPPER(TRIM(Dolgnosti.D_Name))=(UPPER(TRIM(:CurDolgnost)))');
SQL_Delete.Add(' ))');
SQL_Delete.Add(' )');

Flex256 25.07.2003 08:32

я не специалист в программировании (я слесарь ваще-то), но по-моему
запрос составлен не правильно в принципе...
Напиши здесь по паре-тройке строк из каждой таблицы и то, что ты хочешь получить.
После этого ты скорее всего сам поймешь где ошибка.

Felan 25.07.2003 13:48

Цитата:

Как писал Flex256
я не специалист в программировании (я слесарь ваще-то), но по-моему
запрос составлен не правильно в принципе...
Напиши здесь по паре-тройке строк из каждой таблицы и то, что ты хочешь получить.
После этого ты скорее всего сам поймешь где ошибка.

Поясни, что значет в принципе? Как надо делать правильно? Почему же тогда работает в DD???

Вот структура таблиц (заполнение не имеет значения - лень набивать), хотя я и не понимаю, какое это имеет отношение к вопросу.

Таблица - Sotrudniki
Код_сотрудника(So_Code) +
Tабельный_номер(S0_Tabel_Num) I
Имя(So_Name) A25
Инициал_Фамилия(So_Family) A1
Инициал_Отчество(So_Otchestvo) A1

Таблица - Sostav_Otdelov
Код_записи(Sos_Code) +
Код_Отдел(Sos_Otdel_Code) I
Код_Сотрудник(Sos_Sotrudnik_Code) I
Код_Должность(Sos_Dolgnost_Code) I
Код_Ставка(Sos_Stavka_Code) I
Разряд(Sos_Razryad) I

Таблица – Otdely
Код_отдела(O_Code) +
Название(O_Name) A60
Аббревиатура(O_Short_Name) A20

Таблица – Dolgnosti
Код_должности(D_Code) +
Название_должности(D_Name) A40
Аббревиатура(D_Short_Name) A15

Таблица – Stavki
Код_ставки(S_Code) +
Название_ставки(S_Name) A30

Flex256 25.07.2003 16:04

ты не написал, что ты хочешь в результате запроса получить
Но оторвавшись от напильника и тисков (и получив от бригадира по кепке) :) получим

SELECT Sotrudniki.S0_Tabel_Num, Sotrudniki.So_Family, Sotrudniki.So_Otchestvo, Otdely.O_Name, Dolgnosti.D_Name, Stavki.S_Name, Sostav_Otdelov.Sos_Razryad
FROM Sostav_Otdelov, Sotrudniki, Otdely, Dolgnosti, Stavki
WHERE Sostav_Otdelov.Sos_Sotrudnik_Code=Sotrudniki.So_Code
AND Sostav_Otdelov.Sos_Otdel_Code=Otdely.O_Code
AND Sostav_Otdelov.Sos_Dolgnost_Code=Dolgnosti.D_Code
AND Sostav_Otdelov.Sos_Stavka_Code=Stavki.S_Code

Ну или что-то похожее на это... :)
я это не проверял

Felan 28.07.2003 11:37

Цитата:

Как писал Flex256
ты не написал, что ты хочешь в результате запроса получить
-skip-
Ну или что-то похожее на это... :)
я это не проверял

Ага. Точно! Блин, совсем из головы вылетело. Я его тут еще и не правильно приве! :) Я написал тестевый вариант, а должно быть вместо SELECT * должно быть DELETE.

А суть запроса в том, что бы удалить единственную (естественно они там все уникальны, но поднаборы атрибутов могут повторяться) строку из таблицы sostav_otdelov используюя данные, которые были выведены на основе этой строки. Т.е. есть только Код_Сотрудника, Название_отдела, Название_ставки и Разряд.

Вот. Хотя, я думаю что это ограничение BDE...

Flex256 28.07.2003 14:51

ну и где здесь "ограничения bde"?

Felan 29.07.2003 09:38

Цитата:

Как писал Flex256
ну и где здесь "ограничения bde"?
Да фиг его знает. Я же сказал, что мне так кажется. Собственно что бы узнать ответ на этот вопрос я сюда и написал, а ты мне его переадресовываешь...

Flex256 29.07.2003 11:53

Если новый запрос работает - следовательно ограничений нет :)
Такие простейшие запросы не могут наткнуться на ограничения... вооот

Felan 29.07.2003 13:21

Цитата:

Как писал Flex256
Если новый запрос работает - следовательно ограничений нет :)
Такие простейшие запросы не могут наткнуться на ограничения... вооот

Да не такой уж он и простейший... :)

Ну да ладно, все уже работает. Хоть и не твой вариант, но все равно спасибо, за помощь.


Часовой пояс GMT +4, время: 01:23.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.