Laden...

Forenbeiträge von steven Ingesamt 79 Beiträge

08.02.2018 - 19:32 Uhr

Erstmal danke fürs umbenennen.

Die Zertifikate sind meistens mehrseitige PDFs aber die Anzahl der Datensätze bleibt sehr überschaubar.

Die Zertifikate als Byte Blob speichern. Weiß nich ob das geht, wegen Dokumentationspflicht etc. Die Orginaldateien müssen/solten irgendwie gespeichert werden. Und dann gibts auch backups der dateien.

08.02.2018 - 15:26 Uhr

verwendetes Datenbanksystem: SQL2012 Express (noch)

Hallo zusammen,

ich benötige mal eure Hilfe. Und zwar haben wir bei uns in der Firma Geräte die einmal im Jahr zur Kalibrierung verschickt werden müssen.
Zur Zeit wir das alles in einer Excel Tabelle verwaltet und es passiert regelmäßig das die Termine für die nächste Kal. vergessen werden. 8o

Da das natürlich mist ist, gibts da bald ne DB-Anwendung. Eigentlich ganz einfache Sache. Ich hab die Oberfläche fast fertig und der SQL Server verschickt auch schon Mails 30 Tage vor dem Ablaufdatum. Soweit so gut.

Nun aber zum Problem/Frage:

Es sollen auch Zertifikate (in der DB) abgelegt werden. Ich danchte da an eine Filetable. Ich hatte mir das so vorgestellt, dass man im DataGrid per rechtsklick das Dokument einem Datensatz zuordnet.
Wenn ich das richtig verstanden habe muss die Datei dann in den entsprechenden Ordner verschoben werden. (System.IO.File.Move) Kann ich der Filetabel dann die GUID des Datensatzes mitteilen oder lege ich da eine extra Tabelle an mit zwei ID Spalten (DatenTabelle/Filetable). Oder ist die Filetable dafür das falsche Mittel.

Danke schonmal.

Grüße
Steven

27.10.2016 - 15:52 Uhr

Vielen dank für eure Hilfe. Mit dem Beispiel bzw. denkanstoß hat es soweit schonmal geklappt.


 var q = (from to in myDB.tblTestObjects
                       join r in myDB.tblRefFaNoTestObjects on to.TestObjectID equals r.TestObjectID into g1
                       from fo in g1.DefaultIfEmpty()
                       group new
                       {
                           to.ModelNo,
                           to.ArticleSN,
                           to.TestObjectID,
                           fo.tblFANo.FANo,

                       }by to.ModelNo);


            foreach (var grouping in q)
            {
                TreeNode nodeFor = new TreeNode();
                nodeFor.Name = "Model";
                nodeFor.Text = grouping.Key;
                nodeFor.Tag = "Model";
                treeView.Nodes.Add(nodeFor);

                foreach (var item in grouping)
                {
                    TreeNode subitem = new TreeNode();
                    subitem.Name = "SN";
                    subitem.Text = item.ArticleSN + " (" + item.FANo+")";
                    subitem.Tag = item.TestObjectID;
                    nodeFor.Nodes.Add(subitem);

                    foreach(var item2 in item) //<- hier soll noch die FaNo ausgeben werden 
                    {

                    }

                }
            }

Aber ich brauche noch ein Tipp 😃 Wie mache ich das mit verschachtelten Gruppen. Ich möcht so einen TreeView füllen. Einmal gruppieren ist kein problem nur die zweite Gruppierung bekomm ich nicht hin. D.h. Model und SN klappt nur dazu die untergruppe FaNo klappt nicht.

-Model
----SN
--------FaNo
----SN
--------FaNo
-Model
----SN

Danke und Grüße
Steven

13.10.2016 - 13:47 Uhr

verwendetes Datenbanksystem: <SQL Server LinqToSql>

Hallöchen,

ich habe mal eine Frage ob das geht was ich vorhabe.

Ich habe 3 Tabellen siehe Anhang

Und folgende Abfrage


var querry = from to in myDB.tblTestObjects
                         join r in myDB.tblRefFaNoTestObjects on to.TestObjectID equals r.TestObjectID
                         join fa in myDB.tblFANos on r.FANoID equals fa.FANoID
                         select new
                         {
                             to.ModelNo,
                             to.ArticleSN,
                             fa.FANo
                         };

Die Abfrage liefert mir alle einträge aus tblTestObject die auch einen Eintrag in der Referenz Tabelle haben.

Kann man das so umschreiben, dass alle Einträge zurückgegeben werden auch die die keine einträge in der Referenz Tabelle haben. Bin in Linq noch nicht wirklich fit......

So z.B. Result
[0]{ModelNo="test", ArticleSN="1234", FANo= "JD1234"}
[1]{ModelNo="test", ArticleSN="5678", FANo= null} <- Kein Eintrag in der RefTabelle

bzw.

[0]{ModelNo="test", ArticleSN="1234", FANo= "JD1234"}
[1]{ModelNo="test", ArticleSN="5678"}

Geht das?
Danke schonmal und Grüße
Steven

28.11.2013 - 16:20 Uhr

Hi.

habe jetzt mal ein paar dispose hinzu gefügt, leider ohne erfolg.


 writer.Dispose();
 writer.Close();

  reader.Dispose();
  reader.Close();
                
   document.Dispose();
   document.Close();

PdfContentByte und PdfImportedPage hat kein dispose. Muss man das evt. closen ???

System.Diagnostics.Process.Start(destinationFile); <- Öffnet nur das merge File und das soll nicht gelöscht werden.

Ich bin echt ratlos.

28.11.2013 - 10:46 Uhr

Moin Zusammen,

ich habe folgendes Problem und gehe davon aus das ihr mir helfen könnt. Ist warscheinlich nur ne kleinigkeit. Aber daran verzweifele ich gerade etwas.

Problembeschreibung:

Ich möchte alle PDFs aus einem Verzeichniss mergen (Zusammenfügen) funzt super mit iTextSharp danach soll er die Dateien Zippen das klappt auch noch. Und dann soll er die Dateien löschen, das ZIP natürlich nicht. Das Problem ist das meine Anwendeung den Zugriff auf die Dateien sperrt. Und ich finde leider nicht raus wie ich die Dateien wieder freigebe.

Wenn ich das Mergen weglasse geht es. Also muss es ja in der Merge Routine passieren.

Hier mal ein Code Ausschnitt:


 MergePdf(dir1.FullName + "\\" + filenamePDF, filesStoreArray);
               
                try
                {
                    using (ZipFile zip = new ZipFile())
                    {
                        zip.StatusMessageTextWriter = System.Console.Out;
                        zip.AddDirectory(dir1.FullName); // recurses subdirectories
                        zip.Save(dir1.FullName + "\\"+filenameZIP);
                    }

                    foreach (string fileToDel in filesStoreArray)
                    {
                        File.Delete(fileToDel); //hier kommt die Exception 
                    }

                }
                catch (System.Exception ex1)
                {
                    MessageBox.Show(ex1.StackTrace);
                }


Und hier die Merge Routine die das Problem veruracht, glaube ich jedenfalls


public void MergePdf(string destinationFile, string[] sourceFiles)
        {

            try
            {
                int f = 0;

                PdfReader reader = new PdfReader(sourceFiles[f]);
                int n = reader.NumberOfPages;

                Document document = new Document(reader.GetPageSizeWithRotation(1));
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));

                document.Open();
                PdfContentByte cb = writer.DirectContent;
                PdfImportedPage page;
                int rotation;

                while (f < sourceFiles.Length)
                {
                    int i = 0;
                    while (i < n)
                    {
                        i++;
                        document.SetPageSize(reader.GetPageSizeWithRotation(i));
                        document.NewPage();
                        page = writer.GetImportedPage(reader, i);
                        rotation = reader.GetPageRotation(i);
                        if (rotation == 90 || rotation == 270)
                        {
                            cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                        }
                        else
                        {
                            cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                        }

                    }
                    f++;
                    if (f < sourceFiles.Length)
                    {
                        reader = new PdfReader(sourceFiles[f]);

                        n = reader.NumberOfPages;
                    }
                }
                document.Close();
                System.Diagnostics.Process.Start(destinationFile);
            }
            catch (Exception e)
            {
                string strOb = e.Message;
            }
        }

Vielen Dank schonmal
Gruß
Steven

26.07.2013 - 07:59 Uhr

Moin,

verwendetes Datenbanksystem: SQL Express

ich benötige mal eurer Hilfe bei der bindung von TextBoxen. Und zwar habe ich 2 Tabellen

  1. tblCustomer
    -CustomerID
    -CustomerNo
    -Name
    -Discount
    -AddressID
    • etc.
  2. tblAddresses
    -AddressID
    -Street
    -StreetNo
    -etc

Diese im Dataset dsCustomer. Verknüpf sind die folgendermassen


DataRelation drel = new DataRelation("rel1", dsCustomer.tblAddresses.Columns["AddressID"], dsCustomer.tblCustomer.Columns["AddressID"]);

Die TextBox für CustomerNo habe ich per Designer gebunden.


this.textBoxCustomerNo.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.tblCustomerBindingSource, "CustomerNo", true));

Zum Navigieren benutze ich den BindingNavigator. Das funzt auch für die TextBoxen der Tabelle tblCustomer.
Jetzt soll eine zweite TextBox die verknüpfte Strasse anzeigen, also Street aus der Tabelle tblAdresses

Könnt ihr mir erklären wie das funktioniert? Mit Databinding bitte.
Ich könnte mir mit DataTable.Select(...) die benötigeten Werte holen aber so will ich das eigentlich nicht machen.

Grüße
Steven

15.03.2013 - 11:24 Uhr

Hm dann sollte ich das so probieren:

User drückt -> Button disable -> Datenbankeintragung als Thread starten -> wenn Thread fertig button wieder enable.

Sehe ich das so richtig?

dazu noch ne Verständnissfrage:
Müsste die GUI nicht erst blockieren nachdem der Button disabled wurde? Werden die befehle nicht stur nach einander abgearbeitet?

15.03.2013 - 10:41 Uhr

Moin Zusammen,

ich habe mal wieder ein Problem wo ich nicht weiterkomme. Jetzt seit ihr gefragt. Ich bin nich so sehr erfahren darum denke ich das sich das bestimmt recht einfach lösen lässt.

Problembeschreibung:

Ich habe eine Anwendung die ein paar Daten in eine Access Datenbank schreibt. Access ist vorgegeben.......

Die Access DB liegt auf einem Netzlaufwerk. Im Grunde funktioniert das auch alles. Gäbe es da nicht die ungeduligen User.......

Folgendes Problem:
Ein User tippt die Daten in TextBoxen und drückt den Speicher Button. Die Daten werden in die Access DB geschrieben und das Datagridview aktualisiert. Leider dauert es etwas bis die Daten in der DB sind und das Grid sich aktuallisiert hat.

Wenn man in der zwischenzeit den Speicher Button klickt gibt es doppelte einträge. 😦

Hier mal der Code des Speichern Button.


 private void button_AddToDb_Click(object sender, EventArgs e)
        {
           

            button_AddToDb.Enabled = false; // Idee zur Lösung des Problems
            
            DataTable dtTemp= myDB.GetTable("tblRmaNr");
            var maxRow = dtTemp.Select("RmaNr = MAX(RmaNr)");

            int iRMA = Convert.ToInt32(maxRow[0].ItemArray[0].ToString()) + 1;
           
            string strDate;
            if (dateTimePicker_wish.Checked == true)
            {
                strDate = dateTimePicker_wish.Text.ToString();
            }
            else
            {
                strDate = string.Empty;
            }

            bool bRma;
            if (checkBox_Rma.Checked == true)
            { bRma= true; }
            else
            { bRma= false; }

            ds.Tables["tblRMA"].Rows.Add(new object[]
            {
                iRMA,
                textBox_Person.Text,
                dateTimePicker_date.Text,
                textBox_description.Text,
                textBox_sdNr.Text,
                strDate,
                textBox_costumer.Text,
                textBox_contact.Text,
                textBox_email.Text,
                false,
                bRma
            });
            ds.Tables["tblRmaNr"].Rows.Add(new object[] { iRMA });

            myDB.UpdateTable(ds.Tables["tblRMA"]);
            myDB.UpdateTable(ds.Tables["tblRMANr"]);

            ds.Tables["tblRma"].DefaultView.RowFilter = string.Empty;

                textBox_description.Text="";
                textBox_sdNr.Text="";
                textBox_costumer.Text="";
                textBox_contact.Text="";
                textBox_email.Text="";

                button_AddToDb.Enabled = true;
        }

Meine Idee war jetzt Button.enable=false am anfang und am ende wieder enable = true.

Leider bringt das nichts.

ich hoffe ich habe mich einigermassen verständlich ausgedrückt.

Gruß
Steven

08.02.2012 - 16:04 Uhr

verwendetes Datenbanksystem: <SQL Comact>

Hallöchen,

ich habe ein kleines Problem mit nem SQL Select String


DataRow[] drFound = kontoDBDataSet.tblPayee.Select("SELECT * FROM tblPayee WHERE Payee=('" + payeeTextBox.Text + "')");

Das ganze mal einfach.


DataRow[] drFound = kontoDBDataSet.tblPayee.Select("SELECT * FROM tblPayee");

Bekomme immer folgende Fehlermeldung
Syntaxfehler: Fehlender Operand nach dem Operator 'tblPayee'.

Wo ist den da der Fehler??? Ich hab da grade n Brett vorm Kopf

26.11.2010 - 07:57 Uhr

@TheBrainiac

Settings.designer.cs Dateien auch auf "Mitkompilieren"

Da war der Fehler, habs auf Kompilieren gestellet und siehe da es geht. 😁

Vielen dank für die Hilfe
Gruß
Steven

25.11.2010 - 16:56 Uhr

Hm könnte man probieren aber da würd ich erstmal abwarten obs da noch bessere/andere Lösungsvorschläge gibt.

25.11.2010 - 16:17 Uhr

Hallöchen,

ich habe folgendes Problem, ich habe meinen Rechner neu inst. also auch das VS2008 neu aufgespielt. Jetzt bekomme ich beim debuggen(F5) folgende Fehlermeldung:

Fehler 1 Der Typ- oder Namespacename "Settings" ist im Namespace "RepProtokollHD.Properties" nicht vorhanden. (Fehlt ein Assemblyverweis?) C:\Dokumente und Einstellungen\SW.DENTONCOE\Eigene Dateien\C#_Programme\RepProtokollHD\RepProtokollHD\FrmProtokoll.cs 64 28 RepProtokollHD

das ist allerdings nur bei diesem Projekt der Fall, andere gehen??? Der Settings.designer läßt sich auch starten und es sind auch die korrekten Variablen eingetragen.

Da habe ich doch irgendetwas verstellt und hab keine Ahnung was, aus MSDN und google werd ich auch nicht schlauer, jetzt hoffe ich auf euch.

Lg
Steven

30.08.2010 - 14:34 Uhr

@herbivore
👍 👍 👍

So Problem gelöst!!!!


 Process P = new Process();
 P.StartInfo.FileName = "C:\\AT Work\\bdb.exe";
 P.StartInfo.WorkingDirectory = "c:\\AT Work";
P.Start();

Das WorkingDirectory angegeben und schwups das ding läuft.

vielen Dank

gruß
Steven

30.08.2010 - 11:46 Uhr

starte mal das Programm testweise mal über ...

Hm habe ich getestet, da passiert dann garnichts.....Heißt das jetzt das das WorkingDirectory nicht stimmt?

gruß

30.08.2010 - 09:25 Uhr

Moin,

ich habe ein kleines Problem und zwar will ich per Software ein anderes Programm starten. Nur leider wird das Programm sofort wieder geschlossen, ich sehe nur kurz den Startbildschirm und das wars.

Mein Prog testet ob auf des Netzlaufwerk zugegriffen werden kann, wenn ja soll das Programm starten.

Hier der Code:


private void Form1_Load(object sender, EventArgs e)
        {
            if (File.Exists("Z:\\test.txt"))
            {
                StreamReader objReader = new StreamReader("z:\\test.txt");

                string text = objReader.ReadLine();
                if (text == "OK")
                {
                    Process P = new Process();
                    P.StartInfo.FileName = "C:\\AT Work\\bdb.exe";
                    P.Start();
                }
            }
            else
            {
                MessageBox.Show("Netzwerk nicht verfügbar!\n\nBDB at Work wird nicht gestartet");
            }
            this.Close();
        }

Mfg
Steven

06.08.2010 - 13:46 Uhr

So jetzt scheint es zu funzen. Vielen Dank euch!

Habe die Ratschläge vin Th96 und Polarkreis befolgt. thx

und das

liMat.Clear();

rausgeschmissen, ist ja unnötig da ich ja jetzt an der richtigen stelle ne neue Liste erzeuge....

Nochmals vielen dank trotz meiner unklaren ausdrucksweise.....Ich gelobe besserung und werde wohl mal am WE etwas Fachausdrücke lernen 😃

greetz
Steven

06.08.2010 - 13:26 Uhr

Ja sorry.....mit den Begriffen und Problembeschreibungen tu ich mich immer etwas schwer....

Ich versuche es nochmal:

Also ich habe eine Klasse "DataForAccount" geschrieben mit mehren Datenfelder (4x string und 1x List<>) <--diese List enthalt Klasseninstancen.

In einer List<> sollen nun mehrere Elemente gespeichert werden. Die Elemente sind Instancen der Klasse "DataForAccount".


  liDataForAccount.Add(new DataForAccount(drProtokoll["COE_Nr"].ToString(), strSensorTemp, strIdnrTemp, strModelTemp,liMat));<-- hier ist das Problem
               liMat.Clear();<-- und hier

Die List<> "liMat" ist aber in allen Inctancen die gleiche. Ich hatte mir das so gedacht das die liMat erstellt wird, in einer Klasseninstace abgelegt wird und dann neu erstellet, usw.

Ich hoffe das das jetzt etwas besser zu verstehen ist.

06.08.2010 - 13:01 Uhr

Moin,

so ich gebe mir mal mühe das Problem bestmöglich zu beschreiben......

ich habe mir eine Klasse "DataForAccount" geschrieben die unteranderm eine List<class Material> enthält.

class DataForAccount:


public class DataForAccount
        {
            public DataForAccount()
            {
            }
            public string COE, SN, IDNR, Model;
            public List<Material> MaterialAndQuanti = new List<Material>();

            public DataForAccount(string strCOE, string strSN, string strIDNR, string strModel, List<Material> liMaterialAndQuanti)
            {
                this.COE = strCOE;
                this.SN = strSN;
                this.IDNR = strIDNR;
                this.Model = strModel;         
                this.MaterialAndQuanti = liMaterialAndQuanti; 
            }
        }

class Material:


public class Material
        {
            public Material()
            { }
            public string Artikel;
            public int Anzahl;
            public Material(string strMaterial, int iAnzahl)
            {
                this.Artikel = strMaterial;
                this.Anzahl = iAnzahl;
            }
        }

MainCode:


private void buttonAbrechnungVW_Click(object sender, EventArgs e)
        {
            string strCoeTemp="16570";
            string strIdnrTemp=string.Empty;
            string strModelTemp = string.Empty;
            string strSensorTemp = string.Empty;
            List<Material> liMat = new List<Material>();
            List<DataForAccount> liDataForAccount = new List<DataForAccount>();

            foreach (DataRow drProtokoll in dsRepProtokoll.Tables["Protokoll"].Select("COE_Nr='"+strCoeTemp+"'"))
            {
               foreach(DataRow drSensor in drProtokoll.GetParentRows("Sensor--Protokoll"))
               {
                   strSensorTemp=drSensor["Serial_No"].ToString();

                   foreach (DataRow drSenorCH in drSensor.GetChildRows("Sensor--Sensor_Channel"))
                   {
                       foreach (DataRow drChannel in dsRepProtokoll.Tables["Channel"].Select("Channel_ID='" + drSenorCH[2] + "' AND ChannelNr='1'"))
                       {
                           strIdnrTemp = drChannel[1].ToString();  
                       }    
                   }
                   foreach (DataRow drModel in drSensor.GetParentRows("Model--Sensor"))
                   {
                       strModelTemp = drModel[2].ToString();
                   } 
                }
               foreach (DataRow drProtokollMat in drProtokoll.GetChildRows("Protokoll--ProtMa"))
               {
                   foreach (DataRow drMaterial in dsRepProtokoll.Tables["Material"].Select("Material_ID='" + drProtokollMat[2] + "'"))
                   {
                       liMat.Add(new Material(drMaterial[1].ToString(), Convert.ToInt32(drMaterial[2])));
                   }  

               }
               liDataForAccount.Add(new DataForAccount(drProtokoll["COE_Nr"].ToString(), strSensorTemp, strIdnrTemp, strModelTemp,liMat));<-- hier ist das Problem
               liMat.Clear();<-- und hier
            }

Was ich vor habe:

Ich sammle Daten aus einer DB in einer List<> um sie dann zu Drucken.....Die Liste enthält eine Klasse mit mehrern Typen und soll auch eine List als Type enthalten, soweit funzt das auch nur legt das Prog leider keinen neue liste für jeden Listen eintrag an, sonder die List "liMat" ist in jedem Eintrag die gleiche.

Ich hoffe man kann das etwas nachvollziehen??? Und ihr könnt mir sagen wo der Fehler liegt.

Gruß
Steven

11.06.2010 - 20:48 Uhr

Hi,

ja das mit dem

aber günstiger ist, im datenfenster den tblCats-knoten zu erweitern, und CatID aufs form zu ziehen

ist nätürlich besser....Jetzt wo ich das gelesen habe....ich sag ja Brett vorm Kopf....so hatte ich das auch schon mal gemacht. Ist nur lange her.....

Ich denke so sollte das klappen was ich vor hatte.

Das mit der ID ist schon klar, das war jetzt nur Testweise...Dafür generiere ich mir ne GUID.

Thx
Steven

11.06.2010 - 15:42 Uhr

Hallo,

Hm müsste das denn nicht funktionieren. Also wenn ich Button2 drücke soll er den Eintrag aus TextBox1 in die Datatable schreiben.


public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private BindingSource bindingSource1 = new BindingSource();
       
        private void Form1_Load(object sender, EventArgs e)
        {
            bindingSource1.DataSource = dataSet1;
            textBox1.DataBindings.Add("Text", dataSet1, "tblCats.CatID");
        }
        private void button2_Click(object sender, EventArgs e)
        {
          //dataSet1.Tables[0].Rows.Add(new object[] { textBox1.Text, textBox2.Text });
          bindingSource1.EndEdit();  

        }
        private void button1_Click(object sender, EventArgs e)
        {
            dataSet1.WriteXml("TEST.xml");
        } 
    }

11.06.2010 - 08:49 Uhr

verwendetes Datenbanksystem: <Dataset und XML>

Moin,

hab grad n brett vorm Kopf.

Ich habe ein Dataset/Datatable im Desgner erstellt. Dann mehrere Textboxen über eine Bindingsource daran angebunden.

Jetzt möchte ich die Inhalte der Boxen in die Datatable speichern (per Button) und da ist mein Problem. (Das Dataset speichere ich dann in einer XML)

Wenn ich n Datagrid benutzt funzt das ja problemlos, da werden alle Daten eingetragen.

Muss ich das manuel angeben welche daten er speicher soll z.B.


dataSet1.Tables[0].Rows.Add(new object[] { textBox1.Text, textBox2.Text });

Das müsste doch irgendwie über die Binding gehen oder nicht?

greetz
Steven

28.01.2010 - 15:59 Uhr

Hm...hab das Problem gelöst....

webBrowser.Navigate("http://XXX.de/login.php?+passende Parameter);

FireBug war der SuperTipp.

Thx

27.01.2010 - 13:19 Uhr

ok...durch den Firebug steige ich noch nicht durch, aber das ist ne andere sache.

Wie stelle ich den die Parameter für das Javascript nach das muss doch dann bestimmt


 elem.InvokeMember("Click");

hier untergebracht werden oder liege ich da falsch?

27.01.2010 - 12:49 Uhr

Hi,

Ogame??? Naja geht halt darum den Acc bei nem Browserspiel nicht zu verlieren, dazu muss man alle 14 Tage einmal Online gehen.

Natürlich Javascript....habe das auch gemeint....

OK das mit firebug schaue ich mir mal an, guter Tip. Hm das heißt wenn ich pech habe muss ich das gesamte JS nachproggen?

Naja mal den Umfang anschen....Oder halt doch ne Therminserie in Outlook, geht bestimmt schneller. 😃

Gruß

27.01.2010 - 11:44 Uhr

Hallöchen,

ich brauche mal eure Hilfe. Ich habe vor einiger Weile mal ein tool geschrieben was sich auf einer Website einloggt und mir Infos von dort anzeigt.
Funzte auch super...Jetzt geht es nicht mehr....Der Login scheint jetzt irgendwie mit Java zu funktionieren. Habe es leider nicht geschaft das es wieder funzt.

Hier mal mein c# Code und ein auszug des HTML Codes.


<form method="post" name="loginForm" id="loginForm" action="#">

                <input type="hidden" name="uni_id" value="">
                <input type="hidden" name="v" value="2">
		<input type="hidden" name="is_utf8" value="0">

                <div id="input_universe">
                	<select name="uni_url" id="uni_select_box" class="input_universe_select" tabindex="1" onchange="setUniUrl(this.options[this.selectedIndex].value);">
                		                                               
                		<option
                		  value="uni77.XXX.de">77. Universum</option>

                		<option
                		  value="uni78.XXX.de">78. Universum</option>
                	</select>
                </div>

                <div id="input_background">
                    <input type="text" name="login" id="inputform" alt="Spielername" value="" maxlength="20" tabindex="2" onClick="play('enterTextfield', 80); if(this.value == 'Spielername') this.value = '';" onBlur="if(this.value == '') this.value= 'Spielername';" onKeyDown="play('typing', 80)"/>
                </div>

                <div id="passwort_background">

                    <input type="password" name="pass" id="passwort" alt="Passwort" maxlength="32" tabindex="3" onClick="play('enterTextfield', 80);" onKeyDown="play('typing', 80)">
                </div>

                <p class="pw_vergessen"><a id="getPassword" href="#" onClick="play('smallClick', 80);" onMouseOver="play('smallHover', 80);" >Passwort vergessen?</a></p>
                <input type="submit" name="submitInput" id="login_button" onMouseOver="play('bigHover', 80);" onClick="play('bigClick', 80);" tabindex="4" value="Login" />
                <p class="agb_background">Mit dem Login akzeptiere ich die<a class="register_agb" href="http://agb.XXX.de/index.php?lang=de&art=tac&special=&&f_text=8e8e8e&f_text_hover=ffffff&f_text_h=8e8e8e&f_text_hr=ffffff&f_text_hrbg=061229&f_text_hrborder=26324c&f_text_font=verdana%2C+arial%2C+helvetica%2C+sans-serif&f_bg=000000" target='_TAC'>
                AGB            </a></p>
</form>


private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            //OGame nicht gefunden
            if (webBrowser1_.DocumentTitle == "Navigation wurde abgebrochen")
            {
                MessageBox.Show("XXX konnte nich aufgerufen werden");
            }
            //Login
            if (webBrowser1_.Url.ToString() == "http://www.XXX.de/")
            {
                foreach (HtmlElement elem in webBrowser1_.Document.All)
                {
                    if (elem.Name == "login")              // Name des HTMLinputs
                    {
                        elem.InnerText = Properties.Settings.Default.User; ;
                        // euer Benutzername
                        
                    }
                    if (elem.Name == "pass")               // Name des HTMLinputs
                    {

                        elem.InnerText = Properties.Settings.Default.Password;                // euer Passwort
                    }
                    if (webBrowser1_.Document.All["uni_url"] != null)
                    {
                        HtmlElement element = webBrowser1_.Document.All["uni_url"];
                        // Uni 36
                        element.All[39].SetAttribute("selected", "true");
                    }
                }
                foreach (HtmlElement elem in webBrowser1_.Document.All)
                {
                    if (elem.GetAttribute("value") == "Login")
                    {
                        elem.InvokeMember("Click");

                    }
                }
            }
}

Folgendes passiert:

-Das Optionsfeld wird ausgewählt (sieht man im Webbrowser)
-User und Passwort werden eingetragen (sieht man im Webbrowser)
-Login Button wird gedrückt, dann sieht man kurz wie die Textboxen gelehrt werden und der Login schlägt fehl.

ich vermute das die Logindaten nicht an das Javascript übergeben werden....aber wie man das macht...keine Ahnung.

Vieleicht könnt ihr ja helfen.

Gruß
Steven

05.11.2009 - 12:43 Uhr

So erstmal Danke für die schnelle Antwort.

Naja einmahlig schon, aber es betrifft ca 60 Datenbänke...(Es hadelt sich hierbei um Messdaten und es wird pro Messung eine DB angelegt)

Deine beiden Vorschläge werde ich mal testen und sich das machen lässt.

Bye

05.11.2009 - 12:10 Uhr

verwendetes Datenbanksystem: <Access>

Hallo ihr Spezis,

Ich habe folgendes Problem:

Ich muss in einer Access DB einträge in einer Spalte ändern. In dieser Spalte sind Felder einer Matrix gespeicher. z.B. A1, A2, A3, A4, B1, B2 ,usw.

Beim eintragen dieser Werte ist ein fehler passiert. nun muss z.B. A1 mit A4 und A2 mit A3 getauscht werden.

Dazu gehe ich folgendermassen vor:
-Tabelle in DataTable - funzt
-Felder tauschen - funzt
-DataTable zurückschreiben - funzt nicht!

Die Spalte ist dummerweise die mit dem Primärschlüssel. Beim UPDATE bekomme ich ne Fehlermeldung wegen des Primärschlüssels.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BIA_Macro
{
    public partial class Form1 : Form
    {
        private string strDBName;
        private Class2 myAccessClass = new Class2();
        private DataSet myDS = new DataSet();
        private List<PairsToSwitch> liPairsToSwitch = new List<PairsToSwitch>();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //Paare für Spalte C
            liPairsToSwitch.Add(new PairsToSwitch("C1", "C5"));
            liPairsToSwitch.Add(new PairsToSwitch("C2", "C6"));
            liPairsToSwitch.Add(new PairsToSwitch("C3", "C7"));
            liPairsToSwitch.Add(new PairsToSwitch("C4", "C8"));

            //Paare für Spalte D
            liPairsToSwitch.Add(new PairsToSwitch("D1", "D5"));
            liPairsToSwitch.Add(new PairsToSwitch("D2", "D6"));
            liPairsToSwitch.Add(new PairsToSwitch("D3", "D7"));
            liPairsToSwitch.Add(new PairsToSwitch("D4", "D8"));
            
            //Paare für Spalte G
            liPairsToSwitch.Add(new PairsToSwitch("G1", "G5"));
            liPairsToSwitch.Add(new PairsToSwitch("G2", "G6"));
            liPairsToSwitch.Add(new PairsToSwitch("G3", "G7"));
            liPairsToSwitch.Add(new PairsToSwitch("G4", "G8"));
           
            //Paare für Spalte O
            liPairsToSwitch.Add(new PairsToSwitch("O1", "O5"));
            liPairsToSwitch.Add(new PairsToSwitch("O2", "O6"));
            liPairsToSwitch.Add(new PairsToSwitch("O3", "O7"));
            liPairsToSwitch.Add(new PairsToSwitch("O4", "O8"));
        }

        private void buttonOpenDB_Click(object sender, EventArgs e)
        {
            //Datei auswählen
            OpenFileDialog fileDialog = new OpenFileDialog();
            fileDialog.Title = "Access Datei";
            DialogResult result = fileDialog.ShowDialog();

            if (result == DialogResult.OK)
            {
                strDBName = fileDialog.FileName.ToString();
            }
            //Tabelle resulates importieren
            myDS = myAccessClass.FillDataset("SELECT * FROM resultats", strDBName);
        }
       
        private void buttonSwitchData_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < liPairsToSwitch.Count; i++)
            {
                SwitchData(liPairsToSwitch[i].OldData,liPairsToSwitch[i].NewData);
                
            }
            //exportiere geänderte Tabelle
            myAccessClass.UpdateDB(myDS.Tables[0], strDBName);[COLOR]<--UPDate an dieser stelle gibt ne Fehlermeldung
[/color]
            MessageBox.Show("Fertig");
        }
       

        private void SwitchData(string strOld, string strNew)
        {
            for (int i = 0; i < myDS.Tables[0].Rows.Count; i++)
            {
                if (myDS.Tables[0].Rows[i][1].ToString() == strOld)
                {
                    myDS.Tables[0].Rows[i][1] = "old";
                }
                if (myDS.Tables[0].Rows[i][1].ToString() == strNew)
                {
                    myDS.Tables[0].Rows[i][1] = "new";
                }
               // myAccessClass.UpdateDB(myDS.Tables[0], strDBName);[COLOR]<--UPdate hier und
[/color]
            }
            for (int i = 0; i < myDS.Tables[0].Rows.Count; i++)
            {
                if (myDS.Tables[0].Rows[i][1].ToString() == "old")
                {
                    myDS.Tables[0].Rows[i][1] = strNew;
                }
                if (myDS.Tables[0].Rows[i][1].ToString() == "new")
                {
                    myDS.Tables[0].Rows[i][1] = strOld;
                }
               // myAccessClass.UpdateDB(myDS.Tables[0], strDBName);[COLOR]<-hier geht ist aber langsam
[/color]
            }
        }
    }

    public class PairsToSwitch
    {
        public PairsToSwitch()
        {
        }

        public string OldData, NewData;
        public PairsToSwitch(string strOld, string strNew)
        {
            this.NewData = strNew;
            this.OldData = strOld;
        }

    }
}

Bitte rote Kommentare im Code beachten. Da es sich um sehr viele Datensätze handelt wird es mit den ständigen Updates sehr lange dauer alle daten zu ändern.

Da gibts doch bestimmt ne Methode die geänderte Tabelle zurückzuschreiben ohne des ich Probleme mit dem Primärschlüssel bekomme.

Danke schonmal im Vorraus
Gruß
Steven

22.09.2009 - 16:31 Uhr

Moin,

ich hab mal wieder ne Frage an euch Spezis....

Ich möchte ein bestimmtes Attribut aus einem HTML Element auslesen.

Der Code stammt aus dem IE.


<span class='return owntransport'>Eine deiner <a href='#' onmouseover='return overlib("&lt;font color=white&gt;&lt;b&gt;Großer Transporter 50&lt;br&gt;&lt;/b&gt;&lt;/font&gt;");' onmouseout='return nd();' class='owntransport'>Flotten</a><a href='#' title='Großer Transporter 50'></a> kehrt vom Planeten Alandur <a href="javascript:showGalaxy(5,108,4)" owntransport>[5:108:4]</a> zurück zum Planeten Dson Barah <a href="javascript:showGalaxy(2,364,5)" owntransport>[2:364:5]</a>. Ihr Auftrag lautete: Transport</span>

Und zwar das "title" Attribut.

Und so habe ichs versucht:


if (elem.InnerHtml.Contains("return owntransport"))
                    {
                       string test = elem.GetAttribute("title");
                    }

Das richtige Element wird gefunden, aber das Attribute nicht??? Liegt das an dem Javascript?

Alternativ müsste ich das OuterHTML als string einlesen und zurechtschneiden, aber das erscheint mir etwas umständlich....

Gruß
Steven

17.09.2009 - 12:46 Uhr

=) Habs rausgefunden

Man muss nur


elem.InvokeMember("onchange");

machen.

Grüsse

17.09.2009 - 10:30 Uhr

Moin

Mal ne keine Frage, ich baue grad ein tool das eine Webseite automatisieren soll. Mein Problem ist das ich einen Eintrag aus einer "Combobox" also <select>/<option> nicht nur auswählen möchte sonder anclicken.

HTML


<select size="1" onchange="haha(this)">

<option value="/game/index.php?page=xxx" >Porista<a href="index.php?xxx">[1:109:14]</a></option>

 <option value="/game/index.php?xxx" selected>Dson Balsur<a href="index.php?xxx" >[1:115:11]</a></option>
			  			  			  				
 </select>

Selectieren ist nicht das Problem, das mache ich so:


foreach(HtmlElement elem in webBrowser1_.Document.GetElementsByTagName("select"))
            {
                elem.All[1].SetAttribute("selected", "true");   
            }

Aber wie Clicke ich den Eintrag den nun an, hatte


elem.All[1].InvokeMember("Click");

versucht aber das tut garnichts

LG
Steven

11.09.2009 - 21:31 Uhr

Super vielen dank, das ist genau das was ich gesucht habe...Das wuste ich nicht das man die erweitern kann, dachte der Designer überschreibt die.

Thx
Steven

11.09.2009 - 21:20 Uhr

Hm aber n Array kann ich doch auch nicht in den Settungs speichern...

11.09.2009 - 20:45 Uhr

Nabend,

ich habe das Problem das ich mehrere Objekte in einer List<> gespeichert habe und diese nun dauerhaft speicher will, hatte da an die setting gedacht... 🤔 mist geht nicht....wie würde man das denn machen, bzw. wie speichert man dann die List oder muss man die Objekte einzelt speicher???

Gruß
Steven

08.05.2009 - 11:58 Uhr

Super danke für den Tip...So klappts wunderbar.

Ok wenn das zu den Grundlagen gehört war die Frage hier falsch am Platz, gelobe besserung. Aber abundzu stehe ich halt auf dem Schlauch.....

Es bleiben immer die gleichen Typen, Rob1 ist von einer abstrakten Klasse abgeleitet.

Thx
Steven

08.05.2009 - 11:48 Uhr

Moin,

ich mal wieder mit einem kleinen Problem und zwar folgendes:

Ich habe eine abgeleitete Klasse Robot1 die x,y Koordinaten als Eigenschaft hat.

Es wird ein Object der Klasse Robot1 namens Rob1 erzeugt und x,y übergeben. Dieses Objekt wird in einer List gespeichert. sieh Code.

Die Liste übergebe ich später einer anderen Klasse und in dieser möchte ich dann über die List Einträge auf die Eigenschaft des Objectes Rob1 zugreifen. Habe leider keine Ahnung ob und wie das geht.


Robot1 Rob1 = new Robot1(3,4);
List<object> RobotList = new List<object>();
RobotList.Add(Rob1);

Im debug Modus kann ich die List ansehen und unter "base" stehen ja auch die Eigenschaften, aber wie komme ich da ran??

RobotList[0]
-base
-x
-y

Gruß
Steven

07.05.2009 - 13:11 Uhr

Hallo Danke für die Antworten.

Ich werd mich dann halt durchhangel müssen, geht ja auch problemlos, wollte nur etwas Code sparen.

Den Dataset-Designer verwende ich nicht!!!Da es sein kann das sich nocheinmal etwas ändert an der DB und dies dann dem Designer beizubringen ist mir viel zu umständlich.

Gruß
Steven

06.05.2009 - 12:04 Uhr

verwendetes Datenbanksystem: <SQL>

Moin,

Hab mal ne Frage zu der Datatable.Select() Methode.

Folgendes Problem:

Ich habe z.B. 2 Tabellen (Hersteller und Teile)

Hersteller:

  • ID_Hersteller (PK)
  • Name

Teile
-ID_Teile (PK)
-ID_Hersteller
-TeileNamen

Verknupft über ID_Hersteller. Beide Tabellen und Verknüpfung befinden sich in einem Dataset "ds".

Nun möchte ich einen alle TeileNamen eines Herstellers finden.
Lösungsansatz:


datarow[] dr = ds.Table["Teile].Select(ID_Hersteller = ???);

Das Problem ist das ich die Hersteller_ID nicht kenne nur den Namen. Man könnte zwar erst die ID aus der Tabelle "Hersteller" (mit Select(...)) holen und die gefundene ID benutzen um die TeileNamen aus der Tabelle "Teile" zu holen.

Aber da gibts bestimmt ne möglichkeit das mit einer Select Anweisung zu Lösen.

Danke schonmal
Gruß
Steven

29.04.2009 - 19:57 Uhr

Hallöchen,

Erstmal danke für die Antwort.

Die Thread.Sleep() geschichte habe ich schon mal getestet. Funktioniert aber ist hat "Dirty" wie du schon gesagt hast.

Die Sache mit der Abruchbedingung klappt n der Stelle irgendwie nicht, hatte es so probiert:

(vom Prinziep her)


string Messwert = "-";
while(Messwert == "-"); // Hier friert aber das Programm ein
MessageBox.Show(Messwert);

Messwert ist die Eigenschaft die von der Klasse myMeasurment gesetzt wird.

Aber ich denke das ich die messageBox weglasse und das irgendwie auf der Form unterbringe, das funktioniert ja super.

gruß

29.04.2009 - 12:58 Uhr

Hi,

Ich hab ein kleines Problem mit dem SerialPort, aber irgendwie tue ich mich schwer das zu beschreiben. Naja ich versuche das mal.

Das Programm erfasst Daten von einem Messschieber mit RS232 Schnittstelle.

Folgendes soll das Programm tun:

Es wird ein Form geöffnet, im From_Load Event lasse ich die Messung starten(in einer anderen Klasse).

Dann soll eine MsgBox aufgehen die die Daten anzeigt, mein Problem ist das die Msg aufgeht befor die Messung fertig ist....

Das auslesen des Messschieber passiert aber nicht nur beim öffnen der Form, auch per Button. Das klappt gut.

Hänge mal ein bisschen Code dran.


 public partial class frmCal : WeifenLuo.WinFormsUI.Docking.DockContent
    {
       
        private measurement myMeasurment;

        private string msgNoTemp;
        private string msgNoHumi;
        private string msgCurrentPosition,msgOptimalPosition,msgQuestion,msgAbsolute;


        private string strMeasuredPosition = string.Empty;
        public string MeasuredPosition
        {
            get { return this.strMeasuredPosition; }
            set { this.strMeasuredPosition = value; }
        }

        public frmCal()
        {
            InitializeComponent();
            this.myMeasurment = new measurement(this);
        }

        private void frmCal_Load(object sender, EventArgs e)
        {
            
           myMeasurment.CreateAndOpenSerialPort();
            myMeasurment.SendDataToSerialPort("e1");//Messschieber freigeben
            myMeasurment.SendDataToSerialPort("1");//Messwert anfordern
           
            MessageBox.Show("Wert:"+MeasuredPosition + " mm ");
                        
         
        }
    

        public void SetMeasuredPositionOnBox()
        {
            //Call Method from GUI-Thread
            if (this.tbCurrentPosition.InvokeRequired)
            {
                this.tbCurrentPosition.Invoke(new MethodInvoker(SetMeasuredPositionOnBox));
                return;
            }
            this.tbCurrentPosition.Text = this.strMeasuredPosition;
        }


        void frmCal_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
        {
            myMeasurment.CloseAndDisposeSerialPort();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            myMeasurment.SendDataToSerialPort("e1");
            myMeasurment.SendDataToSerialPort("1");
        }
    }
}


 public measurement(frmCal FrmCal)
        {
            this.myFrmCal = FrmCal;
        }
       

        public void CreateAndOpenSerialPort()
        {
            try
            {
               
                if (this.mySerialPort != null && this.mySerialPort.IsOpen)
                {
                    this.mySerialPort.Close();
                }

                this.mySerialPort = new SerialPort(portName,9600,Parity.None,8,StopBits.One);
                
                this.mySerialPort.DataReceived += new SerialDataReceivedEventHandler(this.mySerialPort_DataReceived);
                this.mySerialPort.Open();
            }
            catch (Exception i_ex)
            {
                MessageBox.Show(i_ex.Message + "\r\n" + i_ex.StackTrace);
            }
        }
        private void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                
                this.dataToRecieve += this.mySerialPort.ReadExisting();
                if (this.dataToRecieve.Contains("\r")) //Carrige Return --> Abbruch-Bedingung
                {

                    string strPosition = dataToRecieve.Remove(0, 4);
                    strPosition = strPosition.Remove(strPosition.IndexOf("\r"),1);
                    while(strPosition.StartsWith("0"))
                    {
                        strPosition=strPosition.Remove(0,1);
                    }
                    
                    this.myFrmCal.MeasuredPosition = strPosition;
                    this.myFrmCal.SetMeasuredPositionOnBox();
                    this.dataToRecieve = string.Empty;//Clear
                    strPosition = string.Empty;
                    
                }
            }
            catch (Exception i_ex)
            {
                MessageBox.Show(i_ex.Message + "\r\n" + i_ex.StackTrace);
            }
        } 
        public void SendDataToSerialPort(string strData)
        {
            try
            {
                if (!mySerialPort.IsOpen)
                {
                    mySerialPort.Open();
                }
                //As String
                this.mySerialPort.Write(strData+ "\r\n");
            }
            catch (Exception i_ex)
            {
                MessageBox.Show(i_ex.Message + "\r\n" + i_ex.StackTrace);
            }
        }
        public void CloseAndDisposeSerialPort()
        {
            this.mySerialPort.Dispose();
            this.mySerialPort.Close();
        }


Der Code ist etwas gekürzt, aber denke das das drin ist was für das Problem interessant ist. Brauch da mal ein Gedankenanstoß

Gruß
Steven

27.03.2009 - 09:48 Uhr

verwendetes Datenbanksystem: <SQL Express 2008>

Moin,

ich hab mal wieder ne Frage an euch Experten.

Ich möchte mir aus einer Datenbank ein Dataset erstellen und wollte mal wissen ob es eine Möglichkeit gibt die Verknüpfungen mit zu übernehmen.

Das ganze aber ohne den Designer!

Hier mal mein ansatz dazu:


public DataSet GetDataset()
        {
            SqlConnection myConnection = new SqlConnection(myConnectionString());
            SqlDataAdapter myAdapter = new SqlDataAdapter();

            DataSet dsSensorDB = new DataSet();
            try
            {
                if (myConnection.State == ConnectionState.Closed)
                {
                    myConnection.Open();
                }
                //Auslesen der Tabellen inc Primary Key und zum DataSet hinzufügen
                myAdapter.SelectCommand = new SqlCommand ("SELECT * FROM  Company",myConnection);
                myAdapter.FillSchema(dsSensorDB, SchemaType.Mapped, "Company");
                myAdapter.Fill(dsSensorDB, "Company");

                myCommand.CommandText = "SELECT * FROM Sensor_Model";
                myAdapter.FillSchema(dsSensorDB, SchemaType.Mapped, "Sensor_Model");
                myAdapter.Fill(dsSensorDB, "Sensor_Model");

                myCommand.CommandText = "SELECT * FROM Sensor";
                myAdapter.FillSchema(dsSensorDB, SchemaType.Mapped, "Sensor");
                myAdapter.Fill(dsSensorDB, "Sensor");

                myCommand.CommandText = "SELECT * FROM Sensor_Channel";
                myAdapter.FillSchema(dsSensorDB, SchemaType.Mapped, "Sensor_Channel");
                myAdapter.Fill(dsSensorDB, "Sensor_Channel");

                myCommand.CommandText = "SELECT * FROM Channel";
                myAdapter.FillSchema(dsSensorDB, SchemaType.Mapped, "Channel");
                myAdapter.Fill(dsSensorDB, "Channel");


                DataRelation dRell = new DataRelation("Company--Sensor_Model", dsSensorDB.Tables["Company"].Columns["Company_ID"], dsSensorDB.Tables["Sensor_Model"].Columns["Manufactur_ID"]);

            }
            finally
            {
                myAdapter.Dispose();
                myConnection.Dispose();
                myConnection.Close();
            }
            return dsSensorDB;
        }


Immo mach ich die Datarelations selber, aber die gibt es ja eigentlich schon in der DB, die müsste man doch mit übernehmen können,oder?

Hab auch schon ne Lösung gesehen, die die Verknüpfung im SQL String angibt, ändert aber nichts daran das ich die angeben muss.

Ach ja ich nutze VS2005

Gruß
Steven

25.03.2009 - 11:48 Uhr

@ herbivore

Ok das catch fliegt raus und das finally bleibt. Oh und der StackTrace sieht schon ganz anderst aus.

Ja das mit dem Close im finally war nur schnell dahingeschrieben...Ist eigentlich klar das das da keinen Sinn macht.

Thx

25.03.2009 - 11:05 Uhr

Vielen Dank für die Antworten.

Ich habs jetzt so gemacht(nur Test Code):

GUI:


            try
            {
                mySensorDB.OpenDatabase();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Fehler!\n\n"+ex);  
            }

dll:


            try
            {
                con.Open();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }

Steven

25.03.2009 - 10:08 Uhr

Moin Moin,

ich benötige mal wieder eure Hilfe. Es geht um Fehlerbehandlung in dll's.

Ich schreibe grad eine dll die auf eine SQL Server zugreift. Fals dort etwas schief geht wird ne exeption ausgelöst. Das Problem was ich habe ist, wie kann ich diese ex. in meiner GUI anzeigen?

Oder lässt man die Try/catch in der dll weg und baut sie in der GUI um den Methodenaufruf? oder beides?

Ich steh da grade etwas auf dem Schlauch.... ?(

Gruß
Steven

12.02.2009 - 07:49 Uhr

Hey vielen dank, das war das Problem. 👍

Jetzt läufts so wies soll.

LG
Steven

11.02.2009 - 16:29 Uhr

Hi,

hab mal wieder ein kleines Problem und da ihr ja immer so gut helfen könnt, poste ichs mal.

Ich lese daten aus einer XML und schreibe diese in eine Datatable, dise ist an eine Bindingsource gebunden. Auf diese Greif das DataGridView zu. Das klappt auch alles.

Später sollen änderungen im Grid wieder in die XML geschrieben werden.

da ich nicht immer alles zurückschreiben will habe ich mir gedacht, dass ich mit RowState überprüfe welche Row geändert wurde und diese dann zurückschreibe. Aber ich bekomme als Rowstate immer added angezeigt.

hier mal ein teil des Codes, ich hoffe das reicht als info


 public void GetCalPos()
        {
            dgvCalPos.DataSource = binding;
            dtCalPos.Clear();
            if (dtCalPos.Columns.Count == 0)
            {
                dtCalPos.Columns.Add("Position", typeof(String));
                dtCalPos.Columns.Add("Weg in mm", typeof(String));
               
            }

            XmlNodeList nodelist = root.SelectNodes("/Data/PotiTypen/Type[@Name='" + cbChangeData.SelectedItem + "']/ *");
           
            for (int x = 6; x < nodelist.Count; x++)
            {
                XmlNode node = nodelist.Item(x);
                dtCalPos.Rows.Add(node.Attributes["Pos"].InnerText, node.InnerText);
            }
            
            binding.DataSource = dtCalPos;
            if (dgvCalPos.Columns.Count != 0)
            {
                dgvCalPos.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable;
                dgvCalPos.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;
            }
        }
      private void FormChangeData_Load(object sender, EventArgs e)
        {
            cbChangeData.DataSource = getPotiTypes();
            dgvCalPos.DataSource = binding;
            SetViewMode();
        }

        private void bttAccept_Click(object sender, EventArgs e)
        {
            if (tbMontagePos.Modified)
            {
                //write to xml
            }

            foreach (DataRow r in dtCalPos.Rows)
            {
                if (r.RowState == DataRowState.Modified)
                {
                    //Write to XML;
                }
            }
         }

Danke und Gruß
Steven

10.02.2009 - 09:52 Uhr

Ok Vielen Dank.

Dann nehm ich die zweite Version, hab mir das schon gedacht.

LG
Steven

10.02.2009 - 08:38 Uhr

Hallo,

ich brauche mal euren rat zum Aufbau einer XML.

Welche Struktur ist denn besser.

Version1:


xml version="1.0" encoding="utf-8" ?> 
- <data>
- <Poti-Typen>
- <H3_Chest_3Y>
  <AdapterTyp>keiner</AdapterTyp> 
  <MontagePos>0</MontagePos> 
  <EinspannPos>10</EinspannPos> 
  <minPos>20</minPos> 
  <maxPos>100</maxPos> 
  <Pos0>0</Pos0> 
  <Pos1>3</Pos1> 
  <Pos2>6</Pos2> 
  <Pos3>9</Pos3> 
  <Pos4>12</Pos4> 
  <Pos5>15</Pos5> 
  <Pos6>18</Pos6> 
  <Pos7>21</Pos7> 
  <Pos8>24</Pos8> 
  <Pos9>27</Pos9> 
  <Pos10>30</Pos10> 
  <Pos11>33</Pos11> 
  <Pos12>35</Pos12> 
  </H3_Chest_3Y>
  </Poti-Typen>
  </data>

Version2


  <?xml version="1.0" encoding="utf-8" ?> 
- <Data>
- <PotiTypen>
- <Type Name="H3_Chest_3Y">
  <MontageAdapter>keiner</MontageAdapter> 
  <MontagePosition>10</MontagePosition> 
  <EinspannPosition>20</EinspannPosition> 
  <minPosition>20</minPosition> 
  <maxPosition>20</maxPosition> 
  <NullPosition>20</NullPosition> 
  <CalPosition Pos="0">0</CalPosition> 
  <CalPosition Pos="1">3</CalPosition> 
  <CalPosition Pos="2">6</CalPosition> 
  <CalPosition Pos="3">9</CalPosition> 
  <CalPosition Pos="4">12</CalPosition> 
  <CalPosition Pos="5">15</CalPosition> 
  <CalPosition Pos="6">3</CalPosition> 
  <CalPosition Pos="7">21</CalPosition> 
  <CalPosition Pos="8">24</CalPosition> 
  <CalPosition Pos="9">3</CalPosition> 
  <CalPosition Pos="10">30</CalPosition> 
  <CalPosition Pos="11">33</CalPosition> 
  <CalPosition Pos="12">35</CalPosition> 
  </Type>
  </PotiTypen>
  </Data>


Danke und Gruß
Steven

29.01.2009 - 22:00 Uhr

Hey Super vielen dank.

Da habe ich ja erstmal was zum testen und nachlesen...Könnt ihr gute Literatur zu dem Thema empfehlen?

Sieht ja erstamal nicht so schwierig aus....

LG
Steven

29.01.2009 - 14:55 Uhr

verwendetes Datenbanksystem: <XML>

Hi,

Ich brauche mal eure Hilfe. Mein Problem ist das ich in jeder Funktion/Methode immer XMLdoc.Load(xmlfile) und XmlElement root = XMLdoc.DocumentElement schreiben muss.

Könnt ihr mir einen Tip geben wie ich das irgendwie Global initialisieren kann.
Ich hatte sowas mal probiert
XmlDocument XMLdoc = new XmlDocument("bla.xml");
aber das ist alles Schrott es wird ja nur NameTable akzeptiert, soweit ich das verstanden habe.

Es würde mir ja schon helfen wenn ich worüber ich mich da schlau machen muss.
Instanzen?/static?/etc.?

Naja und hier mal ein Codeausschnitt. So wie es jetzt ist funzt es aber irgendwie gefälltmir das son nicht. Ist bestimmt auch nicht elegand programmiert.


public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string Xmlfile = "Poti-Dataset.xml";
        XmlDocument XMLdoc = new XmlDocument();
       
        private void Form1_Load(object sender, EventArgs e)
        {
            //Listbox lbTypen mit Potitypen fülle
            
            XMLdoc.Load(Xmlfile);
            XmlElement root = XMLdoc.DocumentElement;
         ...........
        }

        private void lbTypen_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            XMLdoc.Load(Xmlfile);
            XmlElement root = XMLdoc.DocumentElement ;
          ................
          }

LG
Steven