c# code below, change and modify to independent Microsoft access database engine is installed or not.

using System;
using System.Data;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace PortableMdbExtractor
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            string mdbPath = FindMdbFile();
            
            if (string.IsNullOrEmpty(mdbPath))
            {
                Console.WriteLine("Manufactory2.mdb file not found.");
                return;
            }

            string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Bim_Spec_Export.csv");
            
            if (ExtractColumns(mdbPath, outputFile))
            {
                Console.WriteLine("Data exported to: " + outputFile);
            }
            
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }

        static string FindMdbFile()
        {
            // Check common locations first
            string programFilesX86 = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
            string programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
            
            string[] pathsToCheck = {
                Path.Combine(programFilesX86, @"Tamin\DataBase\Manufactory2.mdb"),
                Path.Combine(programFiles, @"Tamin\DataBase\Manufactory2.mdb")
            };

            foreach (var path in pathsToCheck)
            {
                if (File.Exists(path))
                {
                    return path;
                }
            }

            // If not found, prompt user
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Title = "Locate Manufactory2.mdb";
            openFileDialog.Filter = "Access Database Files (*.mdb)|*.mdb";
            openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);

            return openFileDialog.ShowDialog() == DialogResult.OK ? openFileDialog.FileName : null;
        }

        static bool ExtractColumns(string mdbPath, string outputPath)
        {
            // Define the columns to extract
            string[] columnNames = { "Per_ID", "Per_Bim", "Per_Pers", "Per_LName", "Per_FName", "Per_DName", "Per_NatCod", "Per_IdNo" };

            // Try both Jet and ACE providers without requiring installation
            string[] providersToTry = {
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=",
                "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
            };

            foreach (var provider in providersToTry)
            {
                try
                {
                    string connectionString = provider + mdbPath + ";";
                    using (OleDbConnection connection = new OleDbConnection(connectionString))
                    {
                        connection.Open();

                        // Check if the table 'Bim_Spec' exists and has the necessary columns
                        DataTable schema = connection.GetOleDbSchemaTable(
                            OleDbSchemaGuid.Columns,
                            new object[] { null, null, "Bim_Spec", null });

                        if (schema == null || schema.Rows.Count < columnNames.Length)
                        {
                            Console.WriteLine("Error: Bim_Spec table doesn't have the required columns.");
                            return false;
                        }

                        // Execute query to select the defined columns
                        string query = "SELECT " + string.Join(", ", columnNames) + " FROM Bim_Spec";
                        using (OleDbCommand command = new OleDbCommand(query, connection))
                        using (OleDbDataReader reader = command.ExecuteReader())
                        using (StreamWriter writer = new StreamWriter(outputPath, false, Encoding.UTF8))
                        {
                            // Write header
                            writer.WriteLine(string.Join(",", columnNames));

                            // Write data
                            while (reader.Read())
                            {
                                StringBuilder line = new StringBuilder();
                                for (int i = 0; i < columnNames.Length; i++)
                                {
                                    if (i > 0)
                                    {
                                        line.Append(",");
                                    }
                                    line.Append("\"").Append(reader[i].ToString().Replace("\"", "\"\"")).Append("\"");
                                }
                                writer.WriteLine(line.ToString());
                            }
                        }
                    }
                    return true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Attempt with " + provider.Split('=')[1].Split(';')[0] + " failed: " + ex.Message);
                }
            }

            Console.WriteLine("All connection attempts failed. Try installing Microsoft Access Database Engine:");
            Console.WriteLine("https://www.microsoft.com/en-us/download/details.aspx?id=13255");
            return false;
        }
    }
}