Как окно данных powerbuilder выполняет команду вставки

Я новичок в powerbuilder, и у меня много проблем с использованием окон данных. Никак не могу разобраться с механизмом вставки. Может ли кто-нибудь объяснить это мне или, по крайней мере, указать мне правильное направление (статья, советы и т. д.)?


person MD Sayem Ahmed    schedule 14.06.2010    source источник
comment
Четыре часа и жалоба? Терпеть не много! Просто раннее утро в Северной Америке. Какой вставной механизм? Данные Windows? Древовидные изображения? Встроенный SQL? ... Вы смотрели техническую документацию Sybase или PowerBuilder Developer Journal?   -  person Terry    schedule 14.06.2010
comment
Еще один довольный разработчик PB :) ... Как бы то ни было, PB IDE имеет тенденцию быть нестабильной, но со временем вы узнаете, чего следует избегать, чтобы предотвратить сбой и т. д. Кроме того, DataWindow лежит в основе PB, так что это, безусловно, самая важная концепция для освоения. Я также рекомендую внимательно прочитать прилагаемую документацию по API и потратить много времени на изучение отладчика PB. В конце концов, вы даже можете наслаждаться ПБ.   -  person Justin Ethier    schedule 15.06.2010


Ответы (2)


SQL, сгенерированный DataWindow, управляется Свойствами обновления (пункт меню Строки / Свойства обновления...). Оттуда вы можете выбрать одну таблицу и установить свойства, которые она будет использовать для генерации SQL. Предложение Where... определяет, какие столбцы и их исходные значения используются в предложении WHERE для операций UPDATE и DELETE. Изменение ключа вступает в силу только тогда, когда вы изменяете (или разрешаете пользователю изменять) столбцы, которые вы определили как ключевые. Обновляемые столбцы — это список того, что будет генерировать SQL (это не влияет на то, что так или иначе допускает пользовательский интерфейс). Ключевые столбцы могут быть первичным ключом (который может быть автоматически заполнен с помощью кнопки первичного ключа, если ваша СУБД поддерживает вызовы для запроса этого из базы данных), но это не обязательно быть. (Есть довольно уникальные случаи, когда вы можете захотеть сделать что-то другое.) Если у вас есть столбец идентификаторов в качестве ключа, вы можете указать его в своем DataWindow, и он получит сгенерированное значение после INSERT.

После этого заполнение данных в DataWindow с помощью InsertRow(), DeleteRow(), SetItem() и, конечно же, предоставление пользователю доступа к пользовательскому интерфейсу будет изменять флаги данных и состояния, которые будут определять SQL, сгенерированный при Update(). называется.

Все это можно изменить во время выполнения с помощью функции Modify(), поэтому вы можете делать такие вещи, как обновление нескольких таблиц с помощью одного DataWindow. Это реализовано в многотабличной службе обновления PowerBuilder Foundation Class, поэтому, если вы когда-нибудь захотите изменить эти значения во время выполнения, это хороший пример кода.

Удачи,

Терри.

person Terry    schedule 14.06.2010
comment
Предположим, у меня есть таблица с именем «тест» и три столбца с именами «test_id», «test_name», «test_address». Я использую аргумент поиска для 'test_id' для извлечения данных из таблицы для фильтрации данных, и я отображаю только два последних столбца. Теперь, когда я вставляю новую строку с помощью окна данных, он говорит, что я нарушаю ограничение «не нуль» в базе данных, что не удалось найти значение для «test_id». Как я могу решить эту проблему? - person MD Sayem Ahmed; 15.06.2010
comment
Смотря как. Если test_id является столбцом идентификации/автоинкремента, вам просто нужно объявить это в свойствах обновления. Если это значение, которое вы заполняете самостоятельно, вам придется программно выполнить SetItem() в новой строке для столбца test_id. Правила создания значения могут определять, можно ли установить значение одновременно с InsertRow() или в событии UpdateStart. Если вы хотите использовать ModifiedCount() для определения необходимости сохранения, вы можете отложить SetItem() до вызова этой функции. (Для бонусных отметок Modify() начального атрибута столбца DW... без spc2xpln.) - person Terry; 15.06.2010

@Archangel Вам по-прежнему необходимо указать поле test_id при вставке строки в окно данных, даже после того, как вы указали для нее значение в качестве аргумента извлечения. После того, как вы сделаете свою вставку, убедитесь, что вы делаете setitem для всех значений, которые не допускают нулевых значений.

person Jay    schedule 15.06.2010