Laden...

Forenbeiträge von Wolf_maYer Ingesamt 286 Beiträge

09.10.2006 - 09:52 Uhr

Hi,
ich möchte für meine Log-Klasse die Möglichkeit bieten, dass der Entwickler entscheiden kann, ob er die Meldung in einer Log-Datei, einer Messagebox und-oder in einer DOS-Box Ausgabe ausgibt.

Dafür habe ich mich für die angabe in einer Binären Variable entscieden, da sie mir in diesem Fall als die angebrachteste Lösung erscheint.

Soweit ich gesehen habe, muss ich die Variable als short deklarieren.

private short m_Ausgabe = 1;

Die Variable wird über eine Propertie gesetzt und kann jederzeit verändert werden.
Abgefragt wird sie dann später:

           if (m_Ausgabe & 1)
{
    //LogDatei
    int ias = 0; //Nur ein Platzhalter
}
if (m_Ausgabe & 2)
{
    //AusgabeFenster
    int ias = 0; //Nur ein Platzhalter
}
if (m_Ausgabe & 4)
{
    //Dos-Box
    int ias = 0; //Nur ein Platzhalter
}

Leider scheint das nicht wie gewünscht zu funktionieren, da mir der Kompiler anzeigt, dass ich eine implizite Konvertierung durchführen möchte.

Wenn jemand ein schönes Tut für die binärarbeiten hat oder so eine Lösung weiß und sie preisgeben möchte, wäre ich sehr dankbar.

Gruß, maYer

06.10.2006 - 10:59 Uhr

Original von HIZ

Command.Parameters.Add("@SelectedRows", OdbcType.Int, sizeof(int)).Value = dGVKatalog.SelectedRows;    

SelectedRows is eine Collection und i brauche einen int!
Wie kann man das ändern?

Du hast da geschaut?

Hast du das

.Count

gefunden?

06.10.2006 - 09:16 Uhr

Habs Gestern getestet.
scheint zu lööpen.

Gruß, maYer

05.10.2006 - 15:03 Uhr

Super Zero,
vielen Dank für die Antwort.

Ich hatte mir dies hier angeschaut.

Ich war allerdings mit der Informationsmenge in dem Moment leicht überfordert.
Die Stelle, in der steht, dass ich die Funktionen auf die von Dir gezeigte Weise einsetzen kann muss ich dann wohl überlesen haben. Oder ich konnte es mir einfach nicht vorstellen 😉 wie auch immer...

Ich denke, wenn ich jetzt nach etwas anderem Suche, wird mir vieles klarer sein!!!

Gruß, maYer

05.10.2006 - 11:06 Uhr

Hi,
Ich habe möchte bei Dieser XmlDatei:

<?xml version="1.0" standalone="yes"?>
<meinRoot>
  <section>
    <name>Variante</name>
    <pfad>Root\Folder1\Folder2\Variante</pfad>
  </section>
  <section>
    <name>Differenz</name>
    <pfad>Root\Folder3\Differenz</pfad>
  </section>
  <section>
    <name>Datei</name>
    <pfad>Root\Folder3\Folder4\Datei</pfad>
  </section>
</meinRoot>

Alle Knoten mit dem Namen section erhalten, die im Pfad mit "Root\Folder3" beginnen.
Wenn ich den kompletten Pfad angebe, dann lautet der xPath-String ja von meinRoot ausgehend :"descendant::section[pfad='" + pfad + "']"
Aber wie bekomme ich es hin, dass ich nicht den kompletten sondern nur einen Teil zur Verfügung habe?

Ich habe verschiedene Dokus angeschaut unter anderem auch die von W3c aber so richtig weiter helfen sie mir nicht. Kann es sein, dass das nicht möglich ist?

Gruß, maYer

05.10.2006 - 09:20 Uhr

Hmmm,
habe gerade nochmal gesucht und diese Funktion gefunden:


private TreeNode FindNode(TreeNode parentNode, string Path)
        {
            TreeNode tmpNode;
            // If parentNode is the required item
            if ((parentNode.FullPath == Path))
            {
                return parentNode;
            }
            else
            {
                foreach (TreeNode child in parentNode.Nodes)
                {
                    tmpNode = FindNode(child, Path);
                    if (!(tmpNode == null))
                    {
                        return tmpNode;
                    }
                }
            }
            return null;
        }

Die gefällt mir schon besser. Aber obs der Weisheit letzter Schluss ist?
Ich werde sie erstmal implementieren.

Aber so richtig sicher ist mir das auch nicht.

Gruß, maYer

05.10.2006 - 09:13 Uhr

Guten Morgen zusammen,

Ich habe einen TreeView und ich möchte einen bestimmten Knoten finden.
Über diesen Knoten habe ich nur den absoluten Pfad.

Die einzige Möglichkeit, die ich gefunden habe ist, dass ich vom TopNode ausgehe und dann die einzelnen Kinder durchlaufe indem ich den Text der Knoten mit dem jeweiligen Bereich aus der Pfadangabe vergleiche.
Ich werde nur probleme bekommen, wenn 2 Kinder den selben Text haben.


private TreeNode GetNodeByFullPath(TreeView Tree, string Path)
        {
            char[] SplitChar = "\\".ToCharArray();
            string[] splittedPath = Path.Split(SplitChar);
            TreeNode child = Tree.TopNode;
            
            for (int i = 1; i < splittedPath.Length; i++)
            {
                if (child == null)
                {
                    return null;
                }
                TreeNodeCollection nodes = child.Nodes;
                foreach (TreeNode Node in nodes)
                {
                    if (Node.Text == splittedPath[i].ToString())
                    {
                        child = Node;
                    }
                }    
            }
            
            return child;
        }

Gibt es da etwas besseres, oder eine Standard-Funktion?
So gefällt mir das eigentlich gar nicht.

Gruß, maYer

04.10.2006 - 13:40 Uhr

Hi herbivore,
Ich habe es nebenbei mal so versucht(realisiert), wie du in deinem Post geschrieben hast.
Meine Intention zu der Frage oben war, ob ich da etwas besonderes Bedenken muss oder ob ich das einfach so wie bei anderen Klassen implementieren kann.
Wie gesagt, mein erstes Event.

Diese Frage hast du jetzt implizit mit deinem letzten Post beantwortet und ich danke Dir!

Der Bahnhof kam, weil ich mit den beiden Begriffen so allein auf sich gestellt nichts anfangen konnte.
Ein Implementiere die beiden Ereignisse: e1 + e2
Hätten ein aufhalten des Zuges im Bahnhof auf ein Minnimum verringert 🙂

Einen schönen Tag noch, maYer

04.10.2006 - 13:16 Uhr

tuut - tuut - tschicka tschicka tschicka tschicka - tuuuut
Entschuldige mein Bildsprache für Bahnhof 😉

Wenn ich ein Standard Event im Parent abfange, schaut das wie folgt aus:

private void MDIParent_MdiChildActivate(object sender, EventArgs e)
{
     //Code hier
}

Wie schaut das Pendant aus, in dem ich ein Event des Childs im Parent abfange?

Gruß, maYer

04.10.2006 - 12:49 Uhr

Im Prinzip schaut das nicht schlecht aus.
Ich würde die Tabelle der Zuordnung nur noch weiter aufteilen.

Aus:

Bsp:
"Wie öffne ich eine Tür" ",30002,10001,20001"

würden dann 2 Tabellen werden.

Tabelle 1:1.1 Wie öffne ich eine Tür?

und Tabelle 2:1.1 30002 1.1 10001 1.1 20001

Wenn du jetzt suchst, dann verknüpfst du mit einem Join und bekommst alle Ergeignisse.

Ich hoffe, das war verständlich 😉

Gruß, maYer

04.10.2006 - 12:42 Uhr

Hi,
warscheinlich stelle ich hier ein Grundlagen Frage.
Dies mache ich, weil ich mit Events noch nicht so im speziellen gemacht habe und ich da noch nciht so richtig sicher drin bin.

Ich habe schon was nachgelesen aber es noch nicht zu 100% verstanden.

Ziel ist es, dass ich im MDI Parent eine Toolstrip habe, mit dem ich Aktionen im MDI-Child durchführen möchte.
Funktioniert einwandfrei.
Ich habe aber mehrere Arten von MDI-Childs und möchte, dass der Toolstrip-Button nur aktiviert ist, wenn ein MDI-Child vom Typ x oben ist.
Auch das ist einfach durch das Event MDIChild Aktivate abzufangen.

Jetzt gehe ich noch einen Schritt weiter und möchte, dass der Button nur aktiviert ist, wenn ein bestimmtes Element in dem MDI-Child aktiviert ist.
Hierfür muss ich bestimmt ein Ereignis bauen oder?
Da die MDI-Kinder immer dynamisch geladen werden und nicht von vornherein geöffnet sind, bin ich jetzt ein bisschen unsicher, wie ich das "gedöhnse" implementiere.

Kann mir jemand wohl einen kleinen Anstoß geben?

Vielen Dank an Euch im Voraus,

maYer

27.09.2006 - 10:12 Uhr

Hi Scrap,
der link war für Drag and Drop nicht schlecht!
Da ich aber nur dieses eine spezielle Problem hatte, und Drag and Drop generell super Funktioniert, brauchte ich nur den Hinweis von TomTom!

Hab ihn eingebaut und festgestellt, dass jetzt noch das Delay fehlt, damit der Benutzer nicht durch den Tree schießt und hinterher keine Ahnung mehr hat, wo er sich befindet 😉

Gruß, maYer

27.09.2006 - 09:59 Uhr

Hi TomTom, Danke für deine Antwort!

Das hört sich super an!!

Gruß, maYer

27.09.2006 - 09:58 Uhr

hmm,
danke erstmal für deine Antwort.

der dnd Modus ist der Zustand, in dem sich das Programm wärend ich das dnd ausführe.
Der Zeitraum wird wie folgt abgegrenzt.
Anfang, ich selektiere in treeview1 einen Node und ziehe ihn zu treeview2.
Ende, ich lasse den Mausbutton an einem Punkt auf treeview2 los.

Wenn ich wärend dieser Zeit mit der Maus über einen Node auf treeview2 fahre, soll er selektiert werden und expandieren.

ebenso, wie es im Windoof-Explorer auch passiert.

Den Rest vom dnd habe ich hinbekommen und er funktioniert einwandfrei 😉

Gruß, maYer

27.09.2006 - 09:32 Uhr

Hi,
ich möchte Daten zwischen 2 Treeviews austauschen.
Um den Windows Standard zu halten, möchte ich gerne, dass der Treeview das Element, über dem die Maus sich gerade im DnD-Modus bewegt selektiert und expandiert.

Ich habe NodeMouseHover versucht, das geht aber nur, wenn ich nicht im dnd-Modus bin.
Bei DragOver bekomme ich außer der MausPosition keine Informationen über den TreeNode, der gerade unter mir verweilt.

Hat da jemand einen Lösungsansatz?
Mein Lösungsansatz wäre jetzt über die Mauspositionen zu gehen und zu schauen, ob ich mich auf einem anderen Item befinde ...

Ist das der richtige??

Gruß und danke für Eure Ideen,

maYer

22.09.2006 - 11:18 Uhr

Eigentlich wollte ich mich nur Y nennem.
Das war mir dann aber doch zu kurz und ich hab nach etwas geschaut, dass möglichst unauffällig ist und doch schick ausschaut.
Zusätzlich solte es noch für jedermann aussprechbar sein und ich kam auf maYer

Der Zusatz Wolf kommt aus einer langen Allianz Geschichte, die ich in meiner ehemaligen Browserspiel-Vergangenheit durchgemacht habe.

Und ich habe ihn nur dran gepackt, weil ich maYer nicht registrieren konnte.

Soweit zu mir,

Gruß, maYer

21.09.2006 - 11:35 Uhr

Photoshop ist ja auch kein Bildbetrachter ...
Dafür ist absolut nicht geeignet.

Man kann dort höchstens ein paar Ideen für die Handhabung mit einem Bild herausziehen aber das wars auch schon.

Ich habe für mich entschieden, dass ich acdSee als den non plus Ultra als Bildbetrachter sehe. Bin da bis auf die inzwischen völlig überladenen Funktionalitäten absoluter Fan von geworden.
Ein Bildbetrachte muss für mich nur folgendes können:*Vollbildmodus, bei dem man in den mit der Maus markierten Rahmen zoomen kann. *Mit der rechten oder linken Maustaste das gezoomte Bild verschieben. (ohne Tastatur für Präsentationen) *Mit dem Mausrad (ohne Tastatur) ein Bild vor, ein Bild zurück. *Und er braucht einen integrierten Dateiexplorer, um nicht für viele Bilder mit 2 Programmen arbeiten zu müssen.

Um nochmal auf deine Frage von Gestern zurück zu kommen:

Findest du den Modus eigentlich sinnvoll oder hast du einfach nur damit rumgespielt?

Zu erst: Ich bin auf der Suche nach einer Alternative zu acdSee, weil mir das Programm zu teuer ist und ich Piraterie aufgrund meines Berufes ablehne. Deswegen befasse ich mich auch zwecks eines Umstieges immer gerne mit guter Freeware.

Ob ich den Modus jetzt sinnvoll finde?
eigentlich schon, da es WindowsStandard ist. Ich versuche meine Programme auch immer im Standard zu halten, da sonst jeder Anwender verwirrt ist und mit den Programmen nicht klar kommt.

Gruß, maYer

21.09.2006 - 08:12 Uhr

Hmm,
ich weiß nicht so recht ...
eigentlich fände ich es besser, wenn man das Bild mit der Maus ziehen könnte und es nicht über die Scrollbars verschiebbar wäre, als dass der Rand des Bildes an den Rand des Fensters kommt. Das ist zumindest meine Arbeitsweise in acdSee und Photoshop (Lieblingstaste Space)
Außerdem finde ich das Scrollrad mit der Zoomfunktion fehlbelegt. Besser würde mir hier eine Bild weiter Bild zurück Funktion gefallen.

Evtl. könnte man hier ein Settigsmenu wie es der ZoomPlayer zum Beispiel bietet einbauen 😉 Da kann man alles aber auch wirklich alles einstellen.

Ich hoffe ich habe Dich nicht mit meinen Überlegungen überfallen.

Gruß, maYer

20.09.2006 - 14:55 Uhr

An für Sich ein schönes Programm.
Mir fehlt, da ich an acdSee gewöhnt bin immer der integrierte Dateibrowser, den ich schätzen gelernt habe.

Einen Bug habe ich noch festgestellt.
Wenn man das Bild zoomt, eine Ecke als Mittelpunk nimmt und das Bild dann wieder auf die Originale größe zoomt (Mit der Maus) dann fehlt leider die hälfte des Bildes und er bietet mit keine Scroll-Funktion mehr an.

Gruß, maYer

20.09.2006 - 10:15 Uhr

Ich sag nur mal danke 😉

Gruß, maYer

18.09.2006 - 10:59 Uhr

Hab da nachgeschaut ...
Muss ich überlesen haben!

hmm

"Wer lesen kann ist klar im Vorteil" oder wie hieß das?

Gruß, maYer

18.09.2006 - 09:22 Uhr

Ahh ok, dann muss ich also ver dem Rechnen den Grad-Winkel in Bogenmaß umrechenn und hinterher wieder zurück:


double bogen = (Gwinkel * System.Math.PI) / 180;
double temp = System.Math.Sin(bogen);
bogen = System.Math.Asin(temp);
Gwinkel = (bogen * 180) / System.Math.PI;

Lööpt!

Danke

<edit> Danke, habs auch bei wiki gefunden 😉</edit>

18.09.2006 - 09:10 Uhr

Aber wie lautet denn dann die Umkehrfunktion zu Sinus?

Sry, hab nicht studiert und die Schulzeit ist echt lange her 😉

Gruß, maYer

18.09.2006 - 08:59 Uhr

Ich versuche mich gerade mal in Mathematischen Funktionen und wundere mich ein wenig.

Hab ich etwas falsch in erinnerung oder hat MS das schief implementiert?

Nach dem was ich gelernt habe sollte:


double temp = System.Math.Sin(38);
double Gwinkel = System.Math.Asin(temp);

GWinkel hier wieder 38 haben.
VStudio spuckt aber "0.30088815692248116" als Ergebnis heraus.

Kann das einer erklären?

Gruß, maYer

14.09.2006 - 12:02 Uhr
protected

wars,

Danke!!

14.09.2006 - 11:38 Uhr

Hi,
Ich habe mal eine grundlegende Frage.


//Ich habe eine Basisklasse 
public class A
{
  public virtual int add(object Obj)
  {
      //Do something
      return 1;
  }
}

//Klasse B erbt von A
public class B : A
{
  public string add(string Obj)
  {
      //Do something else or more.
      return base.add(Obj).ToString();
  }
}

//Klasse C nutzt Klasse B
public class C
{
  public viod main()
  {
      //Do something
      B useObj = new B();
      B.add( //An dieser Stelle angekommen setzt meine Frage ein!
  }
}

Ist es möglich, an der gekennzeichneten Stelle nur die Methode Add der abgeleiteten Klasse anzuzeigen und die Methode der Basisklasse auszublenden?
Er zeigt eine Überlagerung an, weil die Parameter unterschiedlich sind.

Gruß, maYer

<edit>hatte das virtual bei der Funktion in der Basisklasse vergessen</edit>

13.09.2006 - 16:39 Uhr

Genau so werde ich dass machen.
Danke Euch!!!

Es stellt sich mir nur die Frage, wie ich die Property Item implementieren soll ...

Es soll ja so funktionieren, dass der Anwender der Klasse hinterher folgendermaßen arbeiten soll:


Benutzerobjekt = BenutzerListe[0];

Und noch spannender ist es, wenn ich an dieser Stelle einen String haben möchte.


BenutzerWert = BenutzerListe["Attributsname"];

Gruß,
maYer

13.09.2006 - 16:12 Uhr

Original von sheitman

  
List<BenutzerObject> benlist = new List<BenutzerObject>();  
BenutzerObject benObj = new BenutzerObject();  
benObj.aString = "aa";  
benObj.bZahl = 2;  
benlist.Add(benObj);  
benObj = new BenutzerObject();  
benObj.aString = "bb";  
benObj.bZahl = 5;  
benlist.Add(benObj);  
//benlist.Sort(); glaub ne Liste hat sowas nicht, bin mir aber nicht sicher  
  

Wenn ich nach diesem Shema die Basisklasse, die nach dem IList-Interface aufgebaut ist aufbaue, dann habe ich doch meine eigene Listenklasse oder?

Gleich mal ransetzen 🙂

13.09.2006 - 16:08 Uhr

Original von sheitman
hm, kannst auch sagen warum?
willst du in deiner collection irgendwie was anders machen als es als standardverhalten vorhanden ist?

Klar kann ich 😉
Ich habe vor eine Basisklasse mit verschiedenen BasisMethoden und Properties zu bauen. Hier kommen die ganz Oben aufgezählten plus einige weitere in Frage.
Daraus leite ich dann weitere Klassen ab, so dass ich für jeden speziellen Fall die richtige CollectionClasse habe.

Dir ist klar das IList ein Interface und keinen Klasse ist oder?

Hab ich gerade in dem Thread vorteil nachteil .Net gelesen.

Wie mache ich dass denn dann?

13.09.2006 - 15:43 Uhr

Original von sheitman
benutzt du .NET 2.0?
Durch List<T> kannst du ohne weiteres eine Liste beliebigen Types verwenden.

zu 1: ja 😉

zu 2: Nö, ich brauch ein Konstrukt, das von außen wie eine Klasse erscheint.

Ich nutze C# seit 2 -3 Monaten und habe vorher nur VB6 getippselt.
Ich bin mit meinen momentanen Ergebnissen schon recht zufrieden aber hier und da hapert es leider an Grundlagenwissen.

Gruß, maYer

P.S. ich bin superglücklich über das Forum und die Hilfe, die man hier bekommt!!
Ich hoffe, ich kann es bei Zeiten zurückgeben!!

13.09.2006 - 15:40 Uhr

Ich habe zuerst folgendes versucht:
Modul:


namespace Collectiontest
{
    class BenutzerObject
    {
        public System.String aString;
        public System.Int32 bZahl;
    }
    class BenutzerCollection :System.Collections.ArrayList
    {
        public override int  Add(object value)
        {
            BenutzerObject bobj = new BenutzerObject();
            if (value.GetType() == bobj.GetType())
            {
                return base.Add(value);
            }
            else
            {
                throw new System.Exception("Fehler");
            }
        }
    }
    
}

Programm:


BenutzerCollection benlist = new BenutzerCollection();
BenutzerObject benObj = new BenutzerObject();
benObj.aString = "aa";
benObj.bZahl = 2;
benlist.Add(benObj);
benObj = new BenutzerObject();
benObj.aString = "bb";
benObj.bZahl = 5;
benlist.Add(benObj);
benlist.Sort();

Hierbei schmeißt er bei benlist.sort() einen Fehler, dass er die Objekte nicht sortieren kann.
Ist ja auch richtig und logisch. Da ich es nicht brauche, wollte ich es auch eliminieren aber ich glaube dass es nicht geht, dass ich Methoden, die die Base-Klasse hat aus der geerbten Klasse ausschließen kann.

Dann wollte ich das genauso mit der IList machen:


namespace Collectiontest
{
    class BenutzerObject
    {
        public System.String aString;
        public System.Int32 bZahl;
    }
    class BenutzerCollection :System.Collections.IList
    {
        public override int  Add(object value)
        {
            BenutzerObject bobj = new BenutzerObject();
            if (value.GetType() == bobj.GetType())
            {
                return base.Add(value);
            }
            else
            {
                throw new System.Exception("Fehler");
            }
        }
    }
    
}

Aber da schmeißt er mir von Anfang an nur Fehler raus.

//In .NET 2 lieber List<OneItem> verwenden

genau dafür brauch ich ein verständliches erklärendes Beispiel, auf dem ich aufsetzen kann, weil ich glaube, dass darin der Schlüssel zum Erfolg liegt 🙂
Leider bin ich noch recht neu in C# und weiß noch nicht alles auf Anhieb.

Lieben Gruß an Alle,

maYer

13.09.2006 - 15:09 Uhr

Hi,
bevor ich wieder in eine Sackgasse laufe und hier tausend Fragen stelle, die evtl. nur nerven und keinem helfen.

Ich möchte eine Menge von Objekten in einer Collection sammeln.
Diese Sammlung braucht die Methoden
Add, Remove, IndexOf und Clear. Außerdem benötige ich die Eigenschaft Item[].

Ich habe in einem kleinen Beispiel versucht von einer ArrayListe zu erben und musste feststellen, dass bei Sort() natürlich ein Fehler auftrit, da die Objekte nicht sortierbar sind.

Dann habe ich weiter geschaut und habe festgestellt, dass die IList wunderbar wäre um von Ihr zu erben und damit weiter zu arbeiten. Dies ist dann leider in die Hose gegangen, weil das anscheinend nicht so trivial ist.

Habt ihr ein kleines Beispiel auf ner Webseite oder hier als Code, in dem das Prinzip ersichtlich ist? Ich habe überall nach einer Basisimplementierung gesucht aber leider nichts gefunden.

Gruß und vielen Dank, maYer

13.09.2006 - 13:21 Uhr

Hi,
ich muss in einem Trigger eine abfrage zur Validierung von Daten machen.
Wenn diese Validierung bezüglich einiger Parameter fehlschlägt, möchte ich dass die Aktion an dieser Stelle abgebrochen wird und das Programm den Abbruch in Form einer Fehlermeldung mitgeteilt bekommt.

probiert habe ich es mit dem T-SQL Komando


RAISERROR('Der Benutzer kann die Operation nicht ausführen, da ein anderer Benutzer das Objekt geblockt hat', --Fehlermeldung
					  17, --Schweregrad des Fehlers.
					  1)  --Status. Dient zur Unterscheidung der selben Fehlermeldung an verschiedenen Stellen.
					  WITH NOWAIT --Fehlermeldung soll sofort ausgegeben werden.

Leider musste ich feststellen, dass meine Applikation ohne irgendetwas von dem Fehler mitzubekommen weiterläuft als wenn nichts gewesen wäre.

Gruß, maYer

08.09.2006 - 08:05 Uhr

Ich habe mir Gestern überlegt, dass ein Instead Of Trigger beim füllen der Lock-Tabelle eine gute Problem-Lösung ist.
Er belastet das System nicht, ich muss keine Tabelle sperren und die Zeit, die der trigger benötigt ist so extrem kurz, dass es sehr unwarscheinlich ist, dass zwischen Abfrage und Einfügen der Daten jemand anderes exakt den selben Datensatz ändern möchte.

Gruß, maYer

07.09.2006 - 13:42 Uhr

Schreib doch mal ein ä,ü,ö per Code in eine XML-Datei und schau, was passiert.

Gruß, maYer

07.09.2006 - 10:18 Uhr

Hi,
ich schreibe gerade eine API für eine Lifecycle-Anwendung.
Hier gibt es mehrere wichtige Funktionen um Objekte zu bearbeiten (Anlegen, Ändern, Löschen, Neu Versionieren, etc.) die immer nur von einer Person ausgeführt werden dürfen.

Da innerhalb der Operationen auch Dateiverschiebungen von größeren Dateien vorkommen können, brauche ich etwas, dass nicht wärend der Bearbeitungszeit alle benutzten Tabellen lahm legt.

Ich habe mir überlegt, dass ich mir in einer Lock - Tabelle vor der eigentlichen Operation merke, welcher Benutzer im Moment welches Objekt bearbeitet. Nach der Operation wird dieser Datensatz dann wieder entfernt und das Objekt frei gegeben.

Andere Operationen, die nicht so Zeitintensiv sind führe ich mit einem TABLOCK-Statement aus.

Ist das, wenn es sauber implementiert wird Wasserdicht?
Gibt es da Alternativen, wie man vorgehen könnte?

Vielen Dank für Eure Gedanken!

maYer

30.08.2006 - 15:25 Uhr

Waset nich allet jibt!!!

Danke herbivore!

30.08.2006 - 15:09 Uhr

Hi,
ich möchte gerne anhand eines Zahlenwertes eine bestimmte Anzahl 9en hintereinander schreiben. (maximal 9)

Dafür habe ich mir mal ein TestCode geschrieben, der mir irgendwie so vorkommt, als wenn ich "Von hinten durch die Brust ins Auge geschossen" habe.


System.Int32 Zahl;
System.String Test1 = this.textBox1.Text;
System.String Test2 = this.textBox2.Text;
if (int.TryParse(Test2,Zahl))
{
   System.Int64 Temp = 999999999;
   Test3 = Test1 + string.Format("{0," + Zahl.ToString() + ":" + Temp.ToString().Substring(0,Zahl) + "}", Zahl);
}
this.textBox3.Text = Test3;

Wie kann ich das verbessern?

28.08.2006 - 12:30 Uhr

Da ihr dass ja jetzt privat löst, würde mich als stiller Leser die Lösung des Problems interessieren 😉

Bitte postet sie hier am Ende.

Gruß, maYer

28.08.2006 - 11:48 Uhr

Hi herbivore,

wenn du´s so sagst, klingt´s irgendwie einleuchtend 😉

Dank Dir!

28.08.2006 - 11:37 Uhr

Hi herbivore,
demnach müsste doch bei


System.IFormatProvider fp = new System.Globalization.CultureInfo("en-US");
System.String sa = "1,23432";
System.String s = double.Parse(sa, fp).ToString();
System.String a = sa.Replace(",", ".");

a=s sein.

Ist aber nicht so.

28.08.2006 - 09:04 Uhr

hi Talla,
meinst du, dass ich den SQL-Server in die richtige Culture einstelen muss?

Ich arbeite ja im Programm mit ein und der selben Culture. Und zwar in der lokalen Culture. Ich schaus mir mal an.

<edit>
Hmm, ich konnte bei der DB nichts finden, dass ich das einstellen kann und habe mich jetzt dazu entschieden, das ich an der Stelle an der ich die Varchar Felder mit '' versehe noch zusätzlich eine Abfrage einbaue, dass ich bei Float-Werten Punkte in Kommatas abändere.
</edit>

Danke für den Tip!

25.08.2006 - 16:37 Uhr

Hehe, irgendwie glaube ich, ich werde von dieser Zahl heute Nacht träumen!!!

Wenn ich diese Zahl jetzt via SQL in die DB drücken möchte, dann schmiert mir das Statement mit falsche Anzahl von Spalten ab.

Warum?
Ganz einfach. Ich konvertiere den Double Wert wieder zum String um und was steht da? ein Komma!!! AAArgh!

Ich geh kaputt!!!

Entschuldigt meine verbale Endgleisung aber das geht mir aufn Keks!!
Es kann ja nicht nur an dieser Stelle vorkommen, dass es sich um eine Kommazahl handelt.
Gibt es etwas eleganteres als String.Replace?

Gruß, maYer

25.08.2006 - 16:21 Uhr

Danke herbivore,

mache es jetzt so um allem aus dem Weg zu gehen:

Das eigentliche parsen ist erst in der allgemeinen Funktion.


System.Double d = -1.23456E+32;
System.String s = d.ToString();
obj.SetValue(s);

25.08.2006 - 16:08 Uhr

Naja, aber es ist ein neues Phänomen aufgetaucht:


System.Double d = System.Double.Parse("-1.23456E+32")

//d.ToString() is gleich "-1.23456E+37"

Wie ist das zu erklären?

25.08.2006 - 15:58 Uhr

Wenn man so zuweist


if(Type == Double)
{
Value = ...;
}
else if(Type == Int32)
{
Value = ...;
}
{
Value = " ";
}

dann kanns ja nicht gehen ...

Grummel

25.08.2006 - 15:16 Uhr

Hi, ich versuche den Wert -1,23456e+32 in eine Variable vom Typ Double zu packen.


System.String Value = "-1,23456e+32";
double.parse(Value.ToString());

Das scheint allerdings nicht zu funktionieren. Es scheint warscheinlich ein Grundlagenproblem auf meiner Seite zu sein.
Ich habs auch versucht, in dem ich das Komma in einen Punkt (Ami-Notation) getauscht habe, hab bei Google gesucht (falsche Stichwörter), bei Gallileo und Hier geschaut und nix gefunden!

Danke für Eure Hilfe!

21.08.2006 - 11:01 Uhr

Jau, funktioniert!!!
Danke!

21.08.2006 - 09:59 Uhr

Super Tip, danke!!!

Leider stehe ich jetzt vor dem Berg eine API-Funktion einzubinden.
Ganz abgesehen davon, dass ich das nicht mehr machen wollte, da es veraltet ist, habe ich das in C# auch noch nicht gemacht.

Ich werde mich jetzt also mal auf die Suche nach einem HowTo machen.
Wenn jemand noch einen Tip für ein gutes HowTo bzw. eine .Net Problemlösung kennt, wäre ich super dankbar.

Gruß, maYer