{"record":{"id":"a728abf14b62a011","repo":"pentaho/pentaho-kettle","slug":"accessinput-log-nofield","errorCode":"AccessInput.Log.NoField","errorMessage":"AccessInput.Log.NoField","messagePattern":"AccessInput\\.Log\\.NoField","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInput.java","lineNumber":267,"sourceCode":"          // Get total previous fields\n          data.totalpreviousfields = data.inputRowMeta.size();\n\n          // Create convert meta-data objects that will contain Date & Number formatters\n          data.convertRowMeta = data.outputRowMeta.clone();\n\n          // For String to <type> conversions, we allocate a conversion meta data row as well...\n          //\n          data.convertRowMeta = data.outputRowMeta.clone();\n          for ( int i = 0; i < data.convertRowMeta.size(); i++ ) {\n            ValueMetaInterface valueMeta = data.convertRowMeta.getValueMeta( i );\n            data.convertRowMeta.setValueMeta( i, ValueMetaFactory.cloneValueMeta(\n              valueMeta, ValueMetaInterface.TYPE_STRING ) );\n          }\n\n          // Check is filename field is provided\n          if ( Utils.isEmpty( meta.getDynamicFilenameField() ) ) {\n            logError( BaseMessages.getString( PKG, \"AccessInput.Log.NoField\" ) );\n            throw new KettleException( BaseMessages.getString( PKG, \"AccessInput.Log.NoField\" ) );\n          }\n\n          // cache the position of the field\n          if ( data.indexOfFilenameField < 0 ) {\n            data.indexOfFilenameField = getInputRowMeta().indexOfValue( meta.getDynamicFilenameField() );\n            if ( data.indexOfFilenameField < 0 ) {\n              // The field is unreachable !\n              logError( BaseMessages.getString( PKG, \"AccessInput.Log.ErrorFindingField\" )\n                + \"[\" + meta.getDynamicFilenameField() + \"]\" );\n              throw new KettleException( BaseMessages.getString(\n                PKG, \"AccessInput.Exception.CouldnotFindField\", meta.getDynamicFilenameField() ) );\n            }\n          }\n\n        } // End if first\n\n        String filename = getInputRowMeta().getString( data.readrow, data.indexOfFilenameField );\n        if ( log.isDetailed() ) {","sourceCodeStart":249,"sourceCodeEnd":285,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInput.java#L249-L285","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// Access Input step dialog, before: Filename field = (empty)\n// after: Filename field = \"filename\"\n// or programmatically:\nmeta.setDynamicFilenameField( \"filename\" );","handlingStrategy":"validation","validationCode":"// before run, if accepting files from a field\nString dynField = meta.getDynamicFilenameField();\nif ( dynField == null || dynField.isEmpty() ) {\n  throw new IllegalArgumentException( \"Access Input: filename field must be set when using dynamic filenames\" );\n}","typeGuard":null,"tryCatchPattern":"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\" ); } }","preventionTips":["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"],"tags":["kettle","ms-access","configuration","field-mapping","step"],"backgroundTag":"missing-required-config-field","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}