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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2010, 21:32   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
Смущение База данных

Всем привет, хочу сделать так, чтобы по удалению строки из таблицы, строки, находящиеся под удаленный строкой, приобретали индексы на единицу меньше, т.е. - происходило смещение вверх со сменой индекса. пришёл к выводу что нужно после удаления строки оставить Bookmark в этом же месте и сделал это, вот код:
Код:
procedure TForm2.Button1Click(Sender: TObject);
var bmk, bmk2: Tbookmark;
begin
ZQuery2.SQL.Text:='Update detals set str_id='''+IntToStr(-1)+''', izdel_id=izdel_id, detal_id=detal_id,detal_name=detal_name,detal_kol_izd=detal_kol_izd, 
pokr_name=pokr_name,detal_info=detal_info where str_id='+Form1.DBGridEh2.Columns[0].Field.AsString;
ZQuery2.ExecSQL;
Form1.DBGridEh2.SelectedRows.DataSet;
bmk:=Form1.DBGridEh2.DataSource.DataSet.GetBookmark;
ZQuery2.SQL.Text:='Delete from detals where str_id='+inttostr(-1);
ZQuery2.ExecSQL;
Form1.ZQuery2.Refresh;
Form1.DBGridEh2.DataSource.DataSet.GotoBookmark(bmk);
end;
Пишу без пояснений, ибо вам должно быть и так всё понятно.
Но встала проблема, после удаления самой нижней строки в таблице, выскакивает ошибка о том что метка не найдена, но прога удаляет эту строчку а метку помещает на самую первую строку таблицы. Так вот нужно какое-то ограничение вроде оператора If then else что бы эта ошибка не появлялась. Типа: если выделенная строка в таблице последняя, то выполнить удаление строки и освобождение метки Form1.BDGrideh2.DataSource.DataSet. FreeBookmark(bmk); а если строка не последняя, то выполнить выше приведенный (в самом начале) текст части программы. Вобщем... если есть какие-нибудь другие варианты смещения строк с вычетом 1 по индексу, то расскажите. А вообще вопрос: как будет выглядеть тот самый if ???? then else? что после if писать? Заранее спасибо!

У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Вы не знали? Почитайте правила раздела...
Модератор
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось mihali4; 02.01.2010 в 21:54.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 03.01.2010, 09:40   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Код:
Form1.DBGridEh2.SelectedRows.DataSet;
recid:=form1DBGridEh2.datsource,dataset.fieldbyname('id').asinteger; //bmk:=Form1.DBGridEh2.DataSource.DataSet.GetBookmark;
ZQuery2.SQL.Text:='Delete from detals where str_id='+inttostr(-1);
ZQuery2.ExecSQL;
Form1.ZQuery2.Refresh;
recfound:=Form1.DBGridEh2.datasource.dataset.locate('id',recid);//Form1.DBGridEh2.DataSource.DataSet.GotoBookmark(bmk);
if recfound then//можно поставить (на самом деле уже строит)
else dggrid.datasource.dataset,last; (ставим куда хотим)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 03.01.2010, 12:24   #3
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Всё понятно и просто! Спасибо огромное evg_m!!!
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
База данных с возможностью приема данных из файлов Excel Al_Sha БД в Delphi 6 16.10.2009 15:34
База данных Orme БД в Delphi 0 17.09.2009 18:23
База данных Alex XXX Помощь студентам 3 08.08.2008 10:23