2010-06-14 2 views
2

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

+4

Четыре часа и жалоба? Не больно! Только рано утром в Северной Америке. Какой механизм вставки? DataWindows? Treeviews? Встроенный SQL? ... Вы просмотрели технические документы Sybase или журнал разработчиков PowerBuilder? – Terry

+1

Еще один удовлетворенный разработчик PB :) ... Для чего он стоит, PB IDE имеет тенденцию быть нестабильной, но со временем вы узнаете, чего избежать, чтобы предотвратить ее сбой и т. Д. Кроме того, DataWindow лежит в основе PB , так что это, безусловно, самая важная концепция для освоения. Я также рекомендую внимательно прочитать прилагаемые документы API и потратить много времени на изучение использования отладчика PB. В конце концов вы можете даже наслаждаться PB. –

ответ

9

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

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

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

Удача,

Terry.

+0

Предположим, у меня есть таблица под названием «test», и она имеет три столбца с именем «test_id», «test_name», «test_address». Я использую аргумент поиска на «test_id» для извлечения данных из таблицы для фильтрации данных, и я показываю только два последних столбца. Теперь, когда я вставляю новую строку с использованием окна данных, в ней говорится, что я нарушаю ограничение «не-null» в базе данных, что он не смог найти значение для «test_id». Как я могу решить эту проблему? –

+1

Зависит. Если test_id является столбцом identity/auto-increment, вам просто нужно объявить это в свойствах обновления. Если это значение, которое вы заполняете сами, вам нужно программно сделать SetItem() в новой строке для столбца «test_id». Правила генерации значения могут определять, можно ли установить значение одновременно с InsertRow() или событием UpdateStart. Если вы хотите использовать ModifiedCount(), чтобы определить, требуется ли сохранение, вы можете отложить SetItem() до тех пор, пока этот вызов функции не будет выполнен. (Для бонусных меток, Modify() начальный атрибут столбца DW ... нет spc2xpln.) – Terry

2

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

 Смежные вопросы

  • Нет связанных вопросов^_^