![]() |
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(' )'); |
я не специалист в программировании (я слесарь ваще-то), но по-моему
запрос составлен не правильно в принципе... Напиши здесь по паре-тройке строк из каждой таблицы и то, что ты хочешь получить. После этого ты скорее всего сам поймешь где ошибка. |
Цитата:
Вот структура таблиц (заполнение не имеет значения - лень набивать), хотя я и не понимаю, какое это имеет отношение к вопросу. Таблица - 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 |
ты не написал, что ты хочешь в результате запроса получить
Но оторвавшись от напильника и тисков (и получив от бригадира по кепке) :) получим 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 Ну или что-то похожее на это... :) я это не проверял |
Цитата:
А суть запроса в том, что бы удалить единственную (естественно они там все уникальны, но поднаборы атрибутов могут повторяться) строку из таблицы sostav_otdelov используюя данные, которые были выведены на основе этой строки. Т.е. есть только Код_Сотрудника, Название_отдела, Название_ставки и Разряд. Вот. Хотя, я думаю что это ограничение BDE... |
ну и где здесь "ограничения bde"?
|
Цитата:
|
Если новый запрос работает - следовательно ограничений нет :)
Такие простейшие запросы не могут наткнуться на ограничения... вооот |
Цитата:
Ну да ладно, все уже работает. Хоть и не твой вариант, но все равно спасибо, за помощь. |
| Часовой пояс GMT +4, время: 01:23. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.