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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2011, 20:45   #1
alTor
 
Регистрация: 28.06.2011
Сообщений: 6
По умолчанию Удаление записи запросом IBQuery

Нужно удалить запись из таблицы БД, сам обработчик написал и все работает вроде, но в базе создан генератор + в приложении при добавлении новой записи генератор увеличивает поле с идентификатором на1. Всего было 70 записей в таблице, допустим добавил 71 и ее же удалил, когда вновь хочу добавить 71 запись он пропускает и создаёт 72 и так далее. Выходит 70,72,73. Есть ли функция какая-то как gen_id только чтобы отнимало единицу при удалении записи?Или как еще можно убрать это. Гуглил вроде функции нету кроме gen_id
+ В диалоговых окнах я вообще в 1ый раз тут же нашол в поиске у кого то код диалогового окна(чтобы якобы спрашивал удалять/нет запись при нажатии кнопки) окно само вылазает, но запись удаляеться в любом случае даже если нажимать отмену, если не трудно и тут ткните носом.
Код:
procedure TForm6.BitBtn6Click(Sender: TObject);
//Удалить запись
begin
if(MessageBox(GetForegroundWindow(),'Удалить запись ?','Удаление',1)=ID_YES) then
c:=IBQuery1.SQL.Text;
IBQuery2.SQL.Add('Delete From TOVAR WHERE TOV_ID='''+TOV_ID_EDIT.Text+''''); //Сюда думал поставить (gen_id(TOV_ID_GEN,-1)
IBQuery2.ExecSQL;
IBTransaction1.Commit;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Text:=c;
IBQuery1.Active:=True;
end;
Код:
procedure TForm6.AddBtnClick(Sender: TObject);
//Добавить запись
var s:string;
begin
c:=IBQuery1.SQL.Text;
IBQuery1.SQL.Clear;
s:='INSERT INTO TOVAR (TOV_ID,TOV_TIP,TOV_DATE,TOV_CENA,TOV_KOLVO,TOV_OTD)' +
'Values (gen_id(TOV_ID_GEN,1),'''+Form6.TOV_TIP_EDIT.Text+''','''+Form6.TOV_DATE_EDIT.Text+''','''+Form6.TOV_CENA_EDIT.Text
+''','''+Form6.TOV_KOLVO_EDIT.Text+''','''+Form6.TOV_OTD_EDIT.Text+''');';
IBQuery1.SQL.Text:=s;
IBQuery1.ExecSQL;
IBTransaction1.Commit;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Text:=c;
IBQuery1.Active:=True;
end;

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

Цитата:
Или как еще можно убрать это.
А зачем ты создавал автоинкрементное поле, если не желаешь соблюдать его правила?
Да и потом зачем тебе обязательно нужен порядок без дырок?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2011, 00:20   #3
alTor
 
Регистрация: 28.06.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А зачем ты создавал автоинкрементное поле, если не желаешь соблюдать его правила?
Да и потом зачем тебе обязательно нужен порядок без дырок?
потомучто когда делал кнопку добавить выбивало с ошибкой не помню какой. А нужно при нажатии кнопки добавить очистить все эдиты кроме поля с идентификатором его нужно увеличить на 1. Код вроде такой был
Код:
procedure bitbtnclick;
var c:integer;
begin
IBQuery1.last;
c:=StrToInt(edit1.text)+1;
IBQuery1.append;
IBQuery1.Fields[0].value:=c;
Так запись не получалось добавить, посоветовали запросом и получилось.
Может и не особо важно порядок соблюдать, но тут уже спортивный интерес играет это последняя кнопка осталось хотелось бы по человечески доделать)

Зачем вы отвечаете с цитированием предыдущего поста ?
Вы не видите кнопку справа от кнопки "Цитата" ?
Или вам почему-то не видно пустое окно редактора под последним сообщением ?
За оверквотинг у нас штрафуют, имейте это ввиду.
Дабы не нарушать правила, внимательно их почитайте:
http://programmersforum.ru/announcement.php?f=2
После 10 ваших сообщений начнете получать штрафы за нарушение правил...

Последний раз редактировалось mihali4; 23.10.2011 в 01:58.
alTor вне форума Ответить с цитированием
Старый 23.10.2011, 13:08   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но тут уже спортивный интерес играет
Ага. В труселях )
Короче, это ты здря делаешь. Не для этого придуман автоинкремент, а для четкого соблюдения ключей записей - для уникальности.
Сделай себе еще одно поле - в него и пиши :
Код:
INSERT INTO TOVAR (TOV_моемегаполе... остальные поля без автоинкремента
Values ((Select max(TOV_моемегаполе)+1 from TOVAR)... Остальная часть запроса )
И получишь в 99% случаев четкий порядок без окон в поле.

P.S. Хотя никакого смысла в этом не вижу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление записи MAZADA Общие вопросы Delphi 2 14.08.2011 17:09
Удаление записи из файла ZotaC Общие вопросы Delphi 5 09.12.2010 19:24
удаление записи IraPr Microsoft Office Access 2 07.10.2010 17:22
Удаление записи в БД DuM4uK БД в Delphi 2 05.10.2009 15:53
Удаление записи из *.dbf BJF.41 БД в Delphi 4 15.03.2007 18:29