[AccessD] Powershell...

Darryl Collins darryl at whittleconsulting.com.au
Thu Aug 16 17:23:31 CDT 2018


Hi Stuart,

Yes, I agree.  Didn't post the code last night (my time) as I didn't have it handy.  Here we go 😊
I have changed all of the fields types in the database table to strings for the moment just to try and make this work.

My suspects are one of the following

1: The CSV file will only ever have a single line. I am currently using a 'foreach' command which loops thru the file.
Maybe I am populating a 2nd set of blank attributes?  This doesn't seem likely as only a the single line is written into the test text file.

2: When powershell runs more than once it doesn't seem to close down Access properly and I am left with a acdb lock file.  Not sure why but it might be locking up the table and preventing further attempts to write to it.

3: I have done something dumb with the SQL string that does the insert (this is possible, although it looks ok from what I can see).  I did try it once with hard coded values and it wrote it into the table, but only once - thus my thoughts about the table being locked by earlier attempts.

I like this powershell approach as it runs external with VBA having to have an interval timer or looping to constantly check the folder - it is fast and work seamlessly in the background, but I am bumbling around with the code as I have little experience with doing more complex things in Powershell.

Happy if anyone has any advice. 

Thanks to John C for your email as well.  Always appreciate your insights given your experience and expertise with all things Access.

Cheers
Darryl



###============== Start of code ===============================================
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "V:\ReportingQueue\"
    $watcher.Filter = "*.*"
    $watcher.IncludeSubdirectories = $true
    $watcher.EnableRaisingEvents = $true  




### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { $path = $Event.SourceEventArgs.FullPath
                $changeType = $Event.SourceEventArgs.ChangeType
                ##$logline = "$(Get-Date), $changeType, $Path"
                ##Add-content "V:\ReportingLog\ReportingLog.txt" -value $logline
               ### could write to text log file fine in testing
               
               
               
                $connectstring = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=V:\ReportingLog\ReportingLogDB.accdb"
                $conn = New-Object System.Data.OleDb.OleDbConnection($connectstring)
                $conn.Open()
                ### $File = Import-Csv "V:\ReportingQueue\IMG5029.csv"
                $File = Import-Csv -value “$path"
    
                foreach ($item in $File) 
                { 
                $Chrono =  $item.Chrono
                $Account = $item.Account
                $ProberRun = $item.ProberRun
                $CreateEveID = $item.CreateEveID

               
                Add-content "V:\ReportingLog\ReportingLog.txt" -value “$(Get-Date)"
                Add-content "V:\ReportingLog\ReportingLog.txt" -value “$path"
                Add-content "V:\ReportingLog\ReportingLog.txt" -value “$Chrono”
                Add-content "V:\ReportingLog\ReportingLog.txt" -value “$Account”
                Add-content "V:\ReportingLog\ReportingLog.txt" -value “$ProberRun”
                Add-content "V:\ReportingLog\ReportingLog.txt" -value “$CreateEveID”
                ### Testing that the csv file is being read correctly - write results to txt file

                
                $cmd = $conn.CreateCommand()
                $cmd.CommandText="INSERT INTO tblReportingQueue(Chrono,Account,ProberRun,CreateEveID) VALUES('$Chrono','$Account','$ProberRun','$CreateEveID')"
                $cmd.ExecuteNonQuery()
                }
                $conn.Close()
              }
              
              
                 
### DECIDE WHICH EVENTS SHOULD BE WATCHED (only need add in this case)
    Register-ObjectEvent $watcher "Created" -Action $action
### Register-ObjectEvent $watcher "Changed" -Action $action
### Register-ObjectEvent $watcher "Deleted" -Action $action
### Register-ObjectEvent $watcher "Renamed" -Action $action
    while ($true) {sleep 5}

###============== End  of code ===============================================









-----Original Message-----
From: AccessD <accessd-bounces at databaseadvisors.com> On Behalf Of Stuart McLachlan
Sent: Thursday, 16 August 2018 9:54 PM
To: Access Developers discussion and problem solving <accessd at databaseadvisors.com>
Subject: Re: [AccessD] Powershell...

If the ANPK is going up, I'd suspect a problem with your insert rather than with Powershell.
Is it  an SQL statement?

How about posting the code.


On 16 Aug 2018 at 10:08, Darryl Collins wrote:

> Hi Folks,
> 
> I am trying to use powershell to write from a CSV to an Access Table 
> when a file is added to a folder.
> 
> I have the powershell 'trigger' part working and I can get powershell 
> to write to a text file when triggered.
> 
> I can open and extract that data in the CSV I need (that is the file 
> that saved to the said folder which triggers powershell into action).
> 
> But I want to write the single line from the csv file to an access 
> table.  I can create the connection in powershell and it opens the 
> table. It even seems to attempt to write it into the table.  No data 
> is being written but the auto key is creeping up after every attempt, 
> which suggests something is going on.
> 
> Is anyone skilled at powershell code, or can point me to a list / 
> group that might be able to help.
> 
> If it helps, I can post the code, but that might not be for a few 
> hours.
> 
> Cheers
> Darryl.
> 
> 
> 
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 


-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com



More information about the AccessD mailing list