auch WMI aber Array Problem

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

auch WMI aber Array Problem

Beitrag von AUGE_OHR »

hi

Code: Alles auswählen

LOCAL aProp := {"BootDevice",;
                "BuildNumber",;
                "BuildType",;
                "Caption",;
                "CodeSet",;
                 ...
                "Version",;
                "WindowsDirectory" }

bCollBlock :=  {|oService, n| AADD(bItem,{ n,;
   PADR(oService:BootDevice                  ,40, " " ),;
   PADR(oService:BuildNumber                 ,40, " " ),;
   PADR(oService:BuildType                   ,40, " " ),;
   PADR(oService:Caption                     ,40, " " ),;
   PADR(oService:CodeSet                     ,40, " " ),;
...
   PADR(oService:Version                     ,40, " " ),;
   PADR(oService:WindowsDirectory            ,40, " " ) })}

#IF XPPVER > 01900333
   ComEvalCollection( oWmiInstances , bCollBlock )
#ENDIF
ich habe also mal ein Array mit den Namen der Property angelegt.
der Codeblock bCollBlock funktioniert "so" wie es ist, aber ich möchte den auf Array umstellen

Code: Alles auswählen

bCollBlock :=  {|oService, n| AADD(bItem,{ n,;
AEVAL(aProp,{|oService,n| (aProp[n]) }) })}
gibt nicht das gewünschte Ergebniss :( wo ist mein "Denkfehler" ?
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: auch WMI aber Array Problem

Beitrag von brandelh »

Hi,

im ersten fragst du den aktuellen Inhalt des oService:Property ab und übergibst den Inhalt an PADR()...

Code: Alles auswählen

PADR(oService:BootDevice                  ,40, " " )
im zweiten gibst du zwar den Parameter oService an, aber du fragst keine Inhalte ab.

Code: Alles auswählen

AEVAL(aProp,{|oService,n| (aProp[n]) }) })}
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: auch WMI aber Array Problem

Beitrag von AUGE_OHR »

brandelh hat geschrieben:im ersten fragst du den aktuellen Inhalt des oService:Property ab und übergibst den Inhalt an PADR()...

Code: Alles auswählen

PADR(oService:BootDevice                  ,40, " " )
ich denke PADR() ist nur zur "formatierung".
brandelh hat geschrieben: im zweiten gibst du zwar den Parameter oService an, aber du fragst keine Inhalte ab.

Code: Alles auswählen

AEVAL(aProp,{|oService,n| (aProp[n]) }) })}
hm ... ja ... aber in AEVAL() wird oService gar nicht genutzt ...

Code: Alles auswählen

USE Kunden NEW                // Daten aus DBF-Datei 
aArray := Array( FCount() )   // in Array einlesen 
AEval( aArray, {|x,i| aArray[i] := ; 
                     { PadR( FieldName(i), 10) , ; 
                       FieldGet(i) ; 
                     } ; 
               } ) 
wo wird da wie "x" genutzt ?
wofür steht das "x" vom |x,i| ... ich verwende nur das "i"

ok ich versuche es mal andersrum: ich muss ja für ComEvalCollection() einen Codeblock bauen

Code: Alles auswählen

bCollBlock :=  {|oService, n| AADD(bItem,{ n,;
das ist nun dem Help File "abgeguckt" wobei ich statt dem QOUT() ein AADD() nehme.

oService wird wohl die Collection sein welche ComEvalCollection(oActiveX,bCodeblock) ausführt.
während "n" aus ComEvalCollection() --> nElem ist mir nicht ganz klar wie ich oService "weiter-
verwenden" kann denn nun kämen die Property von oService dran.

Code: Alles auswählen

oService:BootDevice ,;
oService:BuildNumber ,;
...
Der Codeblock besteht also aus Object + Property ... und ich habe die Namen der Property im Array

Frage : wie bekomme ich ein Object mit einem String zusammen sodas ich eine Property habe ?

Code: Alles auswählen

VALTYPE(oService) -> O
VALTYPE(aitem[x,y] ) -> "C","N","D" ... -> String

"oService" +":"+ aitem[x,y] -> oService:BootDevice ???
... oder muss das im Codeblock nochmal in einen Codeblock ?
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: auch WMI aber Array Problem

Beitrag von Martin Altmann »

Hallo Jimmy,
AUGE_OHR hat geschrieben:

Code: Alles auswählen

USE Kunden NEW                // Daten aus DBF-Datei 
aArray := Array( FCount() )   // in Array einlesen 
AEval( aArray, {|x,i| aArray[i] := ; 
                     { PadR( FieldName(i), 10) , ; 
                       FieldGet(i) ; 
                     } ; 
               } ) 
wo wird da wie "x" genutzt ?
wofür steht das "x" vom |x,i| ... ich verwende nur das "i"
nur kurz die Erklärung:
Du erzeugst ein Array, das so viele (mit NIL initialisierte!!!) Elemente enthält, wie die Datenbank Felder.
Danach durchläufst Du das Array und nimmst jeden einzelnen Eintrag (=x), der sich nicht von den anderen Einträgen unterscheidet( :!: ) - deshalb wird hier mit dem "Schleifenzähler" i gearbeitet!
An die i. Stelle Deines Arrays wird der i. Feldname und der entsprechende Inhalt des i. Feldes abgelegt.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Antworten