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
- Open the Access Input step dialog and set 'Get filename from field' to the upstream field that contains the file paths.
- Verify the upstream step actually outputs a field with that exact name (case-sensitive).
- 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
- Always re-check the 'Filename field' setting after switching to dynamic files
- Standardize upstream field names (no renames without downstream updates)
- Preview the previous step's output to confirm the field exists
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
- AccessInput.Exception.CouldnotFindField
- AccessInput.Error.ErrorReadingFile
- Group field ' ' could not be found in the input stream
- SalesforceUpdateDialog.FieldsMissing.DialogMessage
- A step in transformation [" + transMeta.toString() + "]…
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)