Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 Карточка редактирования записи  [new]
Лампочка
Member

Откуда:
Сообщений: 140
Пожалуйста, помогите советом!
На работе чуть не подрались в споре о реализации карточного редактирования записи в таблице..Надо срочно сделать, а я так и не пришла к выводу, как это правильно делают.
На форме есть таблица, построенная на sqlselect, по кнопке для текущей записи вызывается форма создания/редактирования.
Шефы говорят - делай ее просто полями и вписывай туда значения текущей строки/считывай из полей в таблицу соответственно.
А если dropdown-ы? Я же замучаюсь создавать эти списки для простых полей.
Как нужно создавать карточку добавления/редактирования, что она собой должна по-правильному представлять?
20 май 09, 22:36    [7206547]     Ответить | Цитировать Сообщить модератору
 Re: Карточка редактирования записи  [new]
Лампочка
Member

Откуда:
Сообщений: 140
на всякий случай (у нас из-за этого один вариант отвалился) - у некоторых таблиц, для которых делается интерфейс, нет и не будет первичных ключей.
20 май 09, 22:47    [7206577]     Ответить | Цитировать Сообщить модератору
 Re: Карточка редактирования записи  [new]
maxATC
Member

Откуда:
Сообщений: 279
Лампочка
на всякий случай (у нас из-за этого один вариант отвалился) - у некоторых таблиц, для которых делается интерфейс, нет и не будет первичных ключей.

При записи карточки обязателен должен быть уникальный набор полей для каждой записи (список уникальных ключей, полей в Update Propertis) в DW карточки.
20 май 09, 23:02    [7206596]     Ответить | Цитировать Сообщить модератору
 Re: Карточка редактирования записи  [new]
alexis glinski
Member

Откуда: Minsk
Сообщений: 408
Лампочка
у некоторых таблиц, для которых делается интерфейс, нет и не будет первичных ключей.

что за бред? какая у вас БД?
21 май 09, 00:01    [7206740]     Ответить | Цитировать Сообщить модератору
 Re: Карточка редактирования записи  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6610
Лампочка
Шефы говорят - делай ее просто полями и вписывай туда значения текущей строки/считывай из полей в таблицу соответственно.
А если dropdown-ы? Я же замучаюсь создавать эти списки для простых полей.
Как нужно создавать карточку добавления/редактирования, что она собой должна по-правильному представлять?

Если правильно понял, шефы предлагают не использовать DW типа Free Form, а реализовать форму с помощью отдельных контролов типа singlelineedit и прочее.
Этого делать нельзя ни в коем случае. Только DW. А уже с ним организовать либо сохранение в БД, либо копирование обратно в грид при сохранении записи.

Если в таблице нет первичного ключа или иных полей выполняющих роль уникального идентификатора записи, то в DW, в update properties нужно указать все поля как ключевые и флаг Key Modification поставить "Update"
Если же возможно дублирование всех полей то PowerBuilder не предназначен для работы с такими таблицами. Хотя для некоторых БД есть возможность использования столбца ROWID (физический адрес строки в БД).
21 май 09, 06:01    [7207013]     Ответить | Цитировать Сообщить модератору
 Re: Карточка редактирования записи  [new]
Лампочка
Member

Откуда:
Сообщений: 140
Anatoly Moskovsky,
спасибо за ответ, можно вас еще поспрашивать?:)
Да, про то, что все поля придется внести в уникальный ключ, я утром уже вспомнила)
Я не знаю, как организовать эту карточку. Ведь если делать просто DW, основанное на SQLSelect, туда выпадут все записи таблицы, а это не гут плюс синхронизация с текущей записью при вызове карточки.
Я в чем-то не права? Туда нужно вытягивать одну запись?
Или вызов карточки на создание..тот же вопрос.
Заранее спасибо!
21 май 09, 09:09    [7207168]     Ответить | Цитировать Сообщить модератору
 Re: Карточка редактирования записи  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6610
Лампочка
Anatoly Moskovsky,
спасибо за ответ, можно вас еще поспрашивать?:)
Да, про то, что все поля придется внести в уникальный ключ, я утром уже вспомнила)
Я не знаю, как организовать эту карточку. Ведь если делать просто DW, основанное на SQLSelect, туда выпадут все записи таблицы, а это не гут плюс синхронизация с текущей записью при вызове карточки.
Я в чем-то не права? Туда нужно вытягивать одну запись?
Или вызов карточки на создание..тот же вопрос.
Заранее спасибо!

В вашем случае я бы делал так.
  • Сделать форму для записи на том же запросе что и грид
  • Сама форма с БД не работает (т.е. не вызывается retrieve()/update() для нее)
  • При открытии формы в нее через RowsCopy() или другим способом копируется текущая строка грида или при вставке новой записи просто InsertRow()
  • Если в форме есть DDDW, то их необходимо подгрузить из БД, для чего для каждого поля DDDW делается GetChild(), child.SetTransObject(...), child.Retrieve()
  • При сохранении формы - строка копируется/вставляется обратно в грид (можно копировать только измененные поля - проверка через GetItemStatus()).
  • Сохранение в БД делается только для грида
  • 21 май 09, 09:26    [7207236]     Ответить | Цитировать Сообщить модератору
     Re: Карточка редактирования записи  [new]
    Лампочка
    Member

    Откуда:
    Сообщений: 140
    Anatoly Moskovsky,
    Вы не представляете, как Вы меня выручили!
    У меня есть еще вопросик..правда, я пока по нему информацию даже не успела поискать.
    Есть требование: когда кликаешь мышью по заголовку столбца, нужно, чтобы столбец сортировался.
    В ИС, в которой я работала раньше, было так - один клик - сортируется asc, следующий - desc, следующий - снова asc и т.д.
    Я не знаю, как узнавать/запоминать, как отсортирован столбец, чтобы следующий клик менял сортировку.
    21 май 09, 09:41    [7207324]     Ответить | Цитировать Сообщить модератору
     Re: Карточка редактирования записи  [new]
    Локшин Марк
    Member

    Откуда: Воронеж
    Сообщений: 3154
    Лампочка
    Anatoly Moskovsky,
    Вы не представляете, как Вы меня выручили!
    У меня есть еще вопросик..правда, я пока по нему информацию даже не успела поискать.
    Есть требование: когда кликаешь мышью по заголовку столбца, нужно, чтобы столбец сортировался.
    В ИС, в которой я работала раньше, было так - один клик - сортируется asc, следующий - desc, следующий - снова asc и т.д.
    Я не знаю, как узнавать/запоминать, как отсортирован столбец, чтобы следующий клик менял сортировку.

    Анализировать выражение
    dw_1.Describe("DataWindow.Table.Filter")
    и смотреть стоит ли у данного столбца desc.
    21 май 09, 09:54    [7207391]     Ответить | Цитировать Сообщить модератору
     Re: Карточка редактирования записи  [new]
    spas2001
    Member

    Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
    Сообщений: 2010
    Марк описался
    На самом деле
    <DW Control Name>.Describe("DataWindow.Table.Sort")
    -----------------------------------------------------------------------------
    Главная деталь любой машины - голова ее владельца
    21 май 09, 10:00    [7207425]     Ответить | Цитировать Сообщить модератору
     Re: Карточка редактирования записи  [new]
    spas2001
    Member

    Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
    Сообщений: 2010
    Кусок кода как пример
    String Col,SortOrder
    Col=Upper(Trim(dwo.Name))
    if Upper(right(Col,2))='_T'then
    	if SCol=Col then
    		if SOrder=' A' then 
    			SortOrder=' D'
    		else
    			SortOrder=' A'
    		end if
    	else
    		SortOrder=' A'
    	end if
    	Modify(dwo.Name+".Border='5'")
    	
    	if Upper(right(Col,2))='_T'then
    		this.SetSort(left(Col,len(col)-2)+SortOrder)
    	end if
    	this.Sort()
    	Modify(dwo.name+".Border='6'")
    	SOrder=SortOrder
    	SCol=Col
    -----------------------------------------------------------------------------
    Главная деталь любой машины - голова ее владельца
    21 май 09, 10:02    [7207433]     Ответить | Цитировать Сообщить модератору
     Re: Карточка редактирования записи  [new]
    Лампочка
    Member

    Откуда:
    Сообщений: 140
    СПАСИБО!!!!!
    21 май 09, 10:10    [7207470]     Ответить | Цитировать Сообщить модератору
    Все форумы / PowerBuilder Ответить