![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление записи на которой находится курсор [D6, Paradox]
Леонид © (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;