| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 19.05.2003
Адрес: Самара
Сообщения: 52
![]() |
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(' )'); |
|
|
|
|
# 3 | |
|
Junior Member
Регистрация: 19.05.2003
Адрес: Самара
Сообщения: 52
![]() |
Цитата:
Вот структура таблиц (заполнение не имеет значения - лень набивать), хотя я и не понимаю, какое это имеет отношение к вопросу. Таблица - 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 |
|
|
|
|
|
# 4 |
|
Guest
Сообщения: n/a
|
ты не написал, что ты хочешь в результате запроса получить
Но оторвавшись от напильника и тисков (и получив от бригадира по кепке) получим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 Ну или что-то похожее на это... я это не проверял |
|
|
# 5 | |
|
Junior Member
Регистрация: 19.05.2003
Адрес: Самара
Сообщения: 52
![]() |
Цитата:
Я написал тестевый вариант, а должно быть вместо SELECT * должно быть DELETE.А суть запроса в том, что бы удалить единственную (естественно они там все уникальны, но поднаборы атрибутов могут повторяться) строку из таблицы sostav_otdelov используюя данные, которые были выведены на основе этой строки. Т.е. есть только Код_Сотрудника, Название_отдела, Название_ставки и Разряд. Вот. Хотя, я думаю что это ограничение BDE... |
|
|
|
|
|
# 9 | |
|
Junior Member
Регистрация: 19.05.2003
Адрес: Самара
Сообщения: 52
![]() |
Цитата:
![]() Ну да ладно, все уже работает. Хоть и не твой вариант, но все равно спасибо, за помощь. |
|
|
|