Laden...

Forenbeiträge von Guts2 Ingesamt 48 Beiträge

12.03.2009 - 14:49 Uhr

Ja, das ist der Aktuelle Inhalt von tblFaehigkeiten


FaehigkeitID	Faehigkeit
1	Microsoft SQL Sever 2005
2	PCS7 V6
3	S7
4	Access 2003
5	Eplan 5
6	Eplan P8
7	Access 2007
8	Visual C# 2008


12.03.2009 - 14:40 Uhr

Also ich hab jetzt mal versucht mein Einlesen der Datenbank mit deinem Programm abzupassen. Weil ich glaube das ich, wenn ich dein Beispiel sehe einen Fehler bei der Verknüpfung mit der Datenbank habe.

//Einlesen von tblFaehigkeiten in Listbox2
            //-------------------------------------------------------------------------

            OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM tblFaehigkeiten ORDER BY FaehigkeitID", conn);
           

            try
            {
                conn.Open();
                
                da.Fill(ds1, "tblFaehigkeiten");
                conn.Close();

                dv1 = new DataView(ds1.Tables[0]);
               
               
                listBox2.DataSource = dv1;
                listBox2.ValueMember = "FaehigkeitID";
                listBox2.DisplayMember = "Faehigkeit";             
                             
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }

So sieht die Änderung aus.
Leider klappt es immer noch nicht.

Irgendwie seltsam

12.03.2009 - 13:18 Uhr

Hallo, hab deinen Tipp mal probiert, aber das selbe Problem wie mit ValueMember, wenn ich in der Listbox ein anderes Element anklicke, bleibt trotzdem die "1" in Lable10 stehen

12.03.2009 - 13:00 Uhr

verwendetes Datenbanksystem: <Access 2003>

Hallo,
ich habe ein kleiner Problem, ich habe mich in Büchern und dem Internet erkundigt wie ich eine Datenbank an eine ListBox binde. Ich beschreibe den DisplayMember und den ValueMember. Bekomme auch so gesehen in der Listbox alle richtig angezeigt.
Aber wenn ich dann Testen will ob der ValueMember richtig ist, dann bekomme ich nur Falsche werte.

//Einlesen von tblFaehigkeiten in Listbox2
            //-------------------------------------------------------------------------

            OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM tblFaehigkeiten ORDER BY FaehigkeitID", conn);
           

            try
            {
                conn.Open();
                
                da.Fill(dt);
                conn.Close();

                dv = new DataView(dt);
               
                listBox2.DataSource = dv;
                listBox2.ValueMember = "FaehigkeitID";
                listBox2.DisplayMember = "Faehigkeit";             
                             
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());

Und jetzt hier die zwei Möglichkeiten wie ich den ValueMember testen will:

private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            label10.Text = listBox2.ValueMember.ToString();
        }

private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            label18.Text = dv[listBox2.SelectedIndex].Row["FaehigkeitID"].ToString();
        }

Bei der ersten Methode steht in dem Lable nur "FaehigkeitID"
Und bei der zweiten bei jeder auswahl eines Datensatzes nur "1"
Hab jetzt schon das Forum und ander HPs durchsucht, finde aber nirgends einen Thema zu meinem Problem.
Vielleicht hatte ja von euch schon mal ein solches Problem

10.03.2009 - 14:41 Uhr

Danke, hab den Fehler gefunden.
Jetzt gehts

10.03.2009 - 14:13 Uhr

Ich bekommen die Rückmeldung:

Syntaxfehler in der INSERT INTO_Anweisung


//DataAdapter für Tabelle tblErsteller
            OleDbDataAdapter da2 = new OleDbDataAdapter("SELECT * FROM tblErsteller", conn);
            //Erzeugen des Command-Objektes für da2 DataAdapter
            OleDbCommandBuilder cb2 = new OleDbCommandBuilder(da2);

            

            try
            {
                //öffnen der Datenbank, Laden von Tabelle tblErsteller, schließen der Verbindung
                conn.Open();
                da2.Fill(dt2);
                conn.Close();
                             
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }


            //Auslesen des Windowsbenutzernamen
            WindowsIdentity wi = WindowsIdentity.GetCurrent();
            //Ausgabe des Windowsbenutzernamen in Lable16
            textBox7.Text = wi.Name;

            string sql = "INSERT INTO tblErsteller(Username) VALUES ('"+ textBox7.Text +"'";
            exectNQuery(sql);


 //Hilfsprogramm zum speichern in die Datenbank
        private void exectNQuery(string cmdText)
        {
            OleDbCommand cmd = new OleDbCommand(cmdText, conn);
            try
            {
                conn.Open();
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            conn.Close();
        }

Das ist mein aktueller versuch, hatte noch einpaar andere Versuche, da hab ich aber schon die Codezeilen gelöscht, bei dem ich über einen Command-Objekt die Updaten Funktion nutzen wollte

10.03.2009 - 13:54 Uhr

Ich habe in dem Formular noch eine zweite und eine dritte Tabelle. Die eine besitzt die Daten der Fähigkeiten. In die andere Sollen dann die Daten aus der ErstellerTabelle mit der Fähigkeiten-Tabelle verknüpft werden.
Wenn ich erst beim Speichern den Primerykey vergebe dann muß ich dann auch erst noch den Primerykey laden um dann die Daten der letzten Tabelle zu verknüpfung.

Zur info:

ErstellerID......->
...............................MitarbeiterFähigkeiten
FähigkeitenID.->

Darum brauch ich schon früh die ID der Ersteller Datenbank

10.03.2009 - 12:24 Uhr

verwendetes Datenbanksystem: <Access 2003>

Hallo, ich habe ein kleines Problem.
Ich habe eine kleine Datenbank, auch die man von verschiedenen PCs aus drauf zugreifen kann.
Bevor man aber die Datenbank nutzen kann, muß man sich in dieser Registieren und z.B. seine Fähigkeiten und andere Daten eintragen.
Damit ich Konflikten entgehen kann, zwecks Zwei Benutzer wollen gleichzeitig sich registieren und belegen dann gleichzeitug die selbe ID habe ich mir übelegt da, wenn man auf registieren klickt sofort ein Passender Datensatz erstellt wird und die ID dadurch reserviert wird. Danach kann man dann seine Datensatz Updaten sobald man alle wichtigen Daten eingegeben hat.

Die ID will ich reservieren indem ich nur den Windowsbenutzernahmen in die Datenbank schreibe. Aber jedes mal wenn ich das probiere bekomme ich eine INSERT- Fehler. Hab schon verschiedene Möglichkeiten ausprobiert aber nichts scheint zu klappen.

Habe alle Spalten der der Tabelle auf "Eingabe erforderlich : nein" gesetzt.

mein Code sieht ohne die wohl falschen Befehle so aus:

//DataAdapter für Tabelle tblErsteller
            OleDbDataAdapter da2 = new OleDbDataAdapter("SELECT * FROM tblErsteller", conn);
            //Erzeugen des Command-Objektes für da2 DataAdapter
            OleDbCommandBuilder cb2 = new OleDbCommandBuilder(da2);

            

            try
            {
                //öffnen der Datenbank, Laden von Tabelle tblErsteller, schließen der Verbindung
                conn.Open();
                da2.Fill(dt2);
                conn.Close();
                             
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }

//Auslesen des Windowsbenutzernamen
            WindowsIdentity wi = WindowsIdentity.GetCurrent();
            //Ausgabe des Windowsbenutzernamen in Lable16
            textBox7.Text = wi.Name;


Kann mir jemand mal einen Tip geben was ich falsch mache oder wie ich die Funktion einfach umsetzten könnte?

Gruß Guts2

10.02.2009 - 15:42 Uhr

Danke für den Tipp. Hab jetzt die Freigabe das ich Dropen darf 👍
Aber das klappt noch nicht wo wie ich das will X(

hab den Code jetzt so abgeändert

private void listBox1_DragDrop(object sender, DragEventArgs e)
        {

            ListBox lbDest = sender as ListBox;

            DataRowView item = (DataRowView)e.Data.GetData(typeof(DataRowView));

            lbDest.Items.Add(item);

        }

Aber wenn ich das so mache, dann steht nach jedem Drop in Listbox1 System.Data.DataRowView. Irgendwas muß ich doch jetzt noch ändern.

Ps.:
Danke für den Link, der hat mir einwenig im Verständnis geholfen

09.02.2009 - 15:59 Uhr

Hallo,
ich hab ein kleiner Problem. Ich habe zwei Listboxen. Die ein ist mit einer Datenbank verknüpft.

 public Form12()
        {
            InitializeComponent();

            try
            {
                conn.Open();
                OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM tblFaehigkeiten ORDER BY FaehigkeitID", conn);
                DataTable dt = new DataTable();
                da.Fill(dt);
                conn.Close();

                dv = new DataView(dt);

                listBox2.DataSource = dv;
                listBox2.ValueMember = "FaehigkeitID";
                listBox2.DisplayMember = "Faehigkeit";

                

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            
        }

jetzt will ich eine Drag und Drop Funktion bauen mit der ich die Daten von der einen Listbox in die andere schiebe, damit ich später die Daten aus der zweiten Listbox wieder in eine Datenbank schreiben kann. Darum benötige ich die Daten die unter dem ValueMember liegen.

Habe jetzt versucht aus einigen Quellen (Buch und Internet) die D&D Funktion zu bauen.
Dabei kann der folgende klägliche Versuch zustande.

private void listBox1_DragEnter(object sender, DragEventArgs e)
        {

            if (e.Data.GetDataPresent(typeof(ListViewItem)) == true) e.Effect = DragDropEffects.Copy;
            else e.Effect = DragDropEffects.None;

        }

        private void listBox1_DragDrop(object sender, DragEventArgs e)
        {

            ListViewItem item = (ListViewItem)e.Data.GetData(typeof(ListViewItem));

        }

       
        private void listBox2_MouseDown_1(object sender, MouseEventArgs e)
        {

                    
             if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {

              ListBox lbSrc = sender as ListBox;
              if (lbSrc.SelectedIndex > -1)
            {

              System.Object dat = lbSrc.Items[lbSrc.SelectedIndex];
              DragDropEffects dropEffects = lbSrc.DoDragDrop(dat, DragDropEffects.Copy);

                   

              }

            }
        }

Drag geht, aber ich bekomm immer einen Verbotszeichen wenn ich die Daten in die 2 Listbox fallen lassen will.
Es scheint als ein Problem mit den Format zu geben. Aber ich komm nicht drauf was.

könnte mir da jemand mal einen Tip geben?

Danke

22.01.2009 - 13:56 Uhr

Warum soll ich ignorant sein?
Das Problem das ich hatte war hauptsächlich an einer anderen Stelle. ValueMember funktioniert natürlich nicht. da habt ihr recht gehabt. Aber Das hab ich ja nur ausprobiert weil das was ich vorher hatte nicht funktioniert hatte.
Wenn ihr wissen wollt wo der Fehler war, ich hab in der Datenbank Loesung geschrieben und im SQL befehl hatte ich Lösung. Warum das in Access als ich es probiert hatte trotzdem funktioniert hat keine ahnung. Hatte aber den SQL befehl direkt aus Access raus in C# Kopiert.

21.01.2009 - 17:11 Uhr

Danke für die hilfe. Problem wurde gelöst. War aber an einer ganz anderen Stelle gewesen und hatte was mit ö und oe zu tun 👶

21.01.2009 - 09:17 Uhr

Dann müsste doch meine Überlegung soweit richtig sein?
In der Datenbank ist xyzID = int
von der Datenbank zu Combobox = int
ValueMember zu @Parameter = int
Wobei ich bei @Parameter nicht sicherbin ob der nicht vielleicht = String ist. Und ich wüsste jetzt auch nicht wie ich das Prüfen, geschweigeden ändern könnte X(

20.01.2009 - 15:24 Uhr

Also ich hab noch nicht mit den Vorgängerversionen gearbeitet, oder dem anderen Kram den du da angesprochen hast. Aber ADO.Net ist Sammlung von Klassen für Verbindungen, Klassen die Tabellen im Arbeitsspeicher repräsentieren und Klassen die für gesammte Datenbank im Arbeitsspeicher stehen.

Mit diesen Klassen kann man dann schnell und einfach verbindungen zu Datenbanken herstellen und diese dann auch bearbeiten

20.01.2009 - 14:27 Uhr

Da ist ja das Problem, in der Datenbank selbst sit der PK int. Aber ich glaub das er in der Combobox zu einem Sting wird. Wenn das so ist, weiß ich aber nicht wie ich das ändern könnte

20.01.2009 - 13:33 Uhr

SQL befehl funktioniert. Hab den vorher in Access getestet.

@tkrasinger hab gerade gesehen das ich Käse erzählt habe.

ValueMember wurde von mir verwendet weil ich Comboboxen habe, und den Inhalt der Boxen lade ich aus der Datenbank. Jetzt hab ich mir überlegt das:

//Tabelle tblHersteller wird in das DataTable dtHersteller geladen.
            //Die Spalte Hersteller aus Tabelle tblHersteller wird mit combobox2 verknüpft
            dtHersteller.Clear();
            daHerstell = new OleDbDataAdapter("SELECT * FROM tblHersteller ORDER BY HerstellerID", conn);
            daHerstell.Fill(dtHersteller);

            bindingSource2.DataSource = dtHersteller;
            comboBox1.DataSource = bindingSource2;
            comboBox1.DisplayMember = "Hersteller";
            comboBox1.ValueMember = "HerstellerID";
            comboBox1.SelectedItem = null;
            comboBox1.Text = "Hersteller";

Hersteller ist das was vorher der Primery-Key war. Hab dann HerstellerID als P-Key gemacht. Will im Text der Combobox weiterhin den Namen des Herstellers sehen, aber Wenn ich dann später danach in der Datenbank suche nur den P-Key verwenden.
Darum hab ich auf ValueMember die ID gelegt und will dann natürlich auch die ID suchen.

20.01.2009 - 13:12 Uhr

War vorher aber das richtige 😃
Also vor der Änderung der Primery-Key von Text in Zahl.
Den Tip hatte ich sogar hier aus dem Forum.

Müsst nur mal ganz tief graben, dann finde ich den Thread vielleicht sogar noch

20.01.2009 - 13:02 Uhr

verwendetes Datenbanksystem: Access2003

Hallo,

ich schreibe ein c# Programm in dem ich auf eine Datenbank zugreife. Lif bis jetzt auch alles ganz gut. Nur dann habe ich mich dazu entschieden den PrimeryKey meiner Tabellen zu ändern. Von Text auf Zahl.
Habe jetzt auch den Select-Befehl umgeändert, und nach einem Test in Access selbst lief alles wunderbar.
Wenn ich aber den Select in den alten Code eintrage bekomme ich in der Zeile

daSuche.Fill(dtSuche);

eine Fehler Meldung

Datentypen in Kriterienausdruck unverträglich.

Jetzt muss ich irgendwo den Datentyp ändern, aber ich weis nicht an welcher stelle ich da für die Zeilen was ändern kann. Kann mir da jemand einen Tipp geben?

ich denke ja das ich den Datentyp von z.B.

@Para_Hersteller

ändern muss. Aber ich weiß nicht wo 😦

 //Instanzieren des Suchen Datenadapters daSuche
            daSuche = new OleDbDataAdapter();

            comSuche = new OleDbCommand("SELECT A.Erstelldatum, E.Name, E.BU, H.Hersteller, P.Produkt, T.Thema, A.Beschreibung, A.Ursache, A.Loesung, A.Link1, A.Link2 FROM tblErsteller AS E INNER JOIN (tblHersteller AS H INNER JOIN (tblProdukt AS P INNER JOIN (tblThema AS T INNER JOIN tblAnwendungsfall AS A ON T.ThemaID=A.Thema) ON P.ProduktID=A.Produkt) ON H.HerstellerID=A.Hersteller) ON E.ErstellerID=A.Ersteller WHERE (((A.Hersteller)=[@Para_Hersteller]) AND ((A.Produkt)=[@Para_Produkt]) AND ((A.Thema)=[@Para_Thema])) OR (((A.Produkt)=[@Para_Produkt]) AND ((A.Thema)=[@Para_Thema]) AND (([@Para_Hersteller]) Is Null)) OR (((A.Hersteller)=[@Para_Hersteller]) AND ((A.Thema)=[@Para_Thema]) AND (([@Para_Produkt]) Is Null)) OR (((A.Thema)=[@Para_Thema]) AND (([@Para_Hersteller]) Is Null) AND (([@Para_Produkt]) Is Null)) OR (((A.Hersteller)=[@Para_Hersteller]) AND ((A.Produkt)=[@Para_Produkt]) AND (([@Para_Thema]) Is Null)) OR (((A.Produkt)=[@Para_Produkt]) AND (([@Para_Hersteller]) Is Null) AND (([@Para_Thema]) Is Null)) OR (((A.Hersteller)=[@Para_Hersteller]) AND (([@Para_Produkt]) Is Null) AND (([@Para_Thema]) Is Null)) OR ((([@Para_Hersteller]) Is Null) AND (([@Para_Produkt]) Is Null) AND (([@Para_Thema]) Is Null)) ORDER BY A.BeschreibungsID;", conn);

            //Zuweisen der  Parameter
            if (comboBox1.SelectedItem == null)
            {
                comSuche.Parameters.AddWithValue("@Para_Hersteller", DBNull.Value);
            }
            else
            {
                comSuche.Parameters.AddWithValue("@Para_Hersteller", (comboBox1.ValueMember));
            }

            if (comboBox2.SelectedItem == null)
            {
                comSuche.Parameters.AddWithValue("@Para_Produkt", DBNull.Value);
            }
            else
            {
                comSuche.Parameters.AddWithValue("@Para_Produkt", comboBox2.ValueMember);
            }

            if (comboBox3.SelectedItem == null)
            {
                comSuche.Parameters.AddWithValue("@Para_Thema", DBNull.Value);
            }
            else
            {
                comSuche.Parameters.AddWithValue("@Para_Thema", comboBox3.ValueMember);
            }
                                  
            //SelectCommand starten
            daSuche.SelectCommand = comSuche;

            bindingSource1.DataSource = daSuche;
            //Füllen der DataTable dtSuche
            daSuche.Fill(dtSuche);

17.09.2008 - 16:02 Uhr

Danke, genau das war der Tip den ich gebraucht habe. Jetzt gehts.

Danke 😁

17.09.2008 - 14:44 Uhr

Hallo Jürgen,
danke für deine Antwort,

Aber ich glaub das was du vorschlägst passt nicht ganz 🙂

Die Abfrage und die Anzeige in DataGridview funktioniert so wie sie soll.
Was ich jetzt noch habe, ist das nach dem ich eine Anzeige im DataGridView habe, und ich dann eine neue Abfrage starte das DataGridView gelöscht werden soll, so das die neue Abfrage dann angezeigt werden kann ohne die alten Werte.
Leider bekomme ich das nicht hin 🙁 ist bestimmt was totall einfaches und ich hab es nur noch nicht gefunden, oder Verstanden 😉

mein Code sie dafür so aus:

private void button2_Click(object sender, EventArgs e)
        {

            dataGridView1.DataSource = null;

            //Instanzieren des Suchen Datenadapters daSuche
            daSuche = new OleDbDataAdapter();
            
            comSuche = new OleDbCommand("SELECT * FROM tblAnwendungsfall WHERE (Hersteller = @Para_Hersteller OR @Para_Hersteller IS null) AND (Produkt = @Para_Produkt OR @Para_Produkt IS null) AND (Thema = @Para_Thema OR @Para_Thema IS null) ORDER BY BeschreibungsID", conn);

            //Zuweisen der  Parameter
            if (comboBox1.SelectedItem == null)
            {
                comSuche.Parameters.AddWithValue("@Para_Hersteller", DBNull.Value);
            }
            else
            {
                comSuche.Parameters.AddWithValue("@Para_Hersteller", comboBox1.Text);
            }

            if (comboBox2.SelectedItem == null)
            {
                comSuche.Parameters.AddWithValue("@Para_Produkt", DBNull.Value);
            }
            else
            {
                comSuche.Parameters.AddWithValue("@Para_Produkt", comboBox2.Text);
            }

            if (comboBox3.SelectedItem == null)
            {
                comSuche.Parameters.AddWithValue("@Para_Thema", DBNull.Value);
            }
            else
            {
                comSuche.Parameters.AddWithValue("@Para_Thema", comboBox3.Text);
            }
                                  
            //SelectCommand starten
            daSuche.SelectCommand = comSuche;

            bindingSource1.DataSource = daSuche;
            //Füllen der DataTable dtSuche
            daSuche.Fill(dtSuche);

            dataGridView1.DataSource = null;

            dv = new DataView(dtSuche);

            BindingSource bsSuche = new BindingSource();

            bsSuche.DataSource = null;

            bsSuche.DataSource = dv;

            dataGridView1.DataSource = bsSuche;

        }

17.09.2008 - 13:36 Uhr

probier einfach mal die DataSource vom Grid vorher auf NULL zu setzen.

Also ich hab es versucht. Ich hab das Grid NULL gesetzt, dann hab ich das BindingSource Null gesetzt. und auch vieles andere das man Null setzen kann. Aber jedesmal beibt der Inhalt des Grids erhalten. Nur das neu laden der Form ändert daran was. Aber das will ich ja nicht macht 🙁
Das Grid soll ohne neuladen der Form aktualisiert werden

15.09.2008 - 15:56 Uhr

Ich ich mach die Anbindung an das DataGridView über einen BindingSource.

//SelectCommand starten
            daSuche.SelectCommand = comSuche;

            bindingSource1.DataSource = daSuche;
            //Füllen der DataTable dtSuche
            daSuche.Fill(dtSuche);

            dv = new DataView(dtSuche);

            BindingSource bsSuche = new BindingSource();

            bsSuche.DataSource = dv;

            dataGridView1.DataSource = bsSuche;

Kann ich dann einfach das BindingSource resetten?

15.09.2008 - 15:10 Uhr

Danke noch mal für die Tips, die waren alle Klasse und haben mir weiter geholfen. Jetzt bekomm ich das Ergebniss der Suchfunktion und zeig es auch in einem DataGridView an.
Aber wenn ich jetzt noch einmal die Suchfunktion starte, dann werden die neuen Ergebnisse an die alten angehängt.
Habe jetzt schon Überlegt, das DataGridView zu resetten, aber wie sollte das funktionieren?
Ist es möglich Daten die in einem DataGridView stehen nach einer weiteren Suche zu Resetten?

12.09.2008 - 16:18 Uhr

Danke das wars. Jetzt geht alles 😁 👍

12.09.2008 - 15:56 Uhr
//Leert das Auswahlfeld damit ein NULL Wert an die SQL Datenbank übergeben wird  

Du weist aber schon, das man die Texteigenschaft bei Controls nicht auf null setzen kann, da diese autom. in String.Empty gestzt werden?

Z.B. ergibt

  
comboBox1.Text = "Bla";  
Console.WriteLine(comboBox1.Text != null);  
comboBox1.Text = null;  
Console.WriteLine(comboBox1.Text != null);  
  
  
True  
True  
  

Du musst in den Parametern auch DBNull.Value und nicht null übergeben, wenn du ein Parameter auf null setzen willst.

Auch wenn es jetzt blöd klingt, aber wie müsste ich dieses DBNull.Value dann dem Parameter übergeben?

12.09.2008 - 15:35 Uhr

OK hab den Fehler doch gefunden. Ersetzt man in der Select anweisung die AND mit OR gehts ^^

Blöd muß man sein

Edit:
Hmm das OR ist doch nicht die richtige Lösung. Verdammt

12.09.2008 - 15:31 Uhr

so hab jetzt mal eure vorschläge umgesetzt. aber irgendwas stimmt nicht 🙁 Nämlich bekomm ich keine Informationen aus der Datenbank wenn ich nur 1 von 3 Möglichen abfragen einstelle.
Mein Code ist folgend zu finden.
Schaut mal drüber bitte, viel dürfte nicht falsch sein, denn wenn ich alle 3 Abfragen eingebe bekomm ich auch das richtige ergebniss

//Leert das Auswahlfeld damit ein NULL Wert an die SQL Datenbank übergeben wird
            if (comboBox1.SelectedItem == null)
            {
                comboBox1.Text = null;
            }

            if (comboBox2.SelectedItem == null)
            {
                comboBox2.Text = null;
            }

            if (comboBox3.SelectedItem == null)
            {
                comboBox3.Text = null;
            }
            //Instanzieren des Suchen Datenadapters daSuche
            daSuche = new OleDbDataAdapter();
            
            comSuche = new OleDbCommand("SELECT * FROM tblAnwendungsfall WHERE (Hersteller = @Para_Hersteller OR @Para_Hersteller IS null) AND (Produkt = @Para_Produkt OR @Para_Produkt IS null) AND (Thema = @Para_Thema OR @Para_Thema IS null) ORDER BY BeschreibungsID", conn);
            //Zuweisen der  Parameter
            comSuche.Parameters.AddWithValue("@Para_Hersteller", comboBox1.Text);

            comSuche.Parameters.AddWithValue("@Para_Produkt", comboBox2.Text);

            comSuche.Parameters.AddWithValue("@Para_Thema", comboBox3.Text);
            //SelectCommand starten
            daSuche.SelectCommand = comSuche;

            bindingSource1.DataSource = daSuche;
            //Füllen der DataTable dtSuche
            daSuche.Fill(dtSuche);

            dv = new DataView(dtSuche);

            BindingSource bsSuche = new BindingSource();

            bsSuche.DataSource = dv;

            dataGridView1.DataSource = bsSuche;

11.09.2008 - 16:36 Uhr

Ah ok dass ist gut ^^
Dann kann ich doch eine meiner früheren Überlegungen umsetzten. Hatte das wegen dieses fehlenden wissens verworfen 🙂

Danke

11.09.2008 - 16:26 Uhr

Ok langsam bekomm ich da den durchblick 😁

SELECT * FROM Tabelle
WHERE (Thema = @Parameter_Thema OR @Parameter_Thema is null)

Wenn Parameter_Thema null ist, was macht dann SQL, denn genau darum hab ich ja mich hier gemeldet. =) Denn mir will nicht in den Kopf gehen was meine Datenbank macht wenn ich einen SQL befehl mit einem NULL wert habe. Sowas haben wir im Studium nicht durch gesprochen X(

11.09.2008 - 16:13 Uhr

Hmm.
Also für jedes Feld, sagen wir mal z.B. Thema bau ich mir dann den Select so ungefähr zusammen,

Select * from Tabelle where Thema = Parameter_Thema

Combobox1.Text = Bibliothek

Parameter_Thema = Bibliothek

So meinst du?

11.09.2008 - 15:53 Uhr

Ich hoffe mal ich versteh dich richtig, (denn ich hab gerade Kopfschmerzen und das Denken fällt nicht so leicht ^^ ) du meinst also ich sollte versuchen select anweisungen schon vorbereiten und dann nur die Werte eintragen die ich ausgewählt habe.

Aber was mach ich dann mit Felden die Leer sind?

z.B. Ich ich will nur nach Daten für ein bestimmtes Produkt suchen. Thema und Hersteller sind mir egal. Dann würde ich noch einen null Wert an die Select anweisung übergeben, oder nicht?
Und dann würde das nicht gehen???

11.09.2008 - 15:45 Uhr

verwendetes Datenbanksystem: <bitte immer angeben> Access 2003

Hallo Leute,
Ich schreibe eben ein Programm wo Information wie Hersteller, Produkt, Thema und eine Fehlerbeschreibung in eine Datenbank geschrieben werden.
Jetzt will ich über eine Such-Oberfläsche in den Feldern Hersteller, Thema und Produkt bestimmte Daten suchen.

Jetzt kommt mein Problem und meine Frage:

Wie stell ich die Suche am schlausten an?
Hab mir schon gedacht das ich mir vielleicht einen Select-Befehl zusammen baue. Also wenn ich auf den Button "Suchen" klicke wird abgefragt welche Suchkriterien eingestellt worden sind, und über mehrer If-Anweisungen bau ich mir dann über String-Verkettungen den Select Befehl zusammen.

Oder gibt es da einen anderen Weg?

Ich benutze Comboboxen die auf andere Tabellen zugreifen, damit nur Abfragen
benutzt werden können, die auch in der Datenbank sind.

Mit freundlichen Grüßen

Guts2

27.08.2008 - 15:12 Uhr

Danke, hattes sowas schon befürchtet.
Aber das war es .

Problem gelöst 👍

27.08.2008 - 14:29 Uhr

verwendetes Datenbanksystem: Access 2003

Hallo Leute, ich habe einen Datenbank zugriff und möchte Daten in meine DateTabelle laden. Aber Leider bekomme ich immer die Fehlermeldung das ein Syntaxfehler in FROM-Klausel vorliegt. Hab jetzt schon mehrmals den Code geändert, und auch meine Datenbank Kontrolliert, aber da scheint alles in ordnung zu sein. 🙁 Hab keine idee mehr was das Problem sein könnte.

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;
using System.Data.OleDb;

namespace Lagerverwaltung
{
    public partial class NeuerBenutzer : Form
    {
        private OleDbDataAdapter da = null;
        private OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Password_Liste.mdb;");
        private DataTable dt = null;
        private BindingSource bs = new BindingSource();

        public NeuerBenutzer()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string BN1 = textBox1.Text;

            string PW1 = textBox2.Text;

            string PW2 = textBox3.Text;

            if ((PW1 == PW2) && (BN1 != ""))
            {
                if ((PW1 == "") || (PW2 == ""))
                {
                    MessageBox.Show("Fehler bei Password Erstellung!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    string selStr = "SELECT * FROM Password";
                    da = new OleDbDataAdapter(selStr, conn);
                    OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
                    dt = new DataTable("Password");
                    conn.Open();
                    da.Fill(dt);
                    conn.Close();

                    bs.DataSource = dt;

                    textBox1.DataBindings.Add("Text", bs, "Benutzer");
                    textBox2.DataBindings.Add("Text", bs, "BPassword");

                    bs.AddNew();
                    bs.EndEdit();
                    da.Update(dt);
                    
                    Close();
                }
            }
            else
            {
                if (PW1 != PW2)
                {
                    MessageBox.Show("Nicht gleiches Password!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                if (BN1 == "")
                {
                    MessageBox.Show("Kein Benutzername eingetragen!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

            }
        }
    }
}

Kommt jemand das Problem bekannt vor? Würde mich über eine antwort freuen

13.08.2008 - 14:55 Uhr

Zeilenumbrüche fügst Du z.B. mit "\r\n" im String ein.
Grüße Bernd

Danke, genau das hab ich gesucht 🙂

13.08.2008 - 13:12 Uhr

Hallo,
Ich bin gerade dabei mich etwas in Visual C# einzuarbeiten.
Nun möchte ich einen Button erstellen, der bei Click eine Messagebox öffnet in der:

Name
Firma
Datum

und sowas steht.
Aber ich bekommen es nur hin das alles als einen String zu schreiben. Ist es möglich den Text so wie ich geschrieben haben, also mit absätzen zu schreiben? Kann man den Text dann auch in der Mitte zuentrieren?
Oder muß ich mir dafür eine Extra Form erstellen?

Gruß Guts2

03.01.2007 - 13:59 Uhr

Danke für den Tip, ich hab es jetzt so gelöst. es klappt jetzt auch:


            DataTable oWert1 = ds.Tables[0];
            DataTableReader reader = oWert1.CreateDataReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    oWert = (int)reader["Anzahl"];
                }
            }

03.01.2007 - 00:47 Uhr

Hallo liebe Leute,

ich hab da ein kleines Problem. Also ich hab eine Access Datenbank. Habe eine Auswahl geschrieben, die mir sagt wieviel Tupels in der Tabelle sind. Jetzt will ich über C# diese Abfrage aufrufen und den Wert der dabei raus kommt in einer Randomfunktionen weiter verwenden. Aber für die Randomfunktion muß der zurück gegeben Wert eine int Zahl sein. Leider weiß ich zur zeit nicht wie ich das anstellen kann.

Mein Code sieht zur Zeit so aus:

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


namespace Vokabel_Trainer
{
    public partial class VocTestForm : Form
    {
        int uWert = 0;
        int oWert;

        public VocTestForm()
        {
            InitializeComponent();
        }

        private void toolTip1_Popup(object sender, PopupEventArgs e)
        {

        }

        private void VocTestForm_Load(object sender, EventArgs e)
        {
            string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=VokabelDB.mdb;";
            OleDbConnection conn = new OleDbConnection(connStr);

            OleDbCommand cmd = new OleDbCommand("[Abfrage1]", conn);

            cmd.CommandType = CommandType.StoredProcedure;

            OleDbDataAdapter da = new OleDbDataAdapter(cmd);

            DataSet ds = new DataSet();

            try
            {
                conn.Open();
                da.Fill(ds, "VokabelDB");
                conn.Close();

            }
            catch
            {
                MessageBox.Show("Fehler");
            }

            // oWert = ds;

            System.Random rnd = new System.Random();
            int z = rnd.Next(uWert, oWert);
            label3.Text = z.ToString();
        }
    }
}

Der Code ist so lauffähig, aber ich bekomm so ja noch nichts zurück gelieferter was ich möchte, kann mir da jemand einen Tip geben?

17.11.2006 - 09:33 Uhr

Na dann bin ich Level.Absoluterbeginner 😁

16.11.2006 - 17:37 Uhr

Original von joerg.uth

Aber mal als Grundlage Du verwendest :

this.keno_Tabelle1TableAdapter.Fill(this._Keno_db1DataSet.Keno_Tabelle1);

Woher dieser kommt ist nicht ersichtlich

Jörg

Das wird automatisch erstellt wenn ich es so mache wie unten beschrieben ausgeführt wird.

Erstellen des datengebundenen Formulars
Sie können die datengebundenen Steuerelemente erstellen, indem Sie Elemente aus dem Datenquellenfenster auf das Formular ziehen.

So erstellen Sie datengebundene Steuerelemente auf dem Formular
Ziehen Sie den Hauptknoten Customers aus dem Datenquellenfenster auf Form1.

Auf dem Formular werden datengebundene Steuerelemente mit beschreibenden Bezeichnungen sowie ein Toolstrip (BindingNavigator) für die Navigation in den Datensätzen angezeigt. NorthwindDataSet, CustomersTableAdapter, BindingSource und BindingNavigator werden im Komponentenfach angezeigt.

Ändern von Code zum Aktualisieren der Datenbank
Sie können die Datenbank aktualisieren, indem Sie die Update-Methode von CustomersTableAdapter aufrufen. Ein Ereignishandler für die BindingNavigator-Schaltfläche Speichern wird standardmäßig zum Code des Formulars hinzugefügt, damit Aktualisierungen an die Datenbank gesendet werden. In dieser Prozedur wird die Fehlerbehandlung zum Code hinzugefügt, indem der Aktualisierungsaufruf in einen Try-Catch-Block eingefügt wird. Sie können den Code entsprechend den Anforderungen der Anwendung anpassen.

So fügen Sie der Anwendung Aktualisierungslogik hinzu
Doppelklicken Sie auf dem BindingNavigator auf die Schaltfläche Speichern, um den Code-Editor für den bindingNavigatorSaveItem_Click-Ereignishandler zu öffnen.

Bearbeiten Sie den Code im Ereignishandler, sodass die Fehlerbehandlung hinzugefügt wird. Der Code sollte wie folgt aussehen:

Ok danke.
Ich versuch das mal zu beherzigen.
Werde das heute abend mal ausprobieren.

Werde mich dann noch mal melden

16.11.2006 - 16:57 Uhr

ist ja nicht schlimm das du gereizt bist, und ich bin nicht gestört, aber der Code wurde gerade von mir umgebaut.
Jetzt ist es aber immer noch nicht richtig X(

Nicht böse sein Wegen meinen vielen Fragen, aber ich hab so gut wie keinen Plan von dem Thema. Ich versuch mir das erst bei zu bringen. Und ich arbeite nach Büchern und Sachen die im Internet stehen. Und wenn nix klappt bin ich erst mal total ratlos.

16.11.2006 - 16:46 Uhr

So ich hab jetzt mal den Code umgeschrieben und so wie vorgeschlagen wurde die Knöpfe vom DataGridView benutzt. Aber es klappt immer noch nicht.
Mein Neuer Code sieht jetzt so aus

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

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

        private void keno_Tabelle1BindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            try
            {
                this.Validate();
                this.keno_Tabelle1BindingSource.EndEdit();
                this.keno_Tabelle1TableAdapter.Update(this._Keno_db1DataSet.Keno_Tabelle1);
                MessageBox.Show("Update successful");
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("Update failed");
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: Diese Codezeile lädt Daten in die Tabelle "_Keno_db1DataSet.Keno_Tabelle1". Sie können sie bei Bedarf verschieben oder entfernen.
            this.keno_Tabelle1TableAdapter.Fill(this._Keno_db1DataSet.Keno_Tabelle1);

        }
    }
}

Hab es jetzt nach der Anleitung aus der Hilfe gemacht.

Erstellen des datengebundenen Formulars
Sie können die datengebundenen Steuerelemente erstellen, indem Sie Elemente aus dem Datenquellenfenster auf das Formular ziehen.

So erstellen Sie datengebundene Steuerelemente auf dem Formular
Ziehen Sie den Hauptknoten Customers aus dem Datenquellenfenster auf Form1.

Auf dem Formular werden datengebundene Steuerelemente mit beschreibenden Bezeichnungen sowie ein Toolstrip (BindingNavigator) für die Navigation in den Datensätzen angezeigt. NorthwindDataSet, CustomersTableAdapter, BindingSource und BindingNavigator werden im Komponentenfach angezeigt.

Ändern von Code zum Aktualisieren der Datenbank
Sie können die Datenbank aktualisieren, indem Sie die Update-Methode von CustomersTableAdapter aufrufen. Ein Ereignishandler für die BindingNavigator-Schaltfläche Speichern wird standardmäßig zum Code des Formulars hinzugefügt, damit Aktualisierungen an die Datenbank gesendet werden. In dieser Prozedur wird die Fehlerbehandlung zum Code hinzugefügt, indem der Aktualisierungsaufruf in einen Try-Catch-Block eingefügt wird. Sie können den Code entsprechend den Anforderungen der Anwendung anpassen.

So fügen Sie der Anwendung Aktualisierungslogik hinzu
Doppelklicken Sie auf dem BindingNavigator auf die Schaltfläche Speichern, um den Code-Editor für den bindingNavigatorSaveItem_Click-Ereignishandler zu öffnen.

Bearbeiten Sie den Code im Ereignishandler, sodass die Fehlerbehandlung hinzugefügt wird. Der Code sollte wie folgt aussehen:



16.11.2006 - 14:29 Uhr

Also was ich möchte ist, das die Werte die im DataGridView stehen in die Datenbank übertragen werden. Also wenn das mit Update nicht geht, wie sollte es dann gemacht werden?

16.11.2006 - 14:19 Uhr

ja, die Datenbank hat einen Primärschlüssel.
Es kommt keine Fehler Meldung.
Nur die Daten werden nicht übertragen
An der Datenbank wurde von mir auch nicht viel gemacht. Ich hab die Spalten benannt, die Typen festgelegt. Der Primärschlüssel ist aber ein Autowert. Kann es daran liegen??

16.11.2006 - 13:14 Uhr

Danke für den Tipp, aber ich komm mit dem was auf der Seite beschrieben wird nicht wirklich klar. Ich benutzt keine SQL Datenbank, sondern eine Access Datenbank. Mein Problem ist, das ich den Code von meinem Buch übernommen habe, aber der Update Befehl nicht funktioniert. irgend was muß ich vergessen haben. Aber ich kann es nicht sehen X(

16.11.2006 - 12:13 Uhr

Hi Leute,
Ich arbeite seit kurzem mit Visual C# und wollte eine kleine Anwendung mit einer Access Datenbank schreiben.
Hab mir ein ein C# Kochbuch zu gelegt und mal ein paar Sachen ausprobiert.
Hab eine Access Datenbank in mein Projekt eingebunden und mir die Daten in einem DatenGridView ausgegeben.
Klappt alles super.
Dann will ich neue Daten in die Datenbank schreiben. Das mach ich im DatenGrid und drück dann den Update Knopf den ich programmiert habe. Aber die daten werden nicht in die Datenbank übertragen. Was hab ich Falsch gemacht??

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

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        OleDbDataAdapter da = null;
        DataSet ds = null;

        public Form1()
        {
            InitializeComponent();

            OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Keno-db1.mdb;");
            OleDbCommand cmd = new OleDbCommand("SELECT * FROM Keno_Tabelle1 ORDER BY ID", conn);

            da = new OleDbDataAdapter(cmd);

            OleDbCommandBuilder cb = new OleDbCommandBuilder(da);

            ds = new DataSet();

            da.Fill(ds, "Keno_Tabelle1");

            dataGridView1.DataSource = ds;

            dataGridView1.DataMember = "Keno_Tabelle1";
        }

        private void button1_Click(object sender, EventArgs e)
        {
 
            da.Update(ds, "Keno_Tabelle1"); 
        }
    }
}

Danke schon mal für die Hilfe

Guts2