Autor Beitrag
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 12.08.09 13:24 
Moin!

Mit diesen beiden Komponenten soll die WMI-Abfrage unter Delphi vereinfacht werden. Die Komponenten können in die IDE installiert oder dynamisch verwendet werden. Dabei stellt TWMIConnection die Verbindung zum WMI-Dienst auf einer Maschine her, während TMWIQuery Abfragen kapselt. Als Goodie ist noch eine Funktion enthalten, die die installierte Software auflistet (ist zwar keine WMI-Funktion, aber per WMI gibt´s nur die MSI-basierte Software).

Im Anhang befindet sich das Projekt-Archiv mit folgenden Dateien:
  • WMITools.pas
    Der Quelltext der Komponenten und der Software-Abfrage-Funktion
  • WbemScripting_TLB.pas
    WMI-TypeLibrary (sollte ab W2k passen)
Installationsanleitung (für D7(pro)):
  1. Die beiden .pas-Dateien aus dem Projekt-Archiv in den \lib-Ordner der Delphi-Installation kopieren (normalerweise C:\Programme\Borland\Delphi7\lib)
  2. Delphi-IDE starten, Menü Datei -> Alle schließen anklicken (falls ein Default-Projekt angelegt wurde)
  3. Menü Komponente -> Packages installieren anklicken
  4. Eintrag Borland Anwenderkomponenten auswählen, dann Bearbeiten anklicken, die Frage "Soll dieses Dialogfenster geschlossen und <Pfad>\Lib\dclusr.dpk geöffnet werden?" mit Ja beantworten
  5. Im Fenster des Packages erst den Button Hinzu, dann auf Durchsuchen klicken
  6. Die Datei WMITools.pas aus dem \lib-Ordner der Delpih-Installation auswählen und mit Öffnen bestätigen
  7. Dann den Button Compil. im Package-Fenster anklicken, das Packe wird neu übersetzt (evtl. Hinweise entsprechend bestätigen; ggfs. werden Warnungen ausgegeben, dass die zusätzliche TypeLib-Unit implizit mit in das Package aufgenommen wurden, das ist OK so)
  8. Fertig, IDE schließen (Package speichern, falls beim Beenden gefragt)
  9. IDE wieder öffnen, jetzt sollte die neue Komponente im (evtl. neu angelegten) Register WMI zur Verfügung stehen
Hinweis: Eigenschaften von WMI-Objekten können auch Array-Werte annehmen. In dieser Version werden noch keine Array-Werte verarbeitet (gibt entsprechende Fehlermeldung).

Zur Verwendung einfach mal in die Demo schauen, da werden sie geholfen.

cu
Narses
Einloggen, um Attachments anzusehen!
_________________
There are 10 types of people - those who understand binary and those who don´t.


Zuletzt bearbeitet von Narses am Mo 17.08.09 01:02, insgesamt 2-mal bearbeitet

Für diesen Beitrag haben gedankt: tschuldt
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 13.08.09 22:28 
Der WMI Explorer schaut ein wenig unübersichtlich aus und reagiert zudem stellenweise etwas träge. Auch die Nutzerführung könnte etwas bessersein.

Z.B. Anzeige der WMI-Query, die abgesetzt wurde, ListView mit den Spalten, die zurückgegeben wurden, Kombinierte Abfragen (z.B. Auflistung der Netzwerk-Verbindungen + Zugehöriger Daten.

Auch eine Möglichkeit zum Absetzen der SELECT-Abfragen an die WMI wär sicherlich nicht schlecht.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 13.08.09 22:40 
Moin!

Erstmal Danke für deinen Test. ;)

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Der WMI Explorer schaut ein wenig unübersichtlich aus und reagiert zudem stellenweise etwas träge. Auch die Nutzerführung könnte etwas bessersein.
Ähm, das ist eine Demo für die Kompo, nicht der Zweck dieses Threads. :) Schau dir den relevanten Quelltext an (sind ja nur ein paar Zeilen), nicht die GUI. :zwinker:

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
ListView mit den Spalten, die zurückgegeben wurden
Es wird immer nur genau eine Spalte abgefragt, deshalb wird ja auch in TStrings-Nachfahren geschrieben. :idea:

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Kombinierte Abfragen (z.B. Auflistung der Netzwerk-Verbindungen + Zugehöriger Daten.

Auch eine Möglichkeit zum Absetzen der SELECT-Abfragen an die WMI wär sicherlich nicht schlecht.
Sicher durchaus berechtigte Wünsche für eine Profi-Kompo - die dann aber leider wieder so komplex wird, dass man sie nicht mehr einfach benutzen kann und zig Seiten Doku wälzen (viel schlimmer aus meiner Sicht: schreiben! 8)) muss. :nixweiss:

Um also das Design-Konzept nochmal hervorzuheben: es sollte einfach werden, Daten per WMI abzufragen, nicht besonders viele Möglichkeiten bieten.

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 13.08.09 23:11 
k, dann zerpflücken wir mal eben den Source der Komponente ein wenig ;-)

Also fangen wir mal mit der WMI Connection an:

  • Konstruktor und Destruktor sind asymmetrisch: Im Konstruktor fehlen einige Initialisierungen, im Destruktor wird nicht sichergestellt, dass die Connection geschlossen wird --> Memleak bei WMI-Zugriff.
  • Open und Close sind nicht Status-unabhängig: Doppeltes öffnen einer Verbindung gibt die vorherige Verbindung nicht sauber frei.
  • Das Close in Zeile 130 (else-Teil) kann entfallen, da das im Except bereits ausgeführt wird. Insbesondere, da deine Statuskontrolle im Source nicht die beste ist (auch wenn ein Double-Free bei Dir keinen Fehler verursacht)
  • Doppeltes Führen des Aktivitätszustandes: Wenn Du anhand der Objekt-Referennzen bereits prüfen kannst, ob eine Verbindung besteht, sollte dies nicht über eine zusätzliche Variable geschehen (sei denn, diese Überprüfungen wären im Zweifelsfall zu umfangreich oder langwierig)
  • If Cond Then ... Else Fail sollte besser als If not Cond Then Fail geschrieben werden, speziell in Verschachtelungen
  • Sollte nicht eine WMIQuery final auf die zugehörige Connection instantiiert werden?
  • Statt Typecast mit As Abfrage mit is und ungeprüftem Interface-Typecast nutzen. Dann entfällt die Exception-Prüfung in GetClassList und GetPropertyList
  • Es fehlt eine Methode, mit der man in einem Query-Object einen eigenen Query-String an die WMI richten kann und dessen Ergebnis als 2D-Array zurückgegeben wird
  • Null-Werte sollten nicht ignoriert werden. Auch wenn ich das grundlegend genauso sehe, dass man nicht ausgefüllte Felder nicht zurückgibt, erzeugt grad die Variante bei einsspaltigen Abfragen das Problem, dass man die Zuordnung von Zeilen und Spalten eines Wertes verliert, wenn manche Zeilen eliminiert werden
  • Sollte deine Komponente nicht zumindest mit Variants oder OleVariants für die Wertrückgabe arbeiten, um mehr Flexibilität herein zu bringen? Grad weil öfters mal Zahlen als Zahlen zurückzugeben wären ;-)
  • Die GetInstalledSoftware-Funktion passt thematisch und Implementatorisch nicht so richtig in diese Unit ;-)


Bin schon auf das verbesserte Upstream-Release der Unit gespannt :mrgreen:

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 13.08.09 23:54 
Moin!

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Konstruktor und Destruktor sind asymmetrisch: Im Konstruktor fehlen einige Initialisierungen, im Destruktor wird nicht sichergestellt, dass die Connection geschlossen wird --> Memleak bei WMI-Zugriff.
@Init: Ich gehe von 0-initialisiertem Klassenmemory aus und setze nur die nicht-0-Werte. Wenn du die 0-Variablen auch initialisiert haben willst, kannst du den Code gerne für dich anpassen.
@MemLeak: Der Destruktor gibt die Interfaces durch NIL-Setzen frei, da gibt´s kein MemLeak. Du bist anderer Meinung? Beweise, bitte! ;)

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Open und Close sind nicht Status-unabhängig: Doppeltes öffnen einer Verbindung gibt die vorherige Verbindung nicht sauber frei.
Richtig, das ist banane, wird geändert.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Das Close in Zeile 130 (else-Teil) kann entfallen, da das im Except bereits ausgeführt wird. Insbesondere, da deine Statuskontrolle im Source nicht die beste ist (auch wenn ein Double-Free bei Dir keinen Fehler verursacht)
Schau ich mir in dem Zusammenhang an.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Doppeltes Führen des Aktivitätszustandes: Wenn Du anhand der Objekt-Referennzen bereits prüfen kannst, ob eine Verbindung besteht, sollte dies nicht über eine zusätzliche Variable geschehen (sei denn, diese Überprüfungen wären im Zweifelsfall zu umfangreich oder langwierig)
Kinderkram. :roll:

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
If Cond Then ... Else Fail sollte besser als If not Cond Then Fail geschrieben werden, speziell in Verschachtelungen
Dito.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Sollte nicht eine WMIQuery final auf die zugehörige Connection instantiiert werden?
Warum? Sehe ich nicht so.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Statt Typecast mit As Abfrage mit is und ungeprüftem Interface-Typecast nutzen. Dann entfällt die Exception-Prüfung in GetClassList und GetPropertyList
Schau ich mir an.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Es fehlt eine Methode, mit der man in einem Query-Object einen eigenen Query-String an die WMI richten kann und dessen Ergebnis als 2D-Array zurückgegeben wird
Scheint, du hast den letzten Post überlesen. ;)

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Null-Werte sollten nicht ignoriert werden. Auch wenn ich das grundlegend genauso sehe, dass man nicht ausgefüllte Felder nicht zurückgibt, erzeugt grad die Variante bei einsspaltigen Abfragen das Problem, dass man die Zuordnung von Zeilen und Spalten eines Wertes verliert, wenn manche Zeilen eliminiert werden
Jup, das ist mir noch gar nicht aufgefallen. :oops: Muss ich anpassen.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Sollte deine Komponente nicht zumindest mit Variants oder OleVariants für die Wertrückgabe arbeiten
Nein, Designkonzept.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Die GetInstalledSoftware-Funktion passt thematisch und Implementatorisch nicht so richtig in diese Unit
Dann ignorier sie doch einfach. ;) Ich finde sie da gut aufgehoben (nicht zuletzt, weil ich sie in genau diesem Kontext brauche).

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 14.08.09 00:25 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Konstruktor und Destruktor sind asymmetrisch: Im Konstruktor fehlen einige Initialisierungen, im Destruktor wird nicht sichergestellt, dass die Connection geschlossen wird --> Memleak bei WMI-Zugriff.
@Init: Ich gehe von 0-initialisiertem Klassenmemory aus und setze nur die nicht-0-Werte. Wenn du die 0-Variablen auch initialisiert haben willst, kannst du den Code gerne für dich anpassen.
@MemLeak: Der Destruktor gibt die Interfaces durch NIL-Setzen frei, da gibt´s kein MemLeak. Du bist anderer Meinung? Beweise, bitte! ;)

Zwecks Initialisierung: Nur, wenn der Memory Manager das macht. Muss nicht zwingend gegeben sein.

@Memleak: OnDisconnect wird nicht aufgerufen --> Asymmetrisches Verhalten falls User dort Initialisierungen drin hat. Zudem traue ich den M$-Klassen nicht, dass die auch rekursiv korrekt garbage-collecten. q.e.d. (Beweis durch Authorität)

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Sollte nicht eine WMIQuery final auf die zugehörige Connection instantiiert werden?
Warum? Sehe ich nicht so.

Ich sehe eine Query mehr oder weniger als ein finales Objekt, was an eine Connection gebunden ist, statt einem frei herumschwirrenden Objekt, was ständig neu genutzt wird. Dies macht insbesondere die Abfrage der Spalten und der Werte je nach Implementation einfacher, da man viele Dinge cachen kann. Dies würde sogar der Performance gut tun ;-)

Ich seh die WMI hierbei ähnlich einem RDBMS (ja, ich weiß, ist keines, aber ähnlich): Ich habe eine Verbindung zu einer Datenquelle (Connection), an die ich Anfragen (Queries\Prepared Statements) schicken kann und daraufhin ein Ergebnis (Resultset) erhalte.

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Es fehlt eine Methode, mit der man in einem Query-Object einen eigenen Query-String an die WMI richten kann und dessen Ergebnis als 2D-Array zurückgegeben wird
Scheint, du hast den letzten Post überlesen. ;)

Nö, ich glaub nicht ;-) War mehr oder weniger ein Verbesserungsvorschlag, der sich ohne große Änderungen in die aktuelle Unit einbinden ließe, ohne deine "Ein-Spalten-Abfragerei" herausnehmen zu müssen. Vielmehr würde es dem User erlauben, wesentlich effizienter die Datenn abzufragen.

BTW: Du hast eine WSL-Injection in deiner Unit :twisted: ;P

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Null-Werte sollten nicht ignoriert werden. Auch wenn ich das grundlegend genauso sehe, dass man nicht ausgefüllte Felder nicht zurückgibt, erzeugt grad die Variante bei einsspaltigen Abfragen das Problem, dass man die Zuordnung von Zeilen und Spalten eines Wertes verliert, wenn manche Zeilen eliminiert werden
Jup, das ist mir noch gar nicht aufgefallen. :oops: Muss ich anpassen.

Und das, wo du doch täglich so viel mit Datenbanken in Berührung kommst ...

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Sollte deine Komponente nicht zumindest mit Variants oder OleVariants für die Wertrückgabe arbeiten
Nein, Designkonzept.

hmmm, hätte nur die Implementation von Array-Werten in der Rückgabe vereinfacht ... *duck*

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Die GetInstalledSoftware-Funktion passt thematisch und Implementatorisch nicht so richtig in diese Unit
Dann ignorier sie doch einfach. ;) Ich finde sie da gut aufgehoben (nicht zuletzt, weil ich sie in genau diesem Kontext brauche).

cu
Narses

hmmm, wie in diesem Kontext? Das erfordert jetzt etwas mehr Ausführung ;-)

MfG,
BenBE.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 14.08.09 00:41 
Moin!

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Zwecks Initialisierung: Nur, wenn der Memory Manager das macht. Muss nicht zwingend gegeben sein.
Das tut er aber seit D3 und in der DOH steht, dass das Verhalten garantiert ist. Wenn ich der Doku also nicht mehr trauen kann (was Abwärtskompatibilität angeht), dann wird´s wirklich schwierig... :nixweiss:

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
@Memleak: OnDisconnect wird nicht aufgerufen --> Asymmetrisches Verhalten falls User dort Initialisierungen drin hat.
OK, das ist ein Argument, sollte da mit rein.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Zudem traue ich den M$-Klassen nicht, dass die auch rekursiv korrekt garbage-collecten. q.e.d. (Beweis durch Authorität)
8) Schon klar... Ich lass es dann erstmal mal so.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Ich sehe eine Query mehr oder weniger als ein finales Objekt, was an eine Connection gebunden ist, statt einem frei herumschwirrenden Objekt, was ständig neu genutzt wird.
Zwingt dich doch keiner, mach´s so. :nixweiss: "...erwarte ich, dass er mir Arbeit abnimmt, mich aber gleichzeitig in meinen Möglichkeiten nicht mehr als nötig begrenzt." Schonmal irgendwo gelesen? :P

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
War mehr oder weniger ein Verbesserungsvorschlag, der sich ohne große Änderungen in die aktuelle Unit einbinden ließe, ohne deine "Ein-Spalten-Abfragerei" herausnehmen zu müssen. Vielmehr würde es dem User erlauben, wesentlich effizienter die Datenn abzufragen.
Gerade dir muss ich doch nicht erklären, dass von 1D auf nD "etwas" mehr Aufwand nötig ist. :roll: Es passte dir besser in den Kram, das ist auch schon alles. :mrgreen: Ich hab ja Verständnis dafür, aber das werde ich nicht umsetzen.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
BTW: Du hast eine WSL-Injection in deiner Unit :twisted: ;P
Jau, ist klar, du kannst dir ja dann in deinem eigenen Code was in deine Queries injecten... :nut:

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
wie in diesem Kontext? Das erfordert jetzt etwas mehr Ausführung
Nein, tut´s nicht, dazu wäre Einsicht in diverse closed-source-Projekte nötig. :P

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 14.08.09 00:55 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Zwecks Initialisierung: Nur, wenn der Memory Manager das macht. Muss nicht zwingend gegeben sein.
Das tut er aber seit D3 und in der DOH steht, dass das Verhalten garantiert ist. Wenn ich der Doku also nicht mehr trauen kann (was Abwärtskompatibilität angeht), dann wird´s wirklich schwierig... :nixweiss:

hmmm, dann sei wenigstens im Destruktor konsequent und nutz zum Nil-Setzen das Build-In-Verhalten des Variablen-Finalisators von Delphi :P ;-) Scherz bei Seite: Selbst wenn man Variablen auf Nil initialisiert, sollte man es wenn möglich dennoch hinschreiben; und sei es, als kurzen Kommentar, dass diese als vorgegeben erachtet werden. Das ist einfach in Bezug auf die Dokumentation des eigenen Codes sinnvoll.

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Zudem traue ich den M$-Klassen nicht, dass die auch rekursiv korrekt garbage-collecten. q.e.d. (Beweis durch Authorität)
8) Schon klar... Ich lass es dann erstmal mal so.

Wie gesagt: Vorausgesetztes Verhalten sollte dokumentiert sein. Grad bei COM und DCOM gibt es doch gewisse Unterschiede zum Normalen Verhalten des Delphi-Compilers.

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Ich sehe eine Query mehr oder weniger als ein finales Objekt, was an eine Connection gebunden ist, statt einem frei herumschwirrenden Objekt, was ständig neu genutzt wird.
Zwingt dich doch keiner, mach´s so. :nixweiss: "...erwarte ich, dass er mir Arbeit abnimmt, mich aber gleichzeitig in meinen Möglichkeiten nicht mehr als nötig begrenzt." Schonmal irgendwo gelesen? :P

Jap. Beispiel, wie sowas aussehen kann, gibt's die Tage mal als PN ... (In nem anderen Zusammenhang)

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
War mehr oder weniger ein Verbesserungsvorschlag, der sich ohne große Änderungen in die aktuelle Unit einbinden ließe, ohne deine "Ein-Spalten-Abfragerei" herausnehmen zu müssen. Vielmehr würde es dem User erlauben, wesentlich effizienter die Datenn abzufragen.
Gerade dir muss ich doch nicht erklären, dass von 1D auf nD "etwas" mehr Aufwand nötig ist. :roll: Es passte dir besser in den Kram, das ist auch schon alles. :mrgreen: Ich hab ja Verständnis dafür, aber das werde ich nicht umsetzen.

Ich denk, dass auch eine Reihe anderer Nutzer deines Wrappers diese Funktionalität öfters mal gebrauchen könnten ...

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
BTW: Du hast eine WSL-Injection in deiner Unit :twisted: ;P
Jau, ist klar, du kannst dir ja dann in deinem eigenen Code was in deine Queries injecten... :nut:

Query.PropertyName := 'Description,Name'; ... Little Bobby Tables und so :mrgreen:

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
wie in diesem Kontext? Das erfordert jetzt etwas mehr Ausführung
Nein, tut´s nicht, dazu wäre Einsicht in diverse closed-source-Projekte nötig. :P

cu
Narses
Auch hier geh ich rein Source-Technisch und Implementatorisch aus. Klären wir aber auf einem anderen Kanal ;-)

mx
BenBE

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 14.08.09 11:46 
Moin!

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Ich denk, dass auch eine Reihe anderer Nutzer deines Wrappers diese Funktionalität öfters mal gebrauchen könnten ...
:roll: Ich denk nochmal drüber nach... :nixweiss:

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Query.PropertyName := 'Description,Name'; ... Little Bobby Tables und so :mrgreen:
:motz: Point taken. :|

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 14.08.09 15:01 
Moin!

Update auf v1.01, Änderungen sind im Code detailiert beschrieben. Das Konzept der 1D-Abfrage bleibt bis auf Weiteres so wie es ist (also keine eigenen WQL-Statements und 2D-Ergebnismengen). Download im ersten Beitrag.

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 14.08.09 15:16 
Wenn Du schon ein Property hast, warum nutzt Du das dann nicht?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
destructor TWMIConnection.Destroy;
begin
  Active := false; //Statt direktem Aufruf des Events, sonst wieder asymmetrisch

  FOnConnect := NIL;
  FOnDisconnect := NIL;

  FServices := NIL;
  FLocator := NIL;

  inherited;
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TWMIConnection.Open;
begin
  Active := False; // erneut verbinden? Dann vorher die aktuelle Verbindung schließen
  try
    //...


Statt Quoting versuch's Mal mit Eingrenzung der zulässigen Zeichen beim Setzen des Properties. Dazu hat man Setter ja ;-) Nennt sich i.d.R. "Gültigkeitsprüfung" ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 14.08.09 15:36 
Moin!

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Wenn Du schon ein Property hast, warum nutzt Du das dann nicht?
Ich verwende innerhalb einer Klasse immer die direktesten Wege. Aber ich schau´s mir nochmal an.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
destructor TWMIConnection.Destroy;
begin
  Active := false; //Statt direktem Aufruf des Events, sonst wieder asymmetrisch
Wat? Wieso asymmetrisch? Und was für ein "Event"? Der Destruktor ist final, da kann man nicht anders hin- oder herkommen. :gruebel: Das ist IMHO sauber so, wie im aktuellen Code.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Statt Quoting versuch's Mal mit Eingrenzung der zulässigen Zeichen beim Setzen des Properties. Dazu hat man Setter ja ;-) Nennt sich i.d.R. "Gültigkeitsprüfung" ;-)
Dazu müsste ich aber jedes mal den String zerlegen, ggfs. eine Exception hochzerren (was wiederum try-except-Blöcke beim Aufruf bedeutet), das ist doch Banane. Wenn das jemand "falsch" macht, hat er halt einen Bedienungsfehler gemacht. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 14.08.09 15:41 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Wenn Du schon ein Property hast, warum nutzt Du das dann nicht?
Ich verwende innerhalb einer Klasse immer die direktesten Wege. Aber ich schau´s mir nochmal an.

Wenn Du nur den Event-Handler ausführst, fehlen ggf. andere Aktionen, die beim Schließen auszuführen sind. --> Code-Dopplung vermeiden.

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
destructor TWMIConnection.Destroy;
begin
  Active := false; //Statt direktem Aufruf des Events, sonst wieder asymmetrisch
Wat? Wieso asymmetrisch? Und was für ein "Event"? Der Destruktor ist final, da kann man nicht anders hin- oder herkommen. :gruebel: Das ist IMHO sauber so, wie im aktuellen Code.

Der Destructor ist im Prinzip wie jede andere Methode auch. Da kann man beliebigen Code reinpacken, sogar Aufrufe anderer Methoden. Man sollte dabei einzig beachten, dass man in diesen Methoden nicht auf Dinge zugreift, die bereits freigegeben wurden.

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Statt Quoting versuch's Mal mit Eingrenzung der zulässigen Zeichen beim Setzen des Properties. Dazu hat man Setter ja ;-) Nennt sich i.d.R. "Gültigkeitsprüfung" ;-)
Dazu müsste ich aber jedes mal den String zerlegen, ggfs. eine Exception hochzerren (was wiederum try-except-Blöcke beim Aufruf bedeutet), das ist doch Banane. Wenn das jemand "falsch" macht, hat er halt einen Bedienungsfehler gemacht. ;)

cu
Narses

Mein ja nur. Macht die VCL beim setzen des Name-Properties übrigens auch ;-)

mx
BenBE

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 14.08.09 16:24 
Moin!

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Wenn Du nur den Event-Handler ausführst, fehlen ggf. andere Aktionen, die beim Schließen auszuführen sind. --> Code-Dopplung vermeiden.
Ich rufe direkt den zuständigen Handler auf und erspare mir die Boolean-Fallunterscheidung im Setter und das Rauspopeln der Methodenadresse aus der Tabelle. Ich sehe da keine "Gefahr" irgend einer Art. Mag vielleicht "theoretisch" netter sein, gut. Funktional ist das gleichwertig. (Und von Code-Dopplung kann hier mal gar keine Rede sein.)

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Der Destructor ist im Prinzip wie jede andere Methode auch. Da kann man beliebigen Code reinpacken, sogar Aufrufe anderer Methoden. Man sollte dabei einzig beachten, dass man in diesen Methoden nicht auf Dinge zugreift, die bereits freigegeben wurden.
Ich sehe in deiner Antwort keine Bezug zu meiner Frage. Deshalb reduziere ich das mal auf eine redundante Aussage. :P

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Mein ja nur. Macht die VCL beim setzen des Name-Properties übrigens auch
Mag ja sein, bringt aber hier mehr Nach- als Vorteile. :nixweiss:

Gut, stellen wir fest, dass wir in der Haarspalter-Phase angekommen sind. 8) Dann sammeln wir mal fleißig praktische Erfahrungen und sehen, was im nächsten Release noch wirklich notwendig sein wird. :D

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 14.08.09 18:37 
Also, mal davon abgesehen, dass das ganze nicht funktioniert... *

GetClassList, GetPropertyList und Execute, allesamt Quasi-Identisch. Das ist nicht dein Ernst, oder? Ich mein, von dir hätt ich sowas nicht erwartet. Schreib Execute so um, dass da ein verarbeitbares Resultset rauskommt und ruf das von den andern beiden auf...

[*] Funktioniert nicht im Standard-Aufruf: ExecQuery in GetClassList sagt, "Abfrage ist ungültig". Das sagen bei dieser Abfrage auch andere WQL-Tools. Win32Only ist das Problem, __CLASS scheint ein Problem zu haben. Lässt man das weg, gehts.
Oh, da ist sogar noch ein Problem: du würdest "Win32" irgendwo im ClassName abfragen... nicht nur am Anfang ;)

Oh, nochwas: kannst ja das Namespace-property noch als default setzen, spart Platz im DFM und gibt dem OI die Möglichkeit, per 'Geerbte Einstellungen wiederherstellen' eben dies zu tun.

user profile iconNarses, ich glaube da hatte user profile iconeiner Recht: die Unit sieht echt nach Nachtschicht aus ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 14.08.09 23:47 
Moin!

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNarses, ich glaube da hatte user profile iconeiner Recht: die Unit sieht echt nach Nachtschicht aus ;)
Das ist doch hier eine schnöde Verschwörung... :motz: Zu Poden mit dem Purchen! :lol: Ich sagte ja schon, dass ich dafür nicht so viel Zeit habe; und der ausgewiesene COM/DCOM-Experte bin ich nun auch nicht - was glaubt ihr wohl, wozu ich das hier "öffentlich" gemacht habe... *g*

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Also, mal davon abgesehen, dass das ganze nicht funktioniert... *
[*] Funktioniert nicht im Standard-Aufruf: ExecQuery in GetClassList sagt, "Abfrage ist ungültig". Das sagen bei dieser Abfrage auch andere WQL-Tools. Win32Only ist das Problem, __CLASS scheint ein Problem zu haben. Lässt man das weg, gehts.
Hm, hab den Vorschlag mit der Klassenliste aus der MSDN-Library. Bei mir klappt das, welches OS bei dir? :gruebel: Dann bleibt ja wieder nur der Ansatz alle Klassen abzufragen und beim Namen erst auf "Win32_" zu testen - das wollte ich ja nun auch wieder nicht... :roll:

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Oh, da ist sogar noch ein Problem: du würdest "Win32" irgendwo im ClassName abfragen... nicht nur am Anfang ;)
Jap, stimmt. ;) *notier*

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
GetClassList, GetPropertyList und Execute, allesamt Quasi-Identisch. Das ist nicht dein Ernst, oder? Ich mein, von dir hätt ich sowas nicht erwartet. Schreib Execute so um, dass da ein verarbeitbares Resultset rauskommt und ruf das von den andern beiden auf...
Asche auf mein Haupt... :flehan: Ich gelobe Besserung. :angel:

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Oh, nochwas: kannst ja das Namespace-property noch als default setzen, spart Platz im DFM und gibt dem OI die Möglichkeit, per 'Geerbte Einstellungen wiederherstellen' eben dies zu tun.
String-Defaults gibt´s in D7 noch nicht, nur Numerics. :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 15.08.09 10:15 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNarses, ich glaube da hatte user profile iconeiner Recht: die Unit sieht echt nach Nachtschicht aus ;)
Das ist doch hier eine schnöde Verschwörung... :motz: Zu Poden mit dem Purchen! :lol: Ich sagte ja schon, dass ich dafür nicht so viel Zeit habe; und der ausgewiesene COM/DCOM-Experte bin ich nun auch nicht - was glaubt ihr wohl, wozu ich das hier "öffentlich" gemacht habe... *g*

Trotzdem ist man von Dir besseren, effizienteren und saubereren Code gewöhnt ... :mrgreen:

Zumal die meisten Dinge nichts mit COM/DCOM zu tun haben, sondern im Wesentlichen handwerklicher Natur sind ;-)

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Also, mal davon abgesehen, dass das ganze nicht funktioniert... *
[*] Funktioniert nicht im Standard-Aufruf: ExecQuery in GetClassList sagt, "Abfrage ist ungültig". Das sagen bei dieser Abfrage auch andere WQL-Tools. Win32Only ist das Problem, __CLASS scheint ein Problem zu haben. Lässt man das weg, gehts.
Hm, hab den Vorschlag mit der Klassenliste aus der MSDN-Library. Bei mir klappt das, welches OS bei dir? :gruebel: Dann bleibt ja wieder nur der Ansatz alle Klassen abzufragen und beim Namen erst auf "Win32_" zu testen - das wollte ich ja nun auch wieder nicht... :roll:

Also bei mir funktioniert dein aktualisiertes Abfragetool auch nicht. W2K Pro SP4 Rollup 1 + alle Patches.

Zudem: Sollte man nicht einen Fehler auch melden oder zumindest eine Möglichkeit bieten, um im Fehlerfalle die Ursache zu erfragen? *duck*

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Oh, nochwas: kannst ja das Namespace-property noch als default setzen, spart Platz im DFM und gibt dem OI die Möglichkeit, per 'Geerbte Einstellungen wiederherstellen' eben dies zu tun.
String-Defaults gibt´s in D7 noch nicht, nur Numerics. :nixweiss:

Müsst ich jetzt auch nachgucken; zur Not gibt es aber stored-Handler, mit denen man Ähnliches tun kann. Und die gehen auf jeden Fall bereits in D7.

mx
BenBE

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 17.08.09 01:17 
Moin!

Update auf v1.02, Download im ersten Beitrag.

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Funktioniert nicht im Standard-Aufruf: ExecQuery in GetClassList sagt, "Abfrage ist ungültig". Das sagen bei dieser Abfrage auch andere WQL-Tools. Win32Only ist das Problem, __CLASS scheint ein Problem zu haben. Lässt man das weg, gehts.
Fehler behoben (das scheint W2k-spezifisch zu sein :gruebel: steht aber nix von im MSDN).

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
GetClassList, GetPropertyList und Execute, allesamt Quasi-Identisch. Das ist nicht dein Ernst, oder? Ich mein, von dir hätt ich sowas nicht erwartet. Schreib Execute so um, dass da ein verarbeitbares Resultset rauskommt und ruf das von den andern beiden auf...
Ich hab nochmal drübergeschaut: doch, das ist mein voller Ernst. :| Der Code ist funktionsfähig getestet und die drei eingesparten Zeilen sind es nicht wert, dafür das Messer anzulegen (das ist ja nicht nur Umstellen von ein paar Zeilen, da steckt auch noch Exception-Handling und Memory-Management drin). Ich habe dafür grad keine Zeit. :nixweiss: (nicht missverstehen, der Vorschlag ist sinnvoll - aber bringt mich grad nicht weiter)

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNarses, ich glaube da hatte user profile iconeiner Recht: die Unit sieht echt nach Nachtschicht aus ;)
Das mag sein (und trifft es sogar im Kern) - aber (a) habe ich überhaupt eine veröffentlicht und (b) darfst du es gerne verbessern, statt zu nörgeln, ist ja OpenSource. :D


user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Zudem: Sollte man nicht einen Fehler auch melden
Ja, klar, Danke dafür. :zustimm: Das war ja auch der Sinn der Sache. ;)

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Müsst ich jetzt auch nachgucken; zur Not gibt es aber stored-Handler, mit denen man Ähnliches tun kann. Und die gehen auf jeden Fall bereits in D7.
Ihr beide seid mir echt zwei Strategen (bitte nicht falsch verstehen, ist nicht persönlich gemeint :beer:), "müsste ich nachsehen", "wäre besser wenn", "könnte man auch", etc.pp. Zeigt´s doch einfach einem Progger-Opa mal so richtig, statt nur zu erwähnen, was man nicht alles besser machen könnte... :roll:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 17.08.09 14:10 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

Update auf v1.02, Download im ersten Beitrag.

Source-Sichtung später ...

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Funktioniert nicht im Standard-Aufruf: ExecQuery in GetClassList sagt, "Abfrage ist ungültig". Das sagen bei dieser Abfrage auch andere WQL-Tools. Win32Only ist das Problem, __CLASS scheint ein Problem zu haben. Lässt man das weg, gehts.
Fehler behoben (das scheint W2k-spezifisch zu sein :gruebel: steht aber nix von im MSDN).

Teste ich dann nachher; hab hier grad kein W2K verfügbar.

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
GetClassList, GetPropertyList und Execute, allesamt Quasi-Identisch. Das ist nicht dein Ernst, oder? Ich mein, von dir hätt ich sowas nicht erwartet. Schreib Execute so um, dass da ein verarbeitbares Resultset rauskommt und ruf das von den andern beiden auf...
Ich hab nochmal drübergeschaut: doch, das ist mein voller Ernst. :| Der Code ist funktionsfähig getestet und die drei eingesparten Zeilen sind es nicht wert, dafür das Messer anzulegen (das ist ja nicht nur Umstellen von ein paar Zeilen, da steckt auch noch Exception-Handling und Memory-Management drin). Ich habe dafür grad keine Zeit. :nixweiss: (nicht missverstehen, der Vorschlag ist sinnvoll - aber bringt mich grad nicht weiter)

Doch: Es reduziert dir die Nörgelliste um einen Eintrag, weil das nämlich dabei ohne Zusatzaufwand gleich mit abfällt ... Wenn das mal nix ist :P


user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Zudem: Sollte man nicht einen Fehler auch melden
Ja, klar, Danke dafür. :zustimm: Das war ja auch der Sinn der Sache. ;)

Fehler melden war gemeint in Bezug auf "Exception schmeißen" und nicht "Bug reporten". Wobei dir Unit, die mir Fehler meldet, wäre sicherlich interessant ...

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Müsst ich jetzt auch nachgucken; zur Not gibt es aber stored-Handler, mit denen man Ähnliches tun kann. Und die gehen auf jeden Fall bereits in D7.
Ihr beide seid mir echt zwei Strategen (bitte nicht falsch verstehen, ist nicht persönlich gemeint :beer:), "müsste ich nachsehen", "wäre besser wenn", "könnte man auch", etc.pp.

Das mit default für Strings brauchte ich bisher noch nicht; das mit stored hab ich aber extra für dich nachgeschlagen ...

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Zeigt´s doch einfach einem Progger-Opa mal so richtig, statt nur zu erwähnen, was man nicht alles besser machen könnte... :roll:

Wir sind doch erst bei der "was man tun sollte"-Runde ... Du "was man tun könnte"-Runde folgt nach dem RTM-Release (Ready to Baintain) und nicht bereits nach der öffentlichen Beta :P

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
cu
Narses

mx
BenBE

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mo 17.08.09 19:34 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Ihr beide seid mir echt zwei Strategen (bitte nicht falsch verstehen, ist nicht persönlich gemeint :beer:), "müsste ich nachsehen", "wäre besser wenn", "könnte man auch", etc.pp.

Du hast noch "wäre auch interessant" vergessen :P ;) :)