pentaho/pentaho-kettle · error · KettleException

AccessInput.Log.NoField

AccessInput.Log.NoField

Error message

AccessInput.Log.NoField

What it means

KettleException (also logged first) thrown in AccessInput.openNextFile when the step is configured to take filenames dynamically from an incoming field, but the 'filename field' setting is empty. The step cannot know which field holds the file paths, so it aborts.

Solutions

  1. Open the Access Input step dialog and set 'Get filename from field' to the upstream field that contains the file paths.
  2. Verify the upstream step actually outputs a field with that exact name (case-sensitive).
  3. If files should be static instead, disable 'file defined in a field' and list the files in the Files tab.

Example fix

// Access Input step dialog, before: Filename field = (empty)
// after: Filename field = "filename"
// or programmatically:
meta.setDynamicFilenameField( "filename" );
Defensive patterns

Strategy: validation

Validate before calling

// before run, if accepting files from a field
String dynField = meta.getDynamicFilenameField();
if ( dynField == null || dynField.isEmpty() ) {
  throw new IllegalArgumentException( "Access Input: filename field must be set when using dynamic filenames" );
}

Try / catch

try { /* init/run step */ } catch ( KettleException e ) { if ( e.getMessage().contains( "NoField" ) || e.getMessage().contains( "field" ) ) { logError( "Set the filename field in the Access Input dialog" ); } }

Prevention

When it happens

Trigger: Access Input step with 'file defined in a field' / accept-filenames-from-previous-step enabled, but meta.getDynamicFilenameField() is empty because the field name was never set in the step dialog or was lost from the transformation metadata.

Common situations: Copying an Access Input step after switching from static file list to dynamic filenames without re-selecting the field; renaming the upstream field without updating the Access Input 'filename field' setting; exporting/importing transformations that dropped the field name attribute.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/a728abf14b62a011. Report an issue: GitHub.

Appendix: source

Thrown at plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInput.java:267

          // Get total previous fields
          data.totalpreviousfields = data.inputRowMeta.size();

          // Create convert meta-data objects that will contain Date & Number formatters
          data.convertRowMeta = data.outputRowMeta.clone();

          // For String to <type> conversions, we allocate a conversion meta data row as well...
          //
          data.convertRowMeta = data.outputRowMeta.clone();
          for ( int i = 0; i < data.convertRowMeta.size(); i++ ) {
            ValueMetaInterface valueMeta = data.convertRowMeta.getValueMeta( i );
            data.convertRowMeta.setValueMeta( i, ValueMetaFactory.cloneValueMeta(
              valueMeta, ValueMetaInterface.TYPE_STRING ) );
          }

          // Check is filename field is provided
          if ( Utils.isEmpty( meta.getDynamicFilenameField() ) ) {
            logError( BaseMessages.getString( PKG, "AccessInput.Log.NoField" ) );
            throw new KettleException( BaseMessages.getString( PKG, "AccessInput.Log.NoField" ) );
          }

          // cache the position of the field
          if ( data.indexOfFilenameField < 0 ) {
            data.indexOfFilenameField = getInputRowMeta().indexOfValue( meta.getDynamicFilenameField() );
            if ( data.indexOfFilenameField < 0 ) {
              // The field is unreachable !
              logError( BaseMessages.getString( PKG, "AccessInput.Log.ErrorFindingField" )
                + "[" + meta.getDynamicFilenameField() + "]" );
              throw new KettleException( BaseMessages.getString(
                PKG, "AccessInput.Exception.CouldnotFindField", meta.getDynamicFilenameField() ) );
            }
          }

        } // End if first

        String filename = getInputRowMeta().getString( data.readrow, data.indexOfFilenameField );
        if ( log.isDetailed() ) {

View on GitHub (pinned to f3058517a1)