Za fax trebam napraviti neku aplikaciju vezanu za racunovodstvo u VS. U VS-u sam napravila i bazu sa 3 tabele: Konto, Dokument, Transakcija; Transakcija je povezana na druge preko vanjskih kljuceva.
Na formu za unos nove transakcije postavljen combo box koji je preko 'use data bound' povezan na bazu:
Datasource - kontoBindingSource
Displaymember - Sifra
Valuemember - Sifra
Selectedvalue - transakcijaBindingSource-SKonta
Sifra je u Kontu primarni kljuc, a Skonta vanjski u Transakciji
Isto je uradjeno i sa drugim combo boxom koji prikazuje nazive dokumenta, a trebao bi pohranjivati sifre dokumenata u transakciju u SDokumenta (vanjski kljuc).
kod:
Code:
private void button1_Click(object sender, EventArgs e)
{string tekstVeze = "Data Source=.\\SQLEXPRESS; AttachDbFilename = C:\\ProjektBazaNova.mdf; Integrated Security = true; Connect Timeout = 30; User Instance = True";
SqlConnection veza = new SqlConnection(tekstVeze);
veza.Open();
string skonta = comboBox1.ValueMember;
decimal dug = Convert.ToDecimal(textBox2.Text);
decimal pot = Convert.ToDecimal(textBox3.Text);
int sdok = Convert.ToInt32(comboBox2.ValueMember);
string dat = dateTimePicker1.Text;
string naredba = "INSERT INTO Transakcija (Datum, SKonta, Duguje, Potrazuje, SDokumenta) VALUES ('"+dat+"','"+skonta+"','"+dug+"','"+pot+"','"+sdok+"')";
SqlCommand com = new SqlCommand(naredba, veza);
com.ExecuteNonQuery();
private void button1_Click(object sender, EventArgs e)
{string tekstVeze = "Data Source=.\\SQLEXPRESS; AttachDbFilename = C:\\ProjektBazaNova.mdf; Integrated Security = true; Connect Timeout = 30; User Instance = True";
SqlConnection veza = new SqlConnection(tekstVeze);
veza.Open();
string skonta = comboBox1.ValueMember;
decimal dug = Convert.ToDecimal(textBox2.Text);
decimal pot = Convert.ToDecimal(textBox3.Text);
int sdok = Convert.ToInt32(comboBox2.ValueMember);
string dat = dateTimePicker1.Text;
string naredba = "INSERT INTO Transakcija (Datum, SKonta, Duguje, Potrazuje, SDokumenta) VALUES ('"+dat+"','"+skonta+"','"+dug+"','"+pot+"','"+sdok+"')";
SqlCommand com = new SqlCommand(naredba, veza);
com.ExecuteNonQuery();
Kada pokrenem aplikaciju i pokusam spremiti podatke u batu izbacuje error:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Transakcija_Konto". The conflict occurred in database "C:\PROJEKTBAZANOVA.MDF", table "dbo.Konto", column 'Sifra'.
The statement has been terminated.
Dalje, klikom na taj isti button bi se trebali azurirati podaci u tablici Konto, sto sam htjela uraditi tako da prvo povucem stanje na duguje i potrazuje na kontu koji ima istu sifru kao u combo boxu, zbrojim je sa 'dug' odnosno 'pot' i onda update uradim. Ali opet greska:
Code:
string naredba2 = "SELECT Duguje FROM Konto WHERE Sifra = '" + skonta + "'";
SqlCommand com2 = new SqlCommand(naredba2, veza);
SqlDataReader citac = com2.ExecuteReader();
citac.Read();
decimal duguje = citac.GetDecimal(1);
decimal dd = dug + duguje;
string naredba3 = "SELECT Potrazuje FROM Konto WHERE Sifra = '" + skonta + "'";
SqlCommand com3 = new SqlCommand(naredba3, veza);
SqlDataReader citac2 = com3.ExecuteReader();
citac2.Read();
decimal potrazuje = citac2.GetDecimal(1);
decimal pp = potrazuje + pot;
string naredba4 = "UPDATE Konto SET Duguje='"+duguje+"', Potrazuje='"+potrazuje+"' WHERE Sifra='"+skonta+"'";
SqlCommand com4 = new SqlCommand(naredba4, veza);
com4.ExecuteNonQuery();
string naredba2 = "SELECT Duguje FROM Konto WHERE Sifra = '" + skonta + "'";
SqlCommand com2 = new SqlCommand(naredba2, veza);
SqlDataReader citac = com2.ExecuteReader();
citac.Read();
decimal duguje = citac.GetDecimal(1);
decimal dd = dug + duguje;
string naredba3 = "SELECT Potrazuje FROM Konto WHERE Sifra = '" + skonta + "'";
SqlCommand com3 = new SqlCommand(naredba3, veza);
SqlDataReader citac2 = com3.ExecuteReader();
citac2.Read();
decimal potrazuje = citac2.GetDecimal(1);
decimal pp = potrazuje + pot;
string naredba4 = "UPDATE Konto SET Duguje='"+duguje+"', Potrazuje='"+potrazuje+"' WHERE Sifra='"+skonta+"'";
SqlCommand com4 = new SqlCommand(naredba4, veza);
com4.ExecuteNonQuery();
Invalid attempt to read when no data is present.
i oznacen ovaj red -> decimal duguje = citac.GetDecimal(1);
Koliko se meni cini da je problem sa combo boxom, ali pojma nemam sta kako :s
MOOOOLIIIIM pomoc, sutra trebam predati program :(