Reports the next row and column that is required and contains a null value. The method arguments that specify where to start searching also store the results of the search. You can speed up the search by specifying that FindRequired check only inserted and modified rows.

Applies to

DataWindow type

Method applies to


DataWindow control, DataStore object



integer dwcontrol.FindRequired ( DWBuffer dwbuffer, long row, integer colnbr, string colname, boolean updateonly ) 




A reference to the DataWindow control or DataStore in which you want to find required columns that have null values.


A value indicating the DataWindow buffer you want to search for required columns. Valid buffers are:

  • Primary!

  • Filter!


A value identifying the first row to be searched. Row also stores the number of the found row. FindRequired increments the row number automatically after it validates each row's columns. When it finds a row with a required column that contains a null value, the row number is stored in row. After FindRequired validates the last column in the last row, it sets row to 0.


The row argument must be a variable so it can return a value for the found row.


A value identifying the first column to be searched. Colnbr also stores the number of the found column. After validating the last column, FindRequired sets colnbr to 1 and increments row. When it finds a required column that contains a null value, the column number is stored in colnbr.


The colnbr argument must be a variable so it can return a value for the found column.


A string in which you want to store the name of the required column that contains a null value (the name of colnbr).


The colname argument must be a variable so it can hold a value for the name of the found column.


A value indicating whether you want to validate all rows and columns or only rows that have been inserted or modified:

  • true -- Validate only those rows that have changed. Setting updateonly to true enhances performance in large DataWindows.

  • false -- Validate all rows and columns.

Return value

Returns 1 if FindRequired successfully checked the rows and -1 if an error occurs.

If any argument's value is null, in PowerBuilder and JavaScript the method returns null.


For FindRequired to report an empty required column, the column's value must actually be null, not an empty string.

To make a column required, set the Required property to true in a script or check the Required check box for the column in the DataWindow painter.

New rows have null values in their columns, unless the columns have default values. If updateonly is false, FindRequired reports empty required columns in new rows. If updateonly is true, FindRequired does not check new rows because new, empty rows are not updated in the database.

When the user modifies a row and leaves a column empty, the new value is an empty string, unless the column's edit style has the Empty String Is null check box checked. FindRequired does not report empty required columns in modified rows unless this property is set.


The following code makes a list of all the row numbers and column names in dw_1 in which required columns are missing values. The list is displayed in the MultiLineEdit mle_required:

long ll_row = 1
integer colnbr = 0
string colname
mle_required.Text = ""
DO WHILE ll_row <> 0
      colnbr++ // Continue searching at next column
      // If there's an error, exit
      IF dw_1.FindRequired(Primary!, &
         ll_row, colnbr, &
         colname, false) < 0 THEN EXIT
      // If a row was found, save the row and column
      IF ll_row <> 0 THEN
         mle_required.Text = mle_required.Text &
            + String(ll_row) + "~t" &
            + colname + "~r~n"
      // When FindRequired returns 0 (meaning
      // no more rows found), drop out of loop

This example is a function that ensures that no required column in a DataWindow control is empty (contains null). It takes one argument -- the DataWindow control, which is declared in the function declaration like this:

DataWindow adw_control

The function returns -2 if the user's last entry cannot be accepted or if FindRequired returns an error. It returns -1 if an empty required column is found. It returns 1 if all required columns have data:

integer li_colnbr = 1
long ll_row = 1
string ls_colname, ls_textname
// Make sure the last entry is accepted
IF adw_control.AcceptText() = -1 THEN
      RETURN -2
// Find the first empty row and column, if any
IF adw_control.FindRequired(Primary!, ll_row, &
         li_colnbr, ls_colname, true) < 1 THEN
      //If search fails due to error, then return
      RETURN -2
// Was any row found?
IF ll_row <> 0 THEN
      // Get the text of that column's label.
      ls_textname = ls_colname + "_t.Text"
      ls_colname = adw_control.Describe(ls_textname)
      // Tell the user which column to fill in
      MessageBox("Required Value Missing", &
         "Please enter a value for '" &
         + ls_colname + "', row " &
         + String(ll_row) + ".", &
         StopSign! )
      // Make the problem column current.
      RETURN -1
// Return success code if all required
// rows and columns have data

See also