Laden...

Profil von smilingbandit

myCSharp.de - Member Mitglied seit

Alle Beiträge

Hallo zusammen,

nach langer Zeit der Abstinenz plagt mich mal wieder ein .NET Problem 😃 Die Frage ist größtenteils für mich noch akademischer Natur, da ich gerade die verschiedenen Möglichkeiten auslote.

Folgendes Szenario:

Ich benutze ein COM-Interface, für das ein .NET Wrapper (eine Ansammlung von Interfaces sowie als "internal" deklariert die das Interface implementierenden Klassen) definiert sind. Die Klassen wiederum implementieren die Funktionalität der COM-Schnittstelle.

Die COM-Schnittstelle kann nicht angepasst werden, die .NET Schnittstelle - falls möglich - ebenfalls nicht.

Mein Problem:

Prinzipiell handelt es sich um ein Serialisierungsproblem. Ich möchte einige der Collections ("eigene" Collections die im Wrapper definiert sind) persistent speichern, damit User ihre Arbeit unterbrechen können, ohne Daten zu verlieren.

Leider ist es nicht möglich, Interfaces zu serialisieren (benötigt ja einen konkreten Typ). An die Klassen selbst komme ich "von außen" wegen "internal" auch nicht heran (ist ja auch gut so..meistens).

Meine Ansätze waren bisher folgende:

  1. Ich erweitere die internen Klassen des Wrappers sowie die Interfaces insofern, das jede Klasse eine List mit PropertyInfo-Objekten liefern kann.

  2. Ich versuche über Reflection, direkt an die Werte zu kommen und weg zu speichern, ohne die Klassen bzw. die Interfaces zu erweitern.

Meine Einschätzungen:

zu 1.: Finde ich persönlich am elegantesten. Funktioniert soweit.
zu 2.: Weniger elegant, funktioniert aber ebenfalls.

Meine Probleme 😃

zu 1.:
Ich muss die Schnittstellen und deren Implementierung erweitern was nicht unbedingt gewünscht ist.
Außerdem habe ich das Problem der "Selbstreflektion". Das heißt, dass sich mein Property in sich selbst nochmal befindet, da es ja ebenfalls ein Property ist. Das müsste ich noch - möglichst ohne feste Namen etc. - vermeiden.

zu 2.: Das gecode an der Stelle mit Schleifen, Typecasts usw. finde ich nicht sonderlich schick und viel zu kompliziert. Vielleicht stehe ich auch nur auf dem Schlauch und denke zu kompliziert.

Allgemein: Da der Serialisierer wegfällt und ich somit auch an der Stelle ISerializable nicht implementieren kann habe ich das Problem, wie ich dann enstprechende Objekte selbst deserialisiere und ihnen per Reflection und Schleifen die gespeicherten Properties wieder zuweisen kann.

Interessant bei Punkt 1 wäre: Wie müsste ein Setter für das Property (Liste) über alle Properties aussehen? 😃

Ich hoffe, ich konnte das Problem soweit verständlich wieder geben.

Konkreter Code ist auch nicht direkt notwendig (aber schön, wenn jemand schon sowas kennen sollte). Mir würden auch Ansätze oder Hinweise helfen. Den rest krieg ich dann schon 😃

Viele Grüße

SB

Hallo zusammen,

aus mir unbekannten Gründen funktioniert nun das Encoding reibungslos. Außerdem bin ich auf ReadAllLines umgestiegen. Ebenfalls ohne Probleme.

@Herbivore:

Da hast du recht. Zum Glück bin ich auch kein Embedded-Entwickler der darauf achten muss 😃 Allerdings muss ich danach sowieso jede Zeile einzeln mit einer RegEx prüfen, darum - dachte ich mir - kann ich sie auch einzeln lesen und dabei prüfen 😃

Für alle dies interessiert, es sieht jetzt folgendermaßen aus:


private void ReadData()
        {
            string[] readText = File.ReadAllLines(iniFilePath, Encoding.Default);
           
            // Testing purposes only!

            iniFileData = new Dictionary<string,Dictionary<string,string>>();
            string currSection = String.Empty;
           
            foreach(string line in readText)
            {
                Match matchSection = secRegex.Match(line);
                if (matchSection.Success)
                {
                    currSection = matchSection.Groups["Section"].Value as String;
                    if (!iniFileData.ContainsKey(currSection))
                    {
                        iniFileData.Add(currSection, new Dictionary<string, string>());
                    }
                }

                else
                {
                    Match matchLine = keyValRegex.Match(line);
                    if (matchLine.Success)
                    {
                        String currKey = matchLine.Groups["Key"].Value as String;
                        String value = matchLine.Groups["Value"].Value as String;

                        Dictionary<string, string> temp;
                        iniFileData.TryGetValue(currSection, out temp);

                        if (!temp.ContainsKey(currKey))
                        {
                            temp.Add(currKey, value);
                        }
                    }
                }

            }
        }

Die Zeilen kannst du leichter mit der
>
einlesen. Da kannst du dann auch mit dem Encoding rumspielen.

Danke, werd ich gleich mal mit einer alten Datei gegenprüfen.
Ist die Herngehensweise sinnvoll? Also eine komplette Datei einzulesen. Die INIs können ja ganz schön groß werden...

Hallo zusammen,

inzwischen bin ich schon etwas weiter. Ich habe die Datei mal mit Hilfe des Notepad++ in verschiedene Formate konvertiert und das Encoding des Streamreaders auf Default gestellt.

Interessanter Weise klappts jetzt und auch der Reader stürzt nicht mehr ab. Allersings ist mir das noch zu unsicher für die Zukunft 😃 Also wer noch Ideen oder Erfahrungen hat...

Vielleicht hilft der Code ja noch anderen. Werde den Ausschnitt jedenfalls up to Date halten sobald ich mir sicher bin.



/* 
\* Methode zum Lesen der INI-Datei
\* Gleichzeitig wird ein Dictionary erzeugt, das als Basis für den TreeView dient
\*/

private void ReadData()
        {

            FileStream fileStream = new FileStream(iniFilePath, FileMode.OpenOrCreate, FileAccess.Read);
            TextReader reader = new StreamReader(fileStream);

            // Testing purposes only!

            iniFileData = new Dictionary<string,Dictionary<string,string>>();
            string currSection = String.Empty;
                        
            String line;

            while ((line = reader.ReadLine()) != null)
            {
                Match matchSection = secRegex.Match(line);
                if (matchSection.Success)
                {
                    currSection = matchSection.Groups["Section"].Value as String;
                    if (!iniFileData.ContainsKey(currSection))
                    {
                        iniFileData.Add(currSection, new Dictionary<string, string>());
                    }
                }

                else
                {
                    Match matchLine = keyValRegex.Match(line);
                    if (matchLine.Success)
                    {
                        String currKey = matchLine.Groups["Key"].Value as String;
                        String value = matchLine.Groups["Value"].Value as String;

                        Dictionary<string, string> temp;
                        iniFileData.TryGetValue(currSection, out temp);

                        if (!temp.ContainsKey(currKey))
                        {
                             temp.Add(currKey, value);
                        }
                    }
                }
            }
            fileStream.Close();
        }

Hier mal der Code zum Auslesen des ganzen. Anscheinend wird keine Exeption geworfen(?). Zumindest zeigt sich mit Try-Catch das gleiche Stoppverhalten ohne Meldung.
Über die Eleganz der Lösung kann man jetzt mal streiten 😃
Die RegEx zum Prüfen sind auch recht groß, kann ich auf Wunsch aber ebenfalls Posten.
Die auskommentierten Stellen mit Encodingformaten habe ich mal der Üersichtlichkeit wegen weg gelassen.

Hallo zusammen,

ich habe ein Projekt in dem ich INI-Dateien behandeln muss - also ganz normale Textdateien.

Die gelesenen Daten werden von mir in einen TreeView zur Anzeige gebracht. Der Wert eines gewählten Schlüssels sollen in einer Textbox darsgestellt werden (für spätere Änderungen).

Funktioniert auch so weit alles wunderbar - außer:

Das Zeichen "°" kommt in einigen Zeichenketten vor, und kann wohl nicht richtig gelesen werden. Stattdessen tauchen Fragezeichen ( also "?" ) oder diese Vierecken bzw. Balken auf. Ich habe bereits mit diversen Konvertierungen herumgetestet und hatte noch mehr Datenverlust - sprich fehlende Zeichen usw.

Ich habe auch bereits dem Streamreader Encodings mitgegeben. Das führt interessanterweise aber immer zum Absturz der ganzen Anwendung. Leider ohne irgendeine Meldung.

Hat jemand eine entsprechende Idee, was ich ausprobieren könnte oder im Idealfall, wo die Lösung verborgen liegt?

Vielen Dank schon mal!

edit: Bevor ichs vergesse: Es scheint kein Anzeigeproblem zu sein. Beim debuggen waren die Zeichenketten bereits fehlerhaft.

Hallo zusammen,

mit den ganze Left Outer Joins hats dann funktioniert. Der Query ist ziemlich unübersichtlich geworden, sammelt aber -glaube ich- die Daten, die ich brauche.

Nun hat sich aber ein anderes Problem ergeben. Ich brauche eine Auswertung über den Fortschritt, bzw. die Arbeitsstunden in einem Task (später mal nach Resource und Assignments aufgeteilt).

Mein Problem: Es ist lediglich hinterlegt, wie weit ein Task insgesamt zum reporteten Zeitraum ist.
Nun bin ich auf die Idee gekommen, dass man ja die Differenz errechnen könnte zu den zeitmässig vorherigen Datensätze, die sich sich ebenfalls auf diesen Task beziehen. Per Code würde ichs rekursiv lösen, dass er zum Vormonat immer noch die Differenz berechnet. Aber wie mache ich das mit SQL? Jemand eine Idee?

Vielen Dank schonmal

edit: Auf den Hinweis mit der Pivot hin hab ich mir das angesehen und werds mal so versuchen. Wusste bisher gar nicht, dass SQL das kann -.-"

edit2: Spalte für Spalte eine Differenz zu bilden ist wohl doch schwieriger als ich dachte. Falls jemand nen Tip dazu hat immer her damit ^^

verwendetes Datenbanksystem: TSQL 2005 und TSQL 2008

Hallo zusammen!

Ich hab das folgende Problem...

Ich möchte eine Ressourcenauslastung auswerten, und die Daten liegen recht verteilt vor.

Es gibt eine Tabelle, in der ich eine ID auslese für die Verfügbarkeit und eine für die Kapazität der Ressource.
Das ist zunächst mal kein Problem.

Mit Hilfe dieser IDs suche ich in einer anderen Tabelle nach einer sogenannten IDDS. Diese identifiziert später die Ressource. In dieser Tabelle steht dann auch der Zahlenwert für die Verfügbarkeit oder die Kapazität. Also (zum Beispiel):

IDDS IDFIELD Number

5 Kapazität 100
5 Verfügbarkeit 50
10 Kapazität 80
20 Verfügbarkeit 12

Man sieht das Problem: Eine Ressource hat in zwei Datensätzen die Werte hinterlegt, nicht in einem. Es kann auch sein, dass nur Kapazität ODER Verfügbarkeit vorhanden ist.

Was ich am Ende haben möchte ist folgende Tabelle:

IDDS Kapazität Verfügbarkeit
5 100 50
10 80 NULL
20 NULL 12

(vereinfacht).

Wenn der eine oder andere Zahlenwert nicht hinterlegt ist, soll dort eben "0" oder NULL stehen.

Ich habs bisher mal mit einem Full outer Join probiert oder einem einfachen INNER JOIN. Beide liefern mir aber nicht das gewünschte Ergebnis.

Hat jemand eine Idee, wie ich das lösen kann? Ich hab das Gefühl, das ist gar nicht so schwer. Aber irgendwie steh ich aufm Schlauch.

Vielen Dank schonmal

11.02.2009 - 15:59 Uhr

Hallo norman_timo,

das mit dem Berechnen habe ich ausprobiert. Entweder bin ich unfähig, oder der Diagrammdesigner kanns nicht/besitzt nicht die benötigten Einstellungen dafür.

11.02.2009 - 15:17 Uhr

hallo norman_timo,

das würde gehen, wenn die Daten vorliegen würden. Leider gibt es z.B. keinen Meilenstein, der "Kontrolllinie" heißt und die entsprechenden Daten mitliefert. Darum wollte ich diesen Datensatz quasi "dynamisch" erstellen und am Ende anfügen. Kurz gesagt, ich hab nichts das ich "SELECT"en könnte.

Viele Grüße

11.02.2009 - 12:11 Uhr

verwendetes Datenbanksystem: TSQL 2005 (MS SQL)

Hallo zusammen!

ich habe ein ziemlich konkretes Problem, da ich nicht alle Feinheiten von SQL kenne (leider).

Ich versuche anhand einer Abfrage eine MTA zu erstellen. Also Werden zu einem Projekt alle Meilensteine und deren Termine abgefragt. Daraus wird ein Diagramm erstellt. Soweit funktionierts auch. Wer diese Analyse kennt der weiss, dass nun eigentlich eine Kontrollline (wenn man so will) von (MIN/MIN) nach (MAX/MAX) durch das Diagramm geht. Es also diagonal halbiert. Da die Reporting Services - was die Diagramme angeht - recht eingeschränkt sind, dachte ich mir, man kann doch bestimmt diese Kontrolllinie bei einer Abfrage am Ende hinzufügen. Also zwei Datensätze, die ungefähr so aussehen:

Name: Kontrollline
ProjektName: ProjektName
Start: ProjektStart
Ende: ProjektEnde

und

Name: Kontrolllinie
ProjektName: ProjektName
Start: ProjektEnde
Ende: ProjektEnde

Das ganze dann anhand des Namens als extra Serie im Diagramm einfügen. Geht sowas? Also ein "INSERT INTO in ein Subselect"?

Vielen Dank und viele Grüße

Hi Trib!

wieder mal vielen Dank, werd noch ein wenig damit rumspielen ^^

Was die Controls angeht: Von Drittanbietern (z.B. Dundas) gibts ein Custom Control, entwickelt mit C# (ist ein Assembly afaik). Damit kann man recht schöne GRafiken machen, hab mir mal die Eval-Copy zum Ansehen besorgt. Ist allerdings schweineteuer das Teil. Also von daher muss es wohl irgendwie möglich sein.

viele Grüße

Hi Trib!

Danke schonmal für die Antwort. Mittlerweilen krieg ichs zwar ungefähr hin, aber die Skalierung ist der Horror. Ich hab leider nur Testprojekte. Die Laufzeit von Projekten kann mehrere Jahre sein und als Y-Achse gibts dummerweise keine Numeric/Date Values...warum auch immer. Folglich kann man die auch nicht ordentlich invertieren, weil nur Mist dabei rauskommt. Zum verzweifeln ist das ^^

Edit: Weisst du vielleicht obs möglich ist, da seine eigenen Controls einzubinden? Falls man sich mal mit dem Diagramm auseinander setzt müsste es ja möglich sein davon was eigenes abzuleiten...

Hallo zusammen!

ich untersuche derzeit im Zuge meiner Diplomarbeit die Reporting Services (ist eben der Teil der für meinen eventuell zukünftigen Arbeitgeber interessant ist). Jetzt hab ich nur folgendes Problem:

Eine Meilenstein Trendanalyse in tabellarischer Form scheint soweit zu funktionieren (mit Hilfe einer Matrix). Nun hätte ich sowas gerne als Diagramm (also Chart). Ich weiss noch, wie ekelhaft das damals in Excel zu verwirklichen war, die Optionen im Report Designer sind aber was Diagramme angeht weitaus eingeschränkter. Es fehlen so Dinge wie 2. x-Achse, Datenquelle darf auch nur eine existieren, die Achsen lassen sich nur dynamisch skalieren usw....

Hat jemand eine Idee, wie man denn entweder

  • das Diagramm entsprechend hinbiegt
  • die SQL Abfrage soweit hinbiegt dass man das passende Diagramm kriegt?

Viele Grüße und danke schonmal...

edit: ZUmindest die Achsenskalierung will jetzt

Ah gut, da geb ich dir Recht. Entschuldigung. Ein ordentliches Buch über Design etc. von (ASP .NET) Webanwendungen - in Verbindung mit einer grösseren Datenbank - wäre natürlich auch ausreichend. Der Text war hauptsächlich dazu gedacht, meinen Arbeitsbereich im Moment zu beschreiben.

In seinem 2. Posting hat er was von Diplom Informationstechnik (BA) geschrieben -.-" darum meine Antwort. Sorry falls ich das mißverstanden habe.

Was mein Posting angeht: Obs okay ist weiss ich nicht, ich hab nur Statistiken gesehen. Die Aussagekraft ist ja immer ein wenig zweifelhaft. Allerdings, wenn ich mich so umsehe studieren immer weniger, besonders Informatik. Gebraucht werden aber immer mehr (Uni bei uns hat 30000 Studenten, davon 90 Erstsemester Informatik oO). Mehr kann ich dazu auch net sagen. Abgesehen davon dass studieren nicht grade Zuckerschlecken ist g

Hi zusammen!

Meine Diplomarbeit steht an, und da ich das Thema an meiner Werkstudentenstelle im Prinzip selbst vorgeschlagen habe (shame on me, da hab ich mir was eingebrockt) suche ich nun wertvolle Tips oder Tutorials/Buchempfehlungen.

Im Prinzip gehts um eine Webanwendung zum automatischen erstellen von historisierten Projekt- und Abteilungsberichten. Und ich darf/kann/muss mich natürlich mit allen Teilthemen beschäftigen. Die da wären

-Rechtemanagement
-Web-UI Design
-Webservices
-XML
-Design und Erstellen eigener Services/Dienste
-Sinnvolle Architekturen für derlei Systeme
-Datenbankdesign
-MS SQL Reporting Services 2005 (eventuell) oder eine Eigenentwicklung zur Dokumenterstellung (HTML, XLS, PDF...usw)

Fest steht nur: Front-End und Output-Design krieg ich vorgeschrieben, der Rest ist meine Sache (also alles was dazwischen hängt, alle Services, Dienste, Logik, etcpp). Zudem krieg ich "eventuell" die historisierten Daten über einen Webservice (aber das ist grausig, da werd ich lieber was eigenes machen). Falls mir jemand Tips geben kann -oder sich selbt mit Teilen davon auskennt - , besonders Tutorials oder Buchempfehlungen, wär ich echt dankbar 😉 Natürlich soll das .NET Framework verwendet werden.

Viele Grüsse

XSBX

Also ich kenne jetzt den Informationstechnik Studiengang und die damit verbundenen Jobs nicht im Detail, würde aber mal sagen so weit liegen die jetzt von Diplominformatikern nicht weg.

Auf heise.de (mag man von der Quelle mal halten was man möchte) gabs eine Statistik von Einstiegsgehältern bei Diplominformatikern. Die lagen in der Industrie zwischen 4200 und 4900 Brutto/Monat (letzteres bei SAP die den Spitzenreiter darstellen). Ein Kommilitone von mir (allerdings mit sehr gutem Abschluss) bezieht aktuell 45000 / Jahr Brutto (als Berufseinsteiger), alle Seminare und Schulungen inklusive (sowie einer Masseuse in der Firma 😜 ). Ist allerdings ein recht kleiner Betrieb mit ca. 50 Angestellten.

Vielleicht hiflt dir das weiter, eine Relation zu finden, da ich deinen Studiengang wie gesagt nicht exakt kenne.

12.02.2008 - 14:09 Uhr

Naja...Zeitdruck 😉 Da müsste ich schon das neue Form vom BackgroundWorker bearbeiten lassen, sonst muss ich ziemlich viel umbauen (und mich vor allem tiefer ins Threading einarbeiten). Ist das überhaupt sinnvoll?

12.02.2008 - 13:54 Uhr

ah Entschuldigung, ist mir grade beim Rauchen auch wie Schuppen von den Augen gefallen 🙂

Dann wirds schwierig mit nachträglich implementieren glaub ich..Danke jedenfalls!

12.02.2008 - 13:44 Uhr

Naja, die neue Form wird ja aus dem eigentlichen GUI Thread erzeugt, es wird nur noch nicht dargestellt. Oder wolltest du mich auf die Events hinweisen und dass ichs doch damit lösen muss?

12.02.2008 - 13:40 Uhr

Hallo zusammen,

Ich wollte für eine meiner Schleifen eine ProgressBar erstellen (bei Programmstart).

Da natürlich das Hauptform der Anwendung noch nicht existiert, hab ich einfach ein neues entworfen und eine Progressbar reingebaut. Da ich nicht schon wieder über Eventhandler arbeiten wollte, hab ichs einfach auf public gesetzt (ich weiss, ist nicht ganz sauber, aber in dem Fall hoffentlich nicht gravierend).

Bevor die Schleife läuft wird das kleine Form angezeigt, Titeltext und Maximum für die Progressbar gesetzt.

Meine Schleife führt Performstep() durch, aber wenn die Schleife dann läuft passiert mir dem Balken gar nichts. Muss ichs doch über Eventhandler machen, oder liegts an was anderem?

12.02.2008 - 13:36 Uhr

Mit Split kriegst du zunächst ein Eindimendionales Array von strings. Die Elemente des Strings werden bestimmt durch das angegebene Trennzeichen (in deinem Fall wohl das ";" ). Wenn dus zweidimensional willst und dein String immer aus Vorname - > Nachname besteht, musst du den danach eben umbauen 🙂

11.02.2008 - 09:32 Uhr

Implementier die SerialPorts lieber selbst. Ist kein grosser Akt. Von Joetempes gibts hier ein Beispiel im Forum unter den Codesnippets. Damit kannst du dann die Kommunikation wesentlich besser steuern, denn dafür gibts dann die passenden Methoden (serialport.write etc.) die du über Events steuern kannst. Ich weiss natürlich nicht, was genau du machen willst.

Hallo JoeTempes

Das diese Schnittstellen immer noch aktuell sind habe ich mittlerweilen ja auch erfahren dürfen 🙂 hat mich aber auch nicht wirklich verwundert. Allerdings sind sie bei heimischen PCs für den Anwender praktisch verschwunden, dasm einte ich damit.

Dein Template habe ich ausprobiert und mich sogar daran orientiert. Vielen Dank dafür, hat mir sehr geholfen als ich mit C# angefangen habe letztes Jahr. Waren viele nützliche Sachen für mich dabei. Echt gut gemacht.

Danke euch beiden, ihr kennt euch ja richtig gut aus mit dem Zeug (für mich is das Steinzeit und ich hab noch nie wirklich viel mit gearbeitet).

Vielen Dank erstmal!

edit: Also ich hab mal eure Vorschläge ausprobiert und bin zu folgendem Ergebnis einstweilen gekommen:

Der EventHandler pfuscht mir anscheinend in meine normalen Anfragen rein. Darum hab ich meine eine Klasse in zwei geteilt (eine hat nur den Event und Delegaten, die andere macht direkte Anfragen).

Jetzt gehts auch. Ist zwar nicht elegant, aber muss für die Vorführung und Abnahme reichen 😉

Das ists eigentlich auch schon ^^ Aus irgend einem Grund "verliere" ich zu Beginn des Strings - den ich vom Port lese - Zeichen (wenn ich richtig gezählt habe, genau 5).

normalerweise schicke ich eine Anfrage mit


public void Send_IdRequest()
        {
            try
            {
                this.serialPort.WriteTimeout=200;
                this.serialPort.Write("IDN?\r");
                               
            }
            catch (Exception ex)
            {
               //absichtlich leer
            }
        }

Danach lese ich die Daten vom Port aus, die nach dieser Anfrage auf mich warten sollten


public string ReadLine()
        {
            try
            {
                this.data = String.Empty;
                Thread.Sleep(500);
                this.serialPort.ReadTimeout = 1000;
                this.data = this.serialPort.ReadTo("\r");
                                                                               
            }
            catch (Exception ex)
            {
                
            }
            return this.data;

        }

Dazu hab ich noch einen Eventhandler, da die Klasse von zwei verschiedene Geräten benutzt wird (die eine Verbindet sich auf den Handler, die andere nicht). Ich möchte das nicht unbedingt über den Event machen (des gibt wieder andere Probleme wie ich gemerkt habe). Wäre mir lieber, bei dem Gerät nur nach Anfrage zu lesen.

Jemand eine Idee, wo und warum die Zeichen verschwinden? Beim Debuggen sind sie manchmal da, manchmal auch nicht (könnte mal wieder eine Timingsache sein).

Vielen Dank

Ja ist sie, aber das war der letzte "dreckige" Hack den ich mir bis zum Schluss aufheben wollte 🙂

Das Problem ist (denke ich) gelöst. Und war an einer ganz anderen Stelle und hatte damit eigentlich gar nichts zu tun g

Zum COM:

Also is eigentlich recht einfach. Ich lass mir alle COMPorts liefern, und versuche zu jedem eine verbindung aufzubauen und einen Befehl hin zu schicken. Vom Messgerät erwarte ich eine bestimtme Antwort. Kommt die, dann hab ich den richtigen Port gefunden, und das ganze wird gespeichert.

Wenn ich das über die Events mache, dann liefert er mir den falschen COM, nämlich den im Array eins weiter stehenden.

Das hab ich auch mal implementiert. Nur wie gesagt, da kriege ich für das Gerät den falschen COM als Ergebnis, und das ist auch schlecht 🙂

edit: Was mich hauptsächlich interessieren würde wäre, warum es denn einwandfrei durchläuft, wenn ichs mit dem Debugger nachverfolge, aber ansonsten abbricht.

Erklärung vorher:

Ich steuere zwei Geräte über eine serielle Schnittstelle an. Einen Barcodeleser und ein Messgerät.

Der Ablauf soll sein: Eine Messung wird durchgeführt, dann der Barcode des Geräts gescannt, und dann sollen die Daten gespeichert werden (Messprotokoll + Barcode).

Das mit dem Scanner habe ich über ein DataReceived-Event gelöst. Die Daten kommen an. Dann hab ich das ganze per BeginInvoke ins Form übernommen und lass es mir anzeigen. Funktioniert auch.

Das andere Gerät ist bischen kniffilger gewesen. Der Event ist in der Klasse zwar vorhanden, ich benutze ihn aber nicht, da ich das Ergebnis erst auslese (auslesen soll), wenn der Event des Barcodelesers gefeuert wird.

Weils zu Lesefehlern kommt (ohne Event) hab ich ein Tread.Sleep in die Lese-Methode gebaut. Nicht unbedingt elegant, aber naja. Hat funktioniert.

Warum ichs bei dem Gerät ohne Event gelöst habe:

Ich soll am Anfang herausfinden, an welchem COM es hängt. Löse ichs über ein Event, krieg ich als Ergebnis den Port, welcher genau einen Stelle im Array HINTER dem tatsächlichen Port ist (also z.b. an 17 gefunden, an 16 wäre korrekt).

Gut, nun zum Fehler selbst:

Wird das Event des Barcodelesers gefeuert, nimmt er den Barcode entgegen, die Methode startet danach das lesen des Messergebnisses, schickt sie an eine Klasse welche ihn Interpretiert, und am Ende geht das alles wieder in eine Klasse ums auf Platte zwischenzuspeichern.

Mein Verdacht, der sich so gut wie bestätigt hat:

Der StringWorker (der den Ergebnisstring in was brauchbares umwandelt) braucht zu lange, und zerschmeisst mir meine Applikation. Muss irgendwas mit dem Timing zu tun haben. Als ichs Schritt für Schritt verfolgt habe, ist der Fehler nicht aufgetreten (mit Haltepunkten etc.).

Was mich verwirrt ist, dass das vorher (ohne Event durch den Barcodeleser) funktioniert hat. Hat jemand irgendwelche Tips für mich, oder Anmerkungen/Lösungsansätze, bzw. kann mir wenigstens grundsätzlich sagen woher der Fehler kommen könnte?

Vielen Dank schonmal

edit: Die Fehlermeldung macht mich deswegen ratlos, weil er in die Main-Methode der Program.cs springt, wo die Form instanziiert wird.


System.Reflection.TargetInvocationException wurde nicht behandelt.
  Message="Ein Aufrufziel hat einen Ausnahmefehler verursacht."
  Source="mscorlib"
  StackTrace:
       bei System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       bei System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       bei System.Delegate.DynamicInvokeImpl(Object[] args)
       bei System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
       bei System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
       bei System.Threading.ExecutionContext.runTryCode(Object userData)
       bei System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup (TryCode code, CleanupCode backoutCode, Object userData)
       bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
       bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       bei System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
       bei System.Windows.Forms.Control.InvokeMarshaledCallbacks()
       bei System.Windows.Forms.Control.WndProc(Message& m)
       bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       bei System.Windows.Forms.ContainerControl.WndProc(Message& m)
       bei System.Windows.Forms.Form.WndProc(Message& m)
       bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms .UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       bei System.Windows.Forms.Application.Run(Form mainForm)
       bei SecuTestEasyUse.Program.Main() in C:\Documents and Settings\hoepfoli\Desktop\Projects\SecuTestEasyUse\SecuTestEasyUse\Program.cs:Zeile 17.
       bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       bei System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
       bei System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
       bei System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
       bei System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
       bei System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
       bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
       bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       bei System.Threading.ThreadHelper.ThreadStart()

05.02.2008 - 15:28 Uhr

Danke für die Antwort.

Das Problem kam daher, dass kein Popup mich über den Wunsch nach einem Hauptschlüssel informiert hat. Verbinden kann ich mich jetzt mit dem Gerät (auch mit diversen SerialPort Tesprogrammen die ich hier im Forum ausgegraben habe).

Über den DataReceivedEvent krieg ich auch immer wunderschöne Barcodes zu sehen, so wies sein soll.

Nur: Ich kann an das Gerät nichts senden. Also auf COM17 kann ich das schon (da läuft der Service und der Port ist angeblich "Ausgehend", vermutlich vom Barcodeleser aus).

Passiert aber nichts. Sende ich auf COM18, stürzt mir mein Terminal ab (dachte mir, ich mach mal 2 Terminals, eines auf COM17 und eines auf COM18).

COM17 scheints (mittlerweilen laut Hersteller) für was anderes gut zu sein. Jedenfalls kann ich versuchen zu senden, ich kriege aber keine Antwort. Irgendwie sehr seltsam (die Barcodes kommen ja auch).

05.02.2008 - 10:05 Uhr

Hallo zusammen!

Ich hab hier einen Brcodeleser, und der soll mit meinem Programm kommunizieren (und logischerweise seine Barcodes schicken 🙂 ).

Zunächst mal muss man das Gerät dazu bewegen, direkt mit dem Rechner zu kommunizieren, und nicht über die Basisstation. Das geht auch soweit (Barcode einlesen und den Scanner als "Server" konfigurieren). Danach findet der PC auch das Gerät.

So, nun kriege ich kriege zwei Ports

COM17, Ausgehend, VoyagerBT 'Serial Port'
COM18, Eingehend, Voyager BT

Aber irgendwie kann ich damit nichts anfangen. Heisst das, ich muss auf 2 Ports mit dem Gerät kommunizieren? Zum Senden einen Port, zum Empfangen einen anderen?
Hinzu kommt, dass die Ports dauernd geöffnet sind (d.h. SeriaPort.Open() geht logischerweise nicht, kann man auf den Ports dann einfach
"zuhören" ?).

Versuche ich nun, mit einem Programm (SerialTemplate o.ä.) auf den COM17 (da läuft auch der Dienst des Geräts angeblich) zuzugreifen, wird mir das verweigert. Bei COM18..naja hängt sichs auf.

Ausserdem drängt sich mir dann die Frage auf, wie ich in der Applikation die beiden Ports automatisch erkennen soll 🙂

Ich hab sogar schon den TechSupport angerufen, aber die konnten mir bisher auch nur begrenzt helfen. Wäre super, wenn mich jemand hier kurz erleuchten könnte, der sich mit Bluetooth auskennt (oder ein guter Link tuts auch zur Not).

Vielen Dank schonmal an alle!

edit: Am besten ohne diverse zusätzliche Frameworks oder Plugins, sondern nur mit VS und .NET

Ich weiss, es gab mal ein ähnliches Thread von mir dazu, aber inzwischen bin ich (teilweise) schlauer, und die Sachlage hat sich geändert.

edit: Tschuldigung ich bin dumm, das Ding will einen Hauptschlüssel der nirgends steht und akzeptiert keine Eingabe diesbezüglich. Muss mich erstmal darum kümmern

Ich weiss, aber ich gebs zu, ich war faul. Da die Parameter aber ja anscheinend noch mehr Probleme lösen, lohnt sichs auf jeden Fall.

Ah...okay, ich habs einfach per Variablen in den String gebastelt der den Query darstellt. Dann muss ichs mit Parametern machen. Vielen Dank! Falls es nicht geht melde ich mich die Tage nochmal 🙂

verwendetes Datenbanksystem: MySql

Hallo zusammen!

Ich speichere das Datum von Messungen im System.DateTime-Format. Die gespeicherten Daten sollen in eine MySql Datenbank (die Speicherung dient nur zur Zwischenlagerung, wenn kein Netz vorhanden ist).

Ich baue mir also einen Query aus diversen Ergebnissen und dem Datum, und will das Ganze dann in eine MySql Datenbank schreiben.

Nun die Frage: Wie kriege ich MySql dazu, das System.Datetime zu "verstehen"? Also wie muss ichs konvertieren? Ich habs schon mit diversen Strings etc. probiert, will aber alles nicht so recht (die Spalte ist vom Typ Datetime, da später noch Filter und eine Berechnung über das Datum laufen sollen).

Im Internet gibts (leider) nur Fragen zum umgekehrten Problem (und hier um Forum auch ^^).

Vielen Dank schonmal für die Hilfe.

Guten Morgen allerseits!

Ich hab ein Problem, das mich insgesamt ziemlich ratlos gemacht hat, und auch übers Wochenende habe ich keine vernünftige Lösung gefunden. Codesnippets kommen am Ende, um zu verdeutlichen wie das ganze funktionieren (sollte).

Als Anmerkung dazu:

Auf "normalen" PCs funktionierts einwandfrei. Zwar sind die Hardwaremöglichkeiten der PDAs noch nicht geklärt (danke an der Stelle an Robert Wachtel hier aus dem Forum für die Hinweise 🙂 ), aber der Support von HP schweigt sich leider aus.

Hardware die verwendet werden soll: HP IPAQ 214,
OS: Windows Mobile 6.0

Die Idee ist folgende:

An dem PDA hängen zwei Geräte, einmal eines mit einer seriellen Schnittstelle (Messgerät), sowie eines per Bluetooth (Barcodeleser).

Jetzt soll die Software die angehängten Geräte "erkennen". D.h., die ComPorts automatisch erkennen, an welchem jedes der beiden Geräte angeschlossen ist. Funktioniert auch (auf normalen PCs), indem ich mir alle ComPorts geben lasse, und mit einer Schleife abarbeite. Es wird eine Anfrage geschickt, und wenn eine erwartete Antwort komm, dann hat man das Gerät gefunden.

Auf dem Emulator für den PDA funktionierts überhaupt nicht. Erstens findet der Emulator nur 2 ComPorts (statt 16 - virtuelle - wie der Rechner an sich hat). Zweitens kriege ich beim zweiten Öffnen und Senden an den anderen ComPort eine IOException in
System.Windows.IO.Ports.SerialStream.WinIOError und folgenden ( Read() , ReadTo() etc).

edit hierzu: Ich kam mal auf die Idee, die Ports umgekehrt durchzugehen. Ergebnis war, dass es NUR mit dem COM3 zu diesem Problem kommt (der Emulator bietet mir COM1 und COM3 zur Auswahl. Der PC auf dem ich entwickle hat eigentlich nur COM1, trotzdem werden immer die beiden gefunden, auch bei anderen Anwendungen. Könnte der USB Host sein, weiss ich aber leider nicht).

Beim ansprechen des ersten ComPorts kriege ich nur ein Timeout.

Hier mal die Methode die die ComPorts durchgeht:


private void Check_DeviceConnection(string DeviceName)
        {
            string[] ports = CommStructure.GetAvailablePorts();

            this.FileWorker.Device = DeviceName;
            this.Set_SerialPortSettings(DeviceName);

            for (int i = 0; i < ports.Length; i++)
            {
                              
                if (String.Equals(DeviceName,"Secutest"))
                {

                    this.SecutestCommStruct.PortName = ports[i];
                    this.Secutest = new SerialConnector(SecutestCommStruct);
                    this.Secutest.CreateAndOpenSerialPort();
                    this.Secutest.Send_IdRequest();
                    string result = Secutest.ReadLine();
                    string[] split = result.Split(';');
                    result = split[2];
                    
                                        
                    if (!String.IsNullOrEmpty(result) && result.StartsWith("SECUTEST"))
                    {
                        
                        MessageBox.Show("Secutest an Port " + ports[i] + " gefunden");
                        this.FileWorker.Save_SetupData();
                    }

                    else if (String.IsNullOrEmpty(result) || !result.StartsWith("SECUTEST"))
                    {
                        MessageBox.Show("Am Port " + ports[i] + " kein Secutest gefunden");
                        this.Secutest.CloseSerialPort();
                        // this.Set_ErrorPanel(this.Worker.Device);
                    }

                }
                
            }


        }

Der serielle Port ist folgendermaßen realisiert (anhand eines Beispiels hier aus dem Forum):

Es gibt (pro Gerät) eine Klasse ComStructure, welche die Einstellungen für die Geräte speichert. Eine entsprechende Instanz wird der Klasse SerialPort übergeben, um damit die Schnittstelle zu realisieren. Die Methode CreateAndOpenSerialPort prüft auch, ob bereits eine Schnittstelle für dieses Gerät geöffnet wurde, und schliesst diese dann, um eine neue zu Öffnen.

Hoffe mal das hilft, und irgendwer kann mir sagen worans liegt.

update:

Inzwischen hab ich zumindest rausgefunden, dass der "reale" Port offensichtlich nicht geöffnet wird. Demzufolge das Gerät auch nicht antworten kann. Hilft leider nur begrenzt weiter 🙂 Die Sache mit COM3 hat andere Ursachen, ich tippe auf die in verschiedenen Foren geposteten Probleme, da COM3 die IR Schnittstelle da ist, welche wohl dauernd vom System geöffnet ist (aber warum beim Emulator??? ).

Mh es hiess mal mit XPATH würd das gut gehen, aber dann probier ichs mal und seh mir den reader an.

edit: Gibts irgendwo mal Beispiele wie man sowas machen kann? Die Doku gibt nichts her, und verwirrt mich eigentlich mehr als dass sie hilft (was ist, was wird wo gebraucht und wem weise ich wie was zu...irgendwie komm ich damit nicht ganz klar).

edit2: Nach längerem suchen habe ich endlich ein Beispiel gefunden. Mal sehen obs weiterhilft 🙂 ansonsten meld ich mich morgen nochmal.

Naja ich wollte das ganze als Schleife machen, dynamisch eben ^^ Nodes abklappern, Werte auslesen und die dann ich den entsprechenden SQL Query quetschen. Ich brauch ja dann auch die Elemente in dem Knoten, und zwar jeden einzeln, um ihn in eine Tabelle zu schreiben. Und das wollte ich eben machen, ohne jeden Knoten direkt zu adressieren.

Das war zumindest die Idee dahinter.

verwendetes Datenbanksystem: XML

Hallo,

wie im Topic erwähnt, irgendwo hakt mein Verständnis bei der XPATH-Navigation durch die Dokumentstruktur. Ich wollte Methoden schreiben, mit denen man durch das Dokument navigiert, und entsprechend einen dynamischen Query füllt (die Datenbank soll normalisiert werden/sein). Aber irgendwie krieg ichs nicht auf die Reihe, Knoten für Knoten durch das Dokument zu navigieren, und (je nach dem obs nötig ist oder nicht) Childnodes auszugeben oder auf Elemente zuzugreifen. Es passiert einfach nix.

Ich hab hier nochmal das Beispiel, das ich mit dem Serialisierer gebastelt habe:


<?xml version="1.0"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Prüfliste>
    <Geräte-ID>02188123132745</Geräte-ID>
    <Tabelle>
      <Klassifizierung_des_Prüflings>
        <Schutzklasse_1>Ja</Schutzklasse_1>
        <Schutzklasse_3>Nein</Schutzklasse_3>
        <Elektronisch>Nein</Elektronisch>
        <Hoher_Ableitstrom>Nein</Hoher_Ableitstrom>
        <EDV_Gerät>Nein</EDV_Gerät>
        <Schutzleiterlänge>Nein</Schutzleiterlänge>
        <Fehlerstromschutz>Nein</Fehlerstromschutz>
        <Klemmenanschluss>Nein</Klemmenanschluss>
        <Keine_Sichtprüfung>Nein</Keine_Sichtprüfung>
        <Prüfling_Aus>Ja</Prüfling_Aus>
        <Geräteverbund>Nein</Geräteverbund>
        <Abtastmodus_Schutzklasse_2>Nein</Abtastmodus_Schutzklasse_2>
        <Netzumpolung>Nein</Netzumpolung>
        <Keine_Ableitstrom_Messung>Ja</Keine_Ableitstrom_Messung>
      </Klassifizierung_des_Prüflings>
      <Messungen>
        <Prüfung Typ="Schutzwiderstand">
          <Resultat>Bestanden!</Resultat>
          <Durchgeführt>Durchgeführt</Durchgeführt>
          <Messwert>0.085</Messwert>
          <Grenzwert>&lt;0.300</Grenzwert>
          <Messwertdifferenz />
          <Grenzwertdifferenz />
        </Prüfung>
        <Prüfung Typ="Isolationswiderstand">
          <Resultat>Bestanden!</Resultat>
          <Durchgeführt>nicht durchgeführt</Durchgeführt>
          <Messwert />
          <Grenzwert />
          <Messwertdifferenz />
          <Grenzwertdifferenz />
        </Prüfung>
        <Prüfung Typ="Ersatzableitstrom">
          <Resultat>Bestanden!</Resultat>
          <Durchgeführt>nicht durchgeführt</Durchgeführt>
          <Messwert />
          <Grenzwert />
        </Prüfung>
        <Prüfung Typ="Sondenstrom">
          <Resultat>Bestanden!</Resultat>
          <Durchgeführt>Durchgeführt</Durchgeführt>
          <Messwert>0.017</Messwert>
          <Grenzwert>&lt;0.500</Grenzwert>
        </Prüfung>
        <Prüfung Typ="ACDC-Spannung">
          <Resultat>Bestanden!</Resultat>
          <Durchgeführt>nicht durchgeführt</Durchgeführt>
          <Messwert />
          <Grenzwert />
          <Messwertdifferenz />
          <Grenzwertdifferenz />
        </Prüfung>
        <Prüfung Typ="Ableitstrom">
          <Resultat>Bestanden!</Resultat>
          <Durchgeführt>Durchgeführt</Durchgeführt>
          <Messwert>00.16</Messwert>
          <Grenzwert>&lt;03.50</Grenzwert>
        </Prüfung>
      </Messungen>
      <Sichtprüfung>
        <SL_Widerstand>Bestanden!</SL_Widerstand>
        <Isolierte_Teile>Bestanden!</Isolierte_Teile>
        <Gehäuse>Bestanden!</Gehäuse>
        <Anschlussleitung>Bestanden!</Anschlussleitung>
        <Typschild>Bestanden!</Typschild>
        <Gebrauch>Bestanden!</Gebrauch>
      </Sichtprüfung>
      <Sichtprüfung_Gesamtbewertung>Bestanden!</Sichtprüfung_Gesamtbewertung>
      <Funktionstest_Gesamtbewertung>Bestanden!</Funktionstest_Gesamtbewertung>
    </Tabelle>
  </Prüfliste>
</Root>

Anmerkung:

Muss nicht zwingend die finale Form sein, spiegelt auch nicht 1-1 die Datenbank wider. War/Ist ein Test zum üben gewesen wie der Serialisierer ungefähr funktioniert, und nun eben zum XPATH-Problem. Testfall sozusagen.

Hallo zusammen und guten Morgen,

ich entwickle zur Zeit eine Anwendung für Mobile Geräte (PDAs). Die Anwendung speichert auf den PDAs Daten, welche später in einer Datenbank gespeichert werden sollen. Allerdings sind die PDAs dabei "unterwegs", und nicht am Firmennetzwerk angeschlossen. Darum sollen die Daten später von der Applikation in eben diese DB gespeichert werden, wenn eine ActiveSync-Verbindung zum eigentlichen Rechner des Benutzers hergestellt wurde (der im Netzwerk hängt).

MEine Frage ist nun, wie "verhält"sich der PDA denn wenn diese Verbindung bestehet? Ist er im Prinzip am Netz angeschlossen, und verhält sich wie der Arbeitsplatzrechner (den er sozsuagen salopp ausgedrückt als Proxy verwendet)?

Hat jemand Erfahrung damit?

Wenn ichs noch hinkriege, dass die "Identifikation" sozusagen der "Root" für die Nachfolger ist, dann müsste es gehen. Ich kriegs nur grad irgendwie net hin 🙂

Ansonsten muss ich mir noch ein Modell bauen.

Also es entspricht leider nicht 1:1 der Struktur in der Datenbank, da die Ursprungdaten als "planes" Datenmodell (array von strings) vorliegen, und die Formatierung beim Serialisieren so wie ich mir das vorstelle ziemlich schwierig ist 🙂

Im Prinzip:

Tabelle Prüfliste

-Tabelle mit Geräte-IDs
--Tabelle Klassifizierung
---Klassifizierungen
--Tabelle Messungen
---Tabelle Messtypen
----Messwerte
--Tabelle "Sichtprüfungen"
---Sichtprüfungen
-Gesamtergebnis
-Gesamtergebnis

(falls damit was anzufangen ist)

verwendetes Datenbanksystem: XML / MySQL

Hallo!

Nachdem ich jetzt erfolgreich die Serialisierung und eine entsprechende Formatierung der XML Datei hinbekommen habe, brauche ich Methoden, um das ganze auszulesen.

Zur Information:

Das Protokoll wird als Datei gespeichert, da der PDA auf dem die Anwendugn läuft nicht immer am (W)LAN hängt. Wenn das geschieht, soll er die Daten aus den (mehreren) XML-Dateien (1 Datei entspricht einem Datensatz) in eine SQL Datenbank aufspielen, mit entsprechend untergeoprdneten Tabellen.

Bleibt mir da nur XPath zum Zugriff auf einzelne Elemente?

Hier die fertige XML-Datei damit ihr euch eine Vorstellung machen könnt:


<?xml version="1.0"?>
<Pruefliste xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Identifikation>02188123132745</Identifikation>
  <Klassifizierung_des_Prüflings>
    <Schutzklasse_1>Ja</Schutzklasse_1>
    <Schutzklasse_3>Nein</Schutzklasse_3>
    <Elektronisch>Nein</Elektronisch>
    <Hoher_Ableitstrom>Nein</Hoher_Ableitstrom>
    <EDV_Gerät>Nein</EDV_Gerät>
    <Schutzleiterlänge>Nein</Schutzleiterlänge>
    <Fehlerstromschutz>Nein</Fehlerstromschutz>
    <Klemmenanschluss>Nein</Klemmenanschluss>
    <Keine_Sichtprüfung>Nein</Keine_Sichtprüfung>
    <Prüfling_Aus>Ja</Prüfling_Aus>
    <Geräteverbund>Nein</Geräteverbund>
    <Abtastmodus_Schutzklasse_2>Nein</Abtastmodus_Schutzklasse_2>
    <Netzumpolung>Nein</Netzumpolung>
    <Keine_Ableitstrom_Messung>Ja</Keine_Ableitstrom_Messung>
  </Klassifizierung_des_Prüflings>
  <Messungen>
    <Prüfung Typ="Schutzwiderstand">
      <Resultat>Bestanden!</Resultat>
      <Durchgeführt>Durchgeführt</Durchgeführt>
      <Messwert>0.085</Messwert>
      <Grenzwert>&lt;0.300</Grenzwert>
      <Messwertdifferenz />
      <Grenzwertdifferenz />
    </Prüfung>
    <Prüfung Typ="Isolationswiderstand">
      <Resultat>Bestanden!</Resultat>
      <Durchgeführt>nicht durchgeführt</Durchgeführt>
      <Messwert />
      <Grenzwert />
      <Messwertdifferenz />
      <Grenzwertdifferenz />
    </Prüfung>
    <Prüfung Typ="Ersatzableitstrom">
      <Resultat />
      <Durchgeführt>nicht durchgeführt</Durchgeführt>
      <Messwert />
      <Grenzwert />
    </Prüfung>
    <Prüfung Typ="Sondenstrom">
      <Resultat>Bestanden!</Resultat>
      <Durchgeführt>Durchgeführt</Durchgeführt>
      <Messwert>0.017</Messwert>
      <Grenzwert>&lt;0.500</Grenzwert>
    </Prüfung>
    <Prüfung Typ="ACDC-Spannung">
      <Resultat>Bestanden!</Resultat>
      <Durchgeführt>nicht durchgeführt</Durchgeführt>
      <Messwert />
      <Grenzwert />
      <Messwertdifferenz />
      <Grenzwertdifferenz />
    </Prüfung>
    <Prüfung Typ="Ableitstrom">
      <Resultat>Bestanden!</Resultat>
      <Durchgeführt>Durchgeführt</Durchgeführt>
      <Messwert>00.16</Messwert>
      <Grenzwert>&lt;03.50</Grenzwert>
    </Prüfung>
  </Messungen>
  <Sichtprüfung>
    <SL_Widerstand>Bestanden!</SL_Widerstand>
    <Isolierte_Teile>Bestanden!</Isolierte_Teile>
    <Gehäuse>Bestanden!</Gehäuse>
    <Anschlussleitung>Bestanden!</Anschlussleitung>
    <Typschild>Bestanden!</Typschild>
    <Gebrauch>Bestanden!</Gebrauch>
  </Sichtprüfung>
  <Sichtprüfung_Gesamtbewertung>Bestanden!</Sichtprüfung_Gesamtbewertung>
  <Funktionstest_Gesamtbewertung>Bestanden!</Funktionstest_Gesamtbewertung>
</Pruefliste>

Danke schonmal an alle die sich besser mit XML auskennen als ich 😉 Bin auch für Links zu Tutorials oder FAQs zu dieser Thematik dankbar, ich finde irgendwie nix brauchbares.

Dank euch,

habs jetzt mit einer - wenn man so will - Klassenhierarchie gelöst weils anders zu keinem gewünschten Ergebnis geführt hat.

Okay vielen dank. Hatte sowas schon befürchtet, aber gehofft man könnte irgendwie drum rum kommen 🙂

verwendetes Datenbanksystem: XML

Hallo zusammen!

Ich möcchte einen Array serialisieren, was kein Problem darstellt. Da ich ein wenig mit Beispiel hantiert habe, übergebe ich die Werte aus dem Array einer dafür erstellten Klasse und Weise sie im Konstruktor Variablen zu (wegen der Benamung in der XML-Datei).

Jetzt habe ich eine Frage bezüglich der Dateistruktur. Ich möchte die Werte etwas ordnen ums übersichtlicher zu gestalten.

Im Moment siehts so ungefähr aus :


<?xml version="1.0"?>
<Ergebnisse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Erste_Messung>Bestanden</Erste_Messung>
  <Spannung>3,25 Volt</Spannung>
  <Zweite_Messung>Nicht bestanden</Zweite_Messung>
  <Widerstand>98304 kOhm</Widerstand>
</Ergebnisse>

Ich hätte das ganze gerne aber nochmal "eingerückt", also sozusagen:


<?xml version="1.0"?>
<Ergebnisse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Erste_Messung>
              <Resultat>Bestanden</Resultat>
              <Spannung>3,25 Volt</Spannung>
  </Erste_Messung>
  <Zweite_Messung>
               <Resultat>Nicht bestanden</Resultat>
               <Widerstand>98304 kOhm</Widerstand>
   </Zweite_Messung>
</Ergebnisse>

Das ist jetzt von Hand getippt, also ich hoffe es passt.

Die Sache ist, wäre es sinnvoll diverse Klassen zu erzeugen, welche dann wieder per Array serialisiert werden, also einen Array von Klassen, um diese Struktur zu erzeugen, oder geht die Formatierung auch einfacher von statten?

Grüss euch,

ich entwickle grade was für Mobile Devices (WinMobile 6, .NET CF 2 SP2). Leider mach ich das zum ersten mal 🙂

Ich würde gerne wissen, was sinnvoller ist: Mit Forms zu arbeiten oder einem Form und ansonsten UserControls. Bei Forms hab ich den Vorteil, dass Ich die ordentlich entsorgen kann, und sie ein paar (in dem Fall glaube ich) wichtige Sachen wie Open, Close, Dialog etc. zulassen. Controls sollten dafür eigentlich "sparsamer" sein oder? Leider ist mein Control visuell so gross wie das Form, in dem es dargestellt wird (im Moment wirds aus irgend einem Grund nicht dargestellt ^^).

Was wäre also sinnvoller, hinsichtlich der doch etwas begrenzen Systemressourcen sowie der Wartbarkeit, Funktionsumfang etc., Forms oder UserControls?

edit: Es geht vor allem auch um das komische Menü, welches diese PDAs in den Forms anzeigen. Macht man das ganze mit UserControls, muss man sich da ja entsprechend um das Verwalten der Instanzen kümmern (naja das Clear eben). Zusammen mit dem Fakt, dass ich nach diversen Aktionen, schliessen bzw. öffnen von Controls etcpp nach Geräten an der Seriellen Schnittstelle suchen muss, wird das hinsichtlich der Rechenleistung vllt. bissl heftig.

mfg

Hallo Svenson,

vielen Dank für die Antwort. Das heisst also, ist das Gerät erstmal "angeschlossen" und erkannt, verhält es sich wie ein ComPort (Serielle Schnittstelle)? Das wäre schonmal sehr gut. Leider scheint HP auf BroadComm Stack zu setzen. Ist das wirklich vom PDA abhängig? Kenn mich mit den Dingern diesbezüglich nicht aus (und man findet kaum was dazu). Anscheinend kann man nicht einmal einen anderen Stack installieren (da man den der drauf ist nicht runter kriegt).

Das heisst also

  1. Barcodeleser mit PDA verbinden (übers normale System)
  2. Wie serielle Schnittstelle ansteuern
  3. fertig ?

Und man braucht keine Erweiterung zum Compact CF 2.0 (wie OpenNetCF oder sowas?)