Arbeiten mit Sql-Datenbank

Smile85

Grünschnabel
Hallo bräuchte wieder mal eure Hilfe!
Vorweg muss ich sagen dass ich Anfänger bin!!

Ich arbeite mit Visual C++ 2008 Express Edition

Und zwar hab ich folgendes Problem, ich habe ein Sql-Datenbank in der ich eine Tabelle habe die aus drei Spalten besteht, wobei die Spalten keine Einträge NULL zulassen. Weiters habe ich einen bindingNavigator, bei denn ich noch zusätzlich einen Button “Speichern“ dazugefügt habe. Weiters habe ich noch eine Textbox, eine ComboBox und ein DateTimePicker, über die ich die einzelnen Spalten in der Datenbank befülle, bzw. Updates durchführe.
Nun zum eigentlichen Problem, wenn ich auf den Button “Neu Hinzufügen“ klicke sind automatisch in der ComboBox der letzte Eintrag zu sehen gleiches gilt für das DateTimePicker (das soll auch so bleiben), nur wenn ich jetzt anschließend auf den Button “Speichern“ klicke, bricht das Programm mit folgender Fehlermeldung ab : Es können keine Werte NULL in die Spalte 2 bzw. Spalte 3 eingefügt werden.
Wie kann ich denn Programm mitteilen das er automatisch die sichtbaren Werte übernimmt,
ohne mit einer Fehlermeldung das Programm zu beenden?

Danke schon mal in Voraus!
Mit freundlichen Grüßen
Martin
 

ToDu

Mitglied
Hmmm wie sieht dein SQL-Command aus?
Hast du die Werte aus den Feldern in selbigem berücksichtigt?
Hast du vorher auch UpdateData ausgeführt?


Mfg

ToDu
 

Smile85

Grünschnabel
Habe mit folgenden Code gearbeitet:

Code:
//Verbindung Datenbank Lohnsteuer
		SqlDataAdapter ^dbAdapter2;
		DataSet ^dataSet2;
		BindingSource ^bindingSource2;
		array<int> ^dbRang;
		array<String^> ^dbAVAEAB;
		array<DateTime> ^dbSeit;

Code:
                                                                dbAdapter2 =nullptr;
			dataSet2 =nullptr;
			bindingSource2 =nullptr;
			dbRang = gcnew array<int>(20);
			dbAVAEAB = gcnew array<String^>(20);
			dbSeit = gcnew array<DateTime>(20);

Code:
String ^abfrageString2 = "SELECT * FROM TabelleLohnsteuer";
					SqlConnection ^verbindung2 = gcnew SqlConnection(verbindungsstr);
					dbAdapter2 =gcnew SqlDataAdapter(abfrageString2, verbindung2);
					dataSet2 =gcnew DataSet();
					dataSet2->Tables->Add("TabelleLohnsteuer");
					dbAdapter2->Fill(dataSet2, "TabelleLohnsteuer");
					bindingSource2 =gcnew BindingSource();
					bindingSource2->DataSource=dataSet2;
					bindingSource2->DataMember="TabelleLohnsteuer";
					
					
					bindingNavigator1->BindingSource=bindingSource2;
					
					textBox2->DataBindings->Add(gcnew Binding("Text",
											bindingSource2,
											"Rang"));
					
					comboBox3->DataBindings->Add(gcnew Binding("Text", 
                                             bindingSource2, 
                                             "AVAEAB"));

					dateTimePicker2->DataBindings->Add(gcnew Binding("Text", 
                                             bindingSource2, 
                                             "Seit"));
				
					
					verbindung = gcnew SqlConnection(verbindungsstr);
					verbindung->Open(); 
					befehl = verbindung->CreateCommand();
					befehl->CommandText = "SELECT * FROM TabelleLohnsteuer";
					leser = befehl->ExecuteReader();
					aktDatensatz = -1;
					while (leser->Read())
						{
							aktDatensatz++;
							dbRang[aktDatensatz] = leser->GetInt32(0);
							dbAVAEAB[aktDatensatz] = leser->GetString(1);
							dbSeit[aktDatensatz] = leser->GetDateTime(2);

						}
					
					ListView ^listVie1 =gcnew ListView();
					listView1->View=View::Details;
					listView1->Columns->Add("Rang",80,HorizontalAlignment::Center);
					listView1->Columns->Add("AVAEAB",170,HorizontalAlignment::Center);
					listView1->Columns->Add("Seit",120,HorizontalAlignment::Center);
					
					int count=bindingSource2->Count;			
					int i;
					for(i=0;i<count;i++)
						{
							listView1->Items->Add(Convert::ToString(dbRang[i]));
							listView1->Items[i]->SubItems->Add(dbAVAEAB[i]);
							DateTime date= DateTime(dbSeit[i]);
							str=date.ToString("d");
							listView1->Items[i]->SubItems->Add(Convert::ToString(str));
						}
									
				
					SqlCommandBuilder ^commandBuilder2 = gcnew SqlCommandBuilder(dbAdapter2);

Mit dem Speicher-Button
im Bindingnavigator löse ich folgenden Code aus.

Code:
bindingSource2->EndEdit();
			dbAdapter2->Update(dataSet2->Tables["TabelleLohnsteuer"]);

			listView1->Items->Clear();

			verbindung = gcnew SqlConnection(verbindungsstr);
					verbindung->Open(); 
					befehl = verbindung->CreateCommand();
					befehl->CommandText = "SELECT * FROM TabelleLohnsteuer";
					leser = befehl->ExecuteReader();
					aktDatensatz = -1;
					while (leser->Read())
						{
							aktDatensatz++;
							dbRang[aktDatensatz] = leser->GetInt32(0);
							dbAVAEAB[aktDatensatz] = leser->GetString(1);
							dbSeit[aktDatensatz] = leser->GetDateTime(2);

						}
					
					
					int count=bindingSource2->Count;			
					int i;
					for(i=0;i<count;i++)
						{
							listView1->Items->Add(Convert::ToString(dbRang[i]));
							listView1->Items[i]->SubItems->Add(dbAVAEAB[i]);
							DateTime date= DateTime(dbSeit[i]);
							str=date.ToString("d");
							listView1->Items[i]->SubItems->Add(Convert::ToString(str));
						}

Mfg Martin