Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2011, 17:43   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию Удаление строки не имеющей уникальный ключ

Всем доброго. С таким я еще не сталкивался, посему открываю тему.
Есть таблица, в которой нет уникальных ключей. Я запросом выбираю из нее некий набор. После чего я хочу удалить некую строку из таблицы, входящую в набор, полученный запросом.
Если нет уникальных ключей я могу просто перечислить в запросе поля в условии, но мне это не нравится, тем паче что по заданию я должен удалить только конкретную по номеру строку. У меня в таблице могут быть много раз подряд одно и то же написанное, но удалить нужно именно одну из них.

Предусмотренны ли в SQL запросах указания удалить запись с таким-то физическим номером в базе?
Речь идет о FireBird 1.5

P.S. Знаю что там есть rdb$db_key, но что-то не понимаю как его использовать, с битовыми масками не работал до этого, да и говорят что он переменчив...

P.P.S. структуру БД менять запрещено
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.08.2011, 19:13   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

сразу скажу, я не знаю, как решать проблему.
Но Вы, надеюсь, понимаете, откуда "ноги растут" у этой проблемы?

SQL предназначен для обработки данных отвечающих правилам реляционных БД.
В данном случае таблица имеет "кривую" структуру.

Цитата:
Предусмотренны ли в SQL запросах указания удалить запись с таким-то физическим номером в базе?
не знаю, как там в FireBird, но в стандартном SQL такого ТОЧНО нет.

Поэтому, если не удастся построить условие WHERE поле1=xxx and поле2=yyy and ....полеN = zzzz так, чтобы ему отвечала только одна нужная запись - значит задача не решается через SQL запрос...

p.s. понимаю, что Вы оказались перед лицом данной проблемы не по своей вине.. Сочувствую...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.08.2011, 19:59   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Топорный способ - удалить всю группу из 5 записей, и тут же вставить 4 таких же точно записи. Кстати с корректировкой этих запией будут аналогичные проблемы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.08.2011, 20:44   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Топорный способ
Хы... )))
Только бока вот в чем: прога некого писаки считает первичным ключем... физический нумбер записи
То самое RecNo. Представляете, кто-то решил от него отталкиваться, исходя из того что записи по идее удаляться не должны или если удаляются то все - очистка таблицы. Но прошли времена, когда этого хватало, перспективы потребовали более мобильного телодвижения программы и тут прилетела птичка обломинго На эту гостью разработчики ответили лукаво не мудрствуя - Table, получаем всю таблицу, move на нужную запись по номеру и уже с ней делают чет-там.
Меня это не устраивает, медлено дюже, я по своему пишу работу с базой (это чисто для меня, они пусть тормозят сколько хотят) в свое удобство.
Ну а ту... Даже не знаю как поступить... И это ведь только одна таблица, в БД их сотни, с разным набором полей... Как-то криво натыкивать в запрос проверку по всем полям, которая не факт что поможет.

P.S. А Table как работает? неужели даже при фильтрации запрашивает весь набор данных?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.08.2011, 20:51   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

С Table практически не работаю, но судя по тому, что есть событие OnFilterRecord, то фильтрация на клиенте

ADD

Посмотрел на sql.ru rdb$db_key - вроде и возможно в рамках одной транзакции им пользоваться для удаления (так, инфа к размышлению, с FireBird мало знаком)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 16.08.2011 в 21:11.
Аватар вне форума Ответить с цитированием
Старый 16.08.2011, 21:24   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вроде
Та вот меня это "вроде" малость настораживает... Данные такие что потерять их нельзя - башку снимут, а работать надо.
Цитата:
судя по тому, что есть событие OnFilterRecord, то фильтрация на клиенте
да... верно подметил. Наверно там буфферизация и подкачка есть. (Сам тоже не работаю с Table)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строки женя2010 Microsoft Office Excel 9 23.04.2010 16:23
Работа с книгой имеющей общий доступ в Excel(2003,2007) Fezdipekla Microsoft Office Excel 1 12.03.2010 10:35
Удаление элементов строки s2 из строки s1 Ueshua Общие вопросы C/C++ 4 20.12.2009 13:06
Удаление из строки program123 Помощь студентам 4 21.05.2009 12:52
Как делают уникальный идентификатор строки в БД? sergey113 Помощь студентам 3 05.08.2008 17:48