powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как удалить только часть записи
10 сообщений из 10, страница 1 из 1
Как удалить только часть записи
    #32578534
Levon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди, подскажите, как бы мне выкрутиться. Есть DW, в которое вытягивается полей 15, из них 3 обновляемые(т.е указаны в update properties). Как мне сделать удаление так, чтоб с экрана не уходили все 15 полей записи, а только 3 обновляемых поля (т.е становились пустыми на экране), при этом, естсно, изменения должны записаться в базу. И возможно ли сделать отмену этих действий, скажем, по нажатию какой-либо кнопки?
...
Рейтинг: 0 / 0
Как удалить только часть записи
    #32578589
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаете хранимую процедуру в СУБД с 3 параметрами, в ней соотвествующе, если все 3 параметра пустые, то удаляете запись в нужной таблице, иначе добавляете/изменяете. В DW вешаете эту ХП на Insert/Update, на форме вместо удаления просто обнуляете 3 нужных поля. Усё :)
...
Рейтинг: 0 / 0
Как удалить только часть записи
    #32578926
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рассматривать вашу проблему вне контекста структуры данных мягко говоря сложно.
Что есть в вашем понятии удаление?
Если речь идет об удалении из DW, то самое простое это не выполнять deleteRow(...), а просто удалить данные из нужных полей.
Если речь идет об удалении данных из БД, то что произойдет после Retrieve()?
Будут ли выбраны те данные, которые вы уже удалили?

Решений по организации отмены удаления тоже может быть несколько.
Во первых вы можите использовать буфер dw Original!.
Во вторых, можите унаследовать стандартный DataWindow и объявить в этом объекте допустим 3 Instance переменных, в которые перед удалением будете сохранять значения ваших полей.
В третьих можите организовать 3 стека для хранения всех изменений в течениии работы со своим DataWindow.
...
Рейтинг: 0 / 0
Как удалить только часть записи
    #32581192
Levon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо за ответы!
To Ermak:
Данные из базы должны удалиться. А после Retrieve() будут показываться 12 заполненных полей, и 3 пустых, им соответствующих. А вот такой вопрос - как удалить данные из нужных полей? Пробовал в них нулл записывать, но с DateTime непонятки выходят
...
Рейтинг: 0 / 0
Как удалить только часть записи
    #32581314
Levon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to ASCRUS: а как в ХП различить Insert и Update?
...
Рейтинг: 0 / 0
Как удалить только часть записи
    #32581334
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Levonto ASCRUS: а как в ХП различить Insert и Update?Можно передать в одном из параметров процедуры
...
Рейтинг: 0 / 0
Как удалить только часть записи
    #32581401
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно передавать параметр, можно сделать 2 ХП, а если Primary Key не IDENTITY и СУБД ASA9, то можно и без параметра одной процедурой обойтись:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE sp_SaveRecord (
  IN @Id int,
  IN @Name varchar( 20 )
BEGIN
  INSERT INTO Table1 (Id, Name) ON EXISTING UPDATE
  VALUES (@Id, @Name);

  IF @@ROWCOUNT =  0 
  THEN
    RAISERROR  20000  'Обновляемая запись не найдена или изменилась';
  END IF;
END;
Для каждой СУБД можно ее тонкости красиво использовать для реализации сложной логики изменения информации, снимая эту заботу с плеч клиентского приложения.
...
Рейтинг: 0 / 0
Как удалить только часть записи
    #32581845
Levon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, с Insert/Update разобрался. А всё-таки как поля в записи по-человечески очистить?
...
Рейтинг: 0 / 0
Как удалить только часть записи
    #32581861
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обьявляете переменные, соотвествующие типам полей, устанавливаете их в NULL функцией SETNULL, потом соотвествующе заносите их в поля через SETITEM. Например, есть поле Name стрингового типа:
Код: plaintext
1.
2.
string s
SetNull( s )
dw_1.SetItem( dw_1.GetRow(), 'Name', s )
...
Рейтинг: 0 / 0
Как удалить только часть записи
    #32586541
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или так:

String StrNull
SetNull(StrNull)

dwc.object.column[row]=Date(StrNull)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как удалить только часть записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]