Problem mit Funktion und Combobox
Hallo,
habe mal wieder ein Powershellproblem bei dem ich nach mehreren Tests nicht mehr weiter weis.
Bisher habe ich noch keine funktionen in der PS geschrieben, somit bin ich da noch nicht so fit.
Folgendes Problem:
Ich möchte mehrere Access Abfragen mit verschiedenen Übergabeparametern durchführen. Die ergebnisse sollen in verschiedenen comboboxen einer Windowsform ausgegeben werden.
Hier mal der Code:
Leider weiß ich nicht, wie ich in der Funktion verschiedene Comboboxen ansprechen kann. Wenn ich den comboboxnamen direkt in der funktion angebe ($gesellschaftscombo)
dann funktioniert es. Da ich aber in den verschiedenen funktionsaufrufen verschiedene Boxen ansprechen muss, muss ich den Namen ja irgendwie über geben.
Habe es schon versucht, in der Variable $test den Namen der Combobox als String zu speichern. Wenn ich mir $test in der Funktion ausgebe, steht auch $gesellschaftcombo drin, aber die Ergebnisse
werden trotzdem nicht mit .Items.Add geadded.
Könnte mir hier jemand helfen?
Vielen Dank im voraus
habe mal wieder ein Powershellproblem bei dem ich nach mehreren Tests nicht mehr weiter weis.
Bisher habe ich noch keine funktionen in der PS geschrieben, somit bin ich da noch nicht so fit.
Folgendes Problem:
Ich möchte mehrere Access Abfragen mit verschiedenen Übergabeparametern durchführen. Die ergebnisse sollen in verschiedenen comboboxen einer Windowsform ausgegeben werden.
Hier mal der Code:
$tabelleGesellschaft = "tab_SET_Gesellschaft"
$selectbefehl = "distinct Langname"
$global:spaltenname = "Langname"
$test = '$gesellschaftcombo'
function get-ADBData($tabelle, $befehl, $spaltenname, [string]$combo)
{
[string]$DBPath = "R:\AD-Daten.accdb"
$adOpenStatic = 3
$adLockOptimistic = 3
$cn = new-object -comobject ADODB.Connection
$rs = new-object -comobject ADODB.Recordset
$cn.Open("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=$DBPath")
$rs.Open("Select $selectbefehl From $tabelleGesellschaft", $cn, $adOpenStatic, $adLockOptimistic)
$rs.MoveFirst()
do
{
$var = ""
$var = $rs.Fields.item($global:spaltenname).Value
$test.items.add($var)
if ($rs.EOF -eq $false) { $rs.MoveNext() }
}
until ($rs.EOF -eq $True)
$rs.close()
$cn.close()
}
get-ADBData($tabelleGesellschaft, $selectbefehl, $spaltenname, $test)
Leider weiß ich nicht, wie ich in der Funktion verschiedene Comboboxen ansprechen kann. Wenn ich den comboboxnamen direkt in der funktion angebe ($gesellschaftscombo)
dann funktioniert es. Da ich aber in den verschiedenen funktionsaufrufen verschiedene Boxen ansprechen muss, muss ich den Namen ja irgendwie über geben.
Habe es schon versucht, in der Variable $test den Namen der Combobox als String zu speichern. Wenn ich mir $test in der Funktion ausgebe, steht auch $gesellschaftcombo drin, aber die Ergebnisse
werden trotzdem nicht mit .Items.Add geadded.
Könnte mir hier jemand helfen?
Vielen Dank im voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 326845
Url: https://administrator.de/forum/problem-mit-funktion-und-combobox-326845.html
Ausgedruckt am: 23.12.2024 um 03:12 Uhr
7 Kommentare
Neuester Kommentar
Moin,
das Objekt deiner Form kennt die Eigenschaft Controls der du den Namen deiner Combobox übergeben kannst um es anzusprechen:
Aber bitte den richtigen Namen angeben und nicht den Variablennamen!
Ich würde das zwar alles über DataSource und einer Datatable an die Controls binden aber soweit scheinst du dann doch noch nicht zu sein
Gruß mik
das Objekt deiner Form kennt die Eigenschaft Controls der du den Namen deiner Combobox übergeben kannst um es anzusprechen:
$deineForm.Controls['ComboboxXYZ'].Items.Add($var')
Ich würde das zwar alles über DataSource und einer Datatable an die Controls binden aber soweit scheinst du dann doch noch nicht zu sein
Gruß mik
Falsch, ich habe doch oben geschrieben das dort der wirkliche Name des Controls reinkommt nicht der Variablenname mit Dollar.
Also oben außerhalb der Funktion deine Variable $test auf den Namen festlegen den du beim erzeugen der Combobox festgelegt hast
und dann in der Funktion den Parameter der Funktion einsetzen
Geht 200%
Und war das jetz so schwierig?! Nee was
Einfach mal die Doku zu den Windows Forms lesen!
https://msdn.microsoft.com/de-de/library/system.windows.forms.control.co ...
Also oben außerhalb der Funktion deine Variable $test auf den Namen festlegen den du beim erzeugen der Combobox festgelegt hast
$test = "Combobox1"
$Form1.Controls[$combo].Items.Add($var)
Geht 200%
Und war das jetz so schwierig?! Nee was
Einfach mal die Doku zu den Windows Forms lesen!
https://msdn.microsoft.com/de-de/library/system.windows.forms.control.co ...
Ja nee, du rufst die Funktion ja falsch auf!
So muss das:
oder so
In Powershell werden bei Funktionen im Aufruf die Parameter nicht mit Komma getrennt sondern entweder per Leerzeichen oder mit zusätzlicher Angabe des benannten Parameters.
Wen du mal die Doku zu Powershell-Funktionen lesen würdest könntest du das alles auch schön nachlesen, und bräuchtest nicht stundenlang, nur mal so nebenbei...
So muss das:
get-ADBData $tabelleGesellschaft $selectbefehl $spaltenname $test
Get-ADBData -Tabelle $tabelleGesellschaft -Befehl $selectBefehl -Spaltenname $spaltenname -Combo $test
In Powershell werden bei Funktionen im Aufruf die Parameter nicht mit Komma getrennt sondern entweder per Leerzeichen oder mit zusätzlicher Angabe des benannten Parameters.
Ich würde sagen reboot tut gut
Der hilft dir hier nichts . Das Problem liegt zwischen Stuhl und Bildschirm Wen du mal die Doku zu Powershell-Funktionen lesen würdest könntest du das alles auch schön nachlesen, und bräuchtest nicht stundenlang, nur mal so nebenbei...
Au möhr du stehst echt auf dem Schlauch ... denn du hast hier diverse Flüchtigkeitsfehler in den Variablen drin... (du deklarierst $global:spaltenname und $global:test und unten nutzt du $spaltenname und $test)
Wenn das nicht geht musst du deinen gesamten Code posten ich weiß nämlich nicht ob du noch immer nicht verstanden hast was ich mit den internen Bezeichnern der Controls und der Form meine.
http://ss64.com/ps/syntax-functions.html
Ciao
mik
Wenn das nicht geht musst du deinen gesamten Code posten ich weiß nämlich nicht ob du noch immer nicht verstanden hast was ich mit den internen Bezeichnern der Controls und der Form meine.
$tabelleGesellschaft = "tab_SET_Gesellschaft"
$selectbefehl = "distinct Langname"
$global:spaltenname = "Langname"
$global:test= 'gesellschaftcombo'
function get-ADBData($tabelle, $befehl, $spaltenname, [string]$combo)
{
[string]$DBPath = "R:\AD-Daten.accdb"
$adOpenStatic = 3
$adLockOptimistic = 3
$cn = new-object -comobject ADODB.Connection
$rs = new-object -comobject ADODB.Recordset
$cn.Open("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=$DBPath")
$rs.Open("Select $selectbefehl From $tabelleGesellschaft", $cn, $adOpenStatic, $adLockOptimistic)
$rs.MoveFirst()
while(!$rs.EOF){
$var = $rs.Fields.item($global:spaltenname).Value
$Form1.Controls[$combo].Items.Add($var)
$rs.MoveNext()
}
$rs.close()
$cn.close()
}
get-ADBData $tabelleGesellschaft $selectbefehl $global:spaltenname $global:test
Eine charmante Art und weiße mir meine Dummheit vor zu halten ;)
Naja, PEBCAC halt . Dumm ist wer dummes tut und die Doku nicht liest,sorry:http://ss64.com/ps/syntax-functions.html
Ciao
mik