Hallo Liebe Community,
ich hoffe ihr könnt mir weiterhelfen.
Ich habe eine CSV mit Produktdaten. Ich lese mir daraus die Artikelnr und hole mir dann über diese Nummer von einem FTP ein Bild und ein Datenblatt. Nachdem ich diese abgespeichert habe möchte ich das Bild und den Datenblattpfad in eine Firebird-Datenbank schreiben.
Das auslesen und der Download funktioniert schon. Im moment hänge ich am insert des Datenblattpfades. Dazu lese ich erst die lfdnr aus, die mir angibt wie viele datenblätter zu diesem artikel schon vorhanden sind und erhöhe diese um 1. Dann würde ich den Insert zusammenbauen. Er gibt mir bei insertCmd.ExecuteNonQuery() auch 1 zurück, allerdings ist der Pfad zum Datenblatt nicht in der DB. Und ich kann nicht erkennen, Warum? Jemand eine Idee?
Hier mein Code:
Add-Type -Path "C:\Users\Admin1\Desktop\GDI\FirebirdSql.Data.Firebird.dll"
Add-Type -Path "C:\Users\Admin1\Desktop\GDI\WinSCPnet.dll"
$csv = Import-CSV 'C:\Users\Admin1\Desktop\premium_167750.csv' -Delimiter ';'
$DBUser = "SYSDBA"
$DBPassword = "masterkey"
$DBDatabase = "C:\GDI\GDIBLine\Mandanten\VSH\GDI.GDB"
$DBServer = "meinLaptop"
$DBPort = "meinPort"
$DBDialect = "3"
$DBCharset = "Win1252"
$DBRole = ""
$DBConnectionlifetime = "15"
$DBPooling = "true"
$DBPacketSize = "8192"
$shopnr = 1
$bed = "VSH"
$kzgeaendert = "1"
$kzloeschen = "0"
$conn=New-Object FirebirdSql.Data.Firebird.FBConnection
$tr = ";"
$connStr =@"
User=$DBUser$tr
Password=$DBPassword$tr
Database=$DBDatabase$tr
Server=$DBServer$tr
Port=$DBPort$tr
Dialect=$DBDialect$tr
Charset=$DBCharset$tr
Role=$DBRole$tr
Pooling=$DBPooling$tr
Packet Size=$DBPacketSize$tr
"@
$conn.ConnectionString= $connStr
$count = 0
$csv | %{
$count++
}
$i = 1
$csv | %{
$partno = $_.Partno
$conn.Open()
$fbTrans = $conn.BeginTransaction();
$query = "SELECT artikelnr FROM adrart WHERE bestnr = '$partno'"
$cmd=New-Object FirebirdSql.Data.Firebird.FBCommand($query,$conn,$fbTrans)
$vshnr = $cmd.ExecuteScalar()
$cmd.Dispose()
$conn.close()
$pdfname = $partno + "_de_sup.pdf"
$imgname = $partno + ".jpg"
$pdfnameNeu = $vshNr + ".pdf"
$imgnameNeu = $vshNr + ".jpg"
$pdfpfad = "C:\Users\Admin1\Desktop\GDI\Videor\Datenblätter\$pdfnameNeu"
$bildpfad = "C:\Users\Admin1\Desktop\GDI\Videor\Bilder\$imgnameNeu"
$Options = New-Object WinSCP.SessionOptions -Property @{
Hostname = "ftp.host.com"
UserName = "user"
Password = 'password'
GiveUpSecurityAndAcceptAnySshHostKey = "true"
}
$Session = New-Object WinSCP.Session
$Session.ExecutablePath = "C:\Users\Admin1\Desktop\GDI\winscp.exe"
$Session.Open($Options)
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
$imgDownload = $session.GetFiles("/images/$imgname", $bildpfad, $False, $transferOptions)
$imgDownload.Check()
$pdfDownload = $session.GetFiles("/datasheets/$pdfname", $pdfpfad, $False, $transferOptions)
$pdfDownload.Check()
$Session.Close()
if (Test-Path $pdfpfad){
$conn.Open()
$fbTrans = $conn.BeginTransaction();
$select = "Select max(LFDNR) as MAXLFDNR From Shopdokumente Where ShopNr = 1 and Artikelnr = '$vshnr'"
$selectCmd=New-Object FirebirdSql.Data.Firebird.FBCommand($select,$conn,$fbTrans)
$lfdnr = $selectCmd.ExecuteScalar()
$selectCmd.Dispose()
$conn.Close()
if ([string]::isNullOrEmpty($lfdnr)) {$lfdnr = 0}
else {$lfdnr++}
$time = Get-Date
$conn.Open()
$fbTrans = $conn.BeginTransaction();
$insert = "INSERT INTO Shopdokumente (Shopnr, Artikelnr, LFDNR, Datlink, Createdatum, Aenddatum, Aendbed, Createbed, KZGEAENDERT, KZLOESCHEN) VALUES ($shopnr, '$vshnr' , $lfdnr, '$pdfpfad', '$time', '$time', '$bed',
'$bed', $kzgeaendert, $kzloeschen)"
$insertCmd=New-Object FirebirdSql.Data.Firebird.FBCommand($insert,$conn,$fbTrans)
$result = $insertCmd.ExecuteNonQuery()
$insertCmd.Dispose()
$conn.Close()
}else{
Write-Host "Kein Dokument unter dem Pfad '$pdfpfad' gefunden"
}
Write-Host "Artikelnr: $vshnr -> $i von $count Artikel durchlaufen"
$i++
}
Über jeden Hinweis wäre ich sehr dankbar.
Beste Grüße