Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление записи на которой находится курсор [D6, Paradox]


Страницы:   1 2 3

Леонид ©   (2005-05-31 12:19:00) 

Вообщем такая проблема, хоть и стыдно, но не знаю как сделать или пример где посмотреть.
Имеется Grid в котором данные отображены с TQuery.
Имеется кнопка "Удалить" хочу по нажатию на кнопку удалить строку которая выделена.
В таблице есть уникальное поле RN.

Вопрос только как получить мне значение этого поля, чтобы передать затем в динамич. запрос на удаление...


Sergey13   (2005-05-31 14:14:00) [21]

2 [27] Леонид   (31.05.05 14:11)
А запрос какой, где этот параметр? И что значит не работает?


Леонид   (2005-05-31 14:11:00) [22]

Тип параметра Integer.
Я делаю вот так

if Edit1.text='' then
 DM.Kip.ParamByName('NomerPP').Clear
 else
   DM.Kip.ParamByName('NomerPP').Value:=StrToInt(Edit1.text);


Так не работает


Sergey13   (2005-05-31 14:02:00) [23]

2[22] Леонид   (31.05.05 13:58)
>DM.Kip.ParamByName('NomerPP').Value:=null
DM.Kip.ParamByName('NomerPP').Clear


evvcom   (2005-05-31 14:01:00) [24]


> Напр. нужно присвоить какому-либо параметру пустое значение

ParamByName('xfx').Clear;


_dimka   (2005-05-31 14:00:00) [25]


> Леонид   (31.05.05 13:58)

А какой тип у параметра?


evvcom   (2005-05-31 13:59:00) [26]


> TUpdateSql - не знаю как даже применить.

Кидаешь на форму. Подвязываешь его к TQuery.UpdateObject. В тексте в качестве имен параметров используешь те же имена, что и в курсоре, возвращенном TQuery, имена полей, только начинающиеся с : (двоеточия). Доступ к старым значениям поля через :OLD_<имя поля> (так по-моему). Только в TQuery CachedUpdates в True установи.
В TQuery: select id, a, b from t1 where ...
В TUpdateSql,
Update: update t1 set a = :a, b = :b where id = :old_id -- хотя ключ id меняться не должен и здесь поэтому допустимо использовать :id, тем не менее показана возможность сего для наглядности.
Delete: delete from t1 where id = :id
ну и для Insert что-нибудь.

Далее можно смело пользоваться Query.{Edit | Append | Delete} и затем, чтобы из кеша изменения прошли в реальные таблицы
if Query.UpdatesPending then Query.ApplyUpdates;
или откат изменений Query.CancelUpdates;


Леонид   (2005-05-31 13:58:00) [27]

Спасибо за разъяснение. Буду пробовать щас.
Вот еще с проблемой столкнулся.
Напр. нужно присвоить какому-либо параметру пустое значение, а Делфи ругается, а как тогда быть, если так как ниже нельзя.

DM.Kip.ParamByName('NomerPP').Value:=null


_dimka   (2005-05-31 13:46:00) [28]


> Sergey13 ©   (31.05.05 13:44)

Это точно потому как могут попасть две абсолютно одинаковые записи и потом когда будешь удалять две и удалиться :)


Sergey13   (2005-05-31 13:44:00) [29]

2 [19] _dimka   (31.05.05 13:42)
>  если нет ПК то просто нажимаешь Generate SQL.
То лучше его (ПК) сделать. Иначе ошибки полезут почти гарантировано.


_dimka   (2005-05-31 13:42:00) [30]


> Леонид   (31.05.05 13:36)

Вобщем добавляешь на форму TUpdateSql в Своем Kip в свойстве UpdateObject ставиш его, потом два раза по TUpdateSql если есть первичній ключ то нажимаешь Select Prymary Key и нажимаешь Generate SQL, если нет ПК то просто нажимаешь Generate SQL. Потом нажимаешь ОК. И можешь юзать
Query1.Delete;
Query1.Insert;
Query1.Edit;


Леонид   (2005-05-31 13:36:00) [31]

TUpdateSql - не знаю как даже применить.
Если кому не трудно, покажите на примере с параметрами или с моими данными.


_dimka   (2005-05-31 13:31:00) [32]


> Антоныч   (31.05.05 13:27)

Да

property SQL: TStrings read FSQL write SetQuery;

procedure TQuery.SetQuery(Value: TStrings);
begin
 if SQL.Text <> Value.Text then
 begin
   Disconnect;
   SQL.BeginUpdate;
   try
     SQL.Assign(Value);
   finally
     SQL.EndUpdate;
   end;
 end;
end;


Антоныч   (2005-05-31 13:27:00) [33]

А до этого он был Active?


_dimka   (2005-05-31 13:15:00) [34]


> _dimka   (31.05.05 13:13)


> Антоныч  

Проверьте если не верите :)


_dimka   (2005-05-31 13:13:00) [35]


> Антоныч   (31.05.05 13:09)

Query1.SQL.Clear;
if Query1.Active then
  Showmessage('Открыт');
И у меня почему-то сообщение не появляеться...


Леонид   (2005-05-31 13:10:00) [36]

Спасибо _dimka - ошибку я свою понял. По поводу TUpdateSQL - я еще его не пробовал, вот и боюсь немного...

А вообще всем спасибо.


Антоныч   (2005-05-31 13:09:00) [37]


> А відает у тебя 0 потому что после
> DM.Kip.SQL.Clear;
> у тебя Kip закріваеться


Неправда. Этим он всего лишь удаляет текст запроса, а его результат все еще находится в KIP - ведь не было команды на какое-нибудь обновление запроса.
Попробуй для удаления записи из KIP использовать запрос с другим именем:
DM.Kip1.SQL.ADD('delete from pribor where RN=:RN');
DM.Kip1.ParamByName('RN').DataType:=ftInteger;
DM.Kip1.ParamByName('RN').AsInteger:=DM.Kip.FieldByName('RN').AsInteger;


Сайбель Алексей   (2005-05-31 13:08:00) [38]

2 Леонид [7]
Ну ты присваеваешь параметру значения, а кто выполнять сам запрос будет? надо окрывать Kip.Open;
P.S. Ты же сказал что FieldByName тебе не доступно?? =)


_dimka   (2005-05-31 13:02:00) [39]

А відает у тебя 0 потому что после
DM.Kip.SQL.Clear;
у тебя Kip закріваеться.


_dimka   (2005-05-31 13:01:00) [40]

Тебе же написали подключи TUpdateSQL, правой кнопкой по нему и там сгенерируй все запросі на удалени, добавление и т.д., и не мучайся.
Потом просто сделаешь Kip.Delete;


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо