Niestety pojawił się kolejny schodek do pokonania :(
Skąd biorą się u mnie błędy typu "attempt to access before calling read()". Zasada działania jest prosta: jeżeli zawodnik jest dodawany do istniejącej rodziny to zwiększamy ilosc czlonkow o 1 natomiast jesli rodzina jeszcze nie istnieje to ja tworzymy. Dodawanie rodzin dziala i zwiekszanie rowniez lecz zawodnikow jak nie bylo tak nie ma. W ogóle bajecznie byłoby gdyby udało się zrobić to na jednej transakcji. Czyli dodajemy rodzine i ponownie sprawdzamy id nowej rodziny. Funkcja sprawdz_rodzine dziala bez zarzutow. Proszę pomóżcie bo zawody blisko a ja w proszku :(
W trakcie prob rozbilem wszystko na osobne transakcje....
String^ plec = "";
String^ rodzina = txtZawodnicyRodzina->Text;
String^ uwagi = "";
String^ dokumenty = "";
int wiek = Convert::ToInt32(lblZawodnicyPokazWiek->Text);
int id_rodziny = sprawdz_rodzine(txtZawodnicyRodzina->Text);
int idgrupy = id_grupy(lblZawodnicyPokazGrupe->Text);
if (txtZawodnicyDokumenty->Text != ""){
dokumenty = txtZawodnicyDokumenty->Text;
}
else{
dokumenty = "NIE DOSTARCZONO";
}
if (txtZawodnicyUwagi->Text != ""){
uwagi = txtZawodnicyDokumenty->Text;
}
else{
uwagi = "BRAK";
}
if (chbZawodnicyKobieta->Checked){
plec = "Kobieta";
}
else{
plec = "Mężczyzna";
}
if (id_rodziny == 0){
/*DODAWANIE NOWEJ RODZINY*/
MySqlConnection^ PolaczBaze1 = gcnew MySqlConnection(konfiguracja_sql);
MySqlCommand^ zapytanie1 = PolaczBaze1->CreateCommand();
MySqlTransaction^ transakcja1;
PolaczBaze1->Open();
transakcja1 = PolaczBaze1->BeginTransaction(IsolationLevel::ReadCommitted);
zapytanie1->Connection = PolaczBaze1;
zapytanie1->Transaction = transakcja1;
try{
zapytanie1->CommandText = "INSERT INTO familiada_2017.rodziny (nazwa_rodziny, ilosc_czlonkow, punkty) VALUES ('" + txtZawodnicyRodzina->Text + "', 1, 0);";
zapytanie1->ExecuteNonQuery();
transakcja1->Commit();
MessageBox::Show("Dodano rodzinę: " + txtZawodnicyRodzina->Text + ".", "Wykonano.", MessageBoxButtons::OK, MessageBoxIcon::Information);
}
catch (Exception^ komunikat1){
MessageBox::Show(komunikat1->Message);
transakcja1->Rollback();
MessageBox::Show("Wystąpił błąd podczas dodawania rodziny.", "UWAGA!", MessageBoxButtons::OK, MessageBoxIcon::Error);
}
PolaczBaze1->Close();
id_rodziny = sprawdz_rodzine(txtZawodnicyRodzina->Text);
/*DODAWANIE ZAWODNIKA DO NOWEJ RODZINY*/
MySqlConnection^ PolaczBaze1A = gcnew MySqlConnection(konfiguracja_sql);
MySqlCommand^ zapytanie1A = PolaczBaze1A->CreateCommand();
MySqlTransaction^ transakcja1A;
PolaczBaze1A->Open();
transakcja1A = PolaczBaze1A->BeginTransaction(IsolationLevel::ReadCommitted);
zapytanie1A->Connection = PolaczBaze1A;
zapytanie1A->Transaction = transakcja1A;
try{
zapytanie1A->CommandText = "INSERT INTO familiada_2017.zawodnicy (imie, nazwisko, plec, data_ur, pokrewienstwo, wiek, szacowany_czas, uwagi, dokumenty, rodzina, grupa) VALUES ('" + txtZawodnicyImie->Text + "', '" + txtZawodnicyNazwisko->Text + "','" + plec + "','" + txtZawodnicyData->Text + "', '" + txtZawodnicyPokrewienstwo->Text + "', '" + wiek + "', '" + txtZawodnicyCzas->Text + "', '" + uwagi + "', '" + dokumenty + "', '" + txtZawodnicyRodzina->Text + "', , '" + idgrupy + "');";
zapytanie1A->ExecuteNonQuery();
transakcja1A->Commit();
MessageBox::Show("Dodano zawodnika: " + txtZawodnicyImie->Text + " " + txtZawodnicyNazwisko->Text + ".", "Wykonano.", MessageBoxButtons::OK, MessageBoxIcon::Information);
}
catch (Exception^ komunikat1A){
MessageBox::Show(komunikat1A->Message);
transakcja1A->Rollback();
MessageBox::Show("Wystąpił błąd podczas dodawania zawodnika.", "UWAGA!", MessageBoxButtons::OK, MessageBoxIcon::Error);
}
PolaczBaze1A->Close();
}
else{
/*ZWIEKSZENIE ILOSCI CZLONKOW O 1*/
MySqlConnection^ PolaczBaze2 = gcnew MySqlConnection(konfiguracja_sql);
MySqlCommand^ zapytanie2 = PolaczBaze2->CreateCommand();
MySqlTransaction^ transakcja2;
PolaczBaze2->Open();
transakcja2 = PolaczBaze2->BeginTransaction(IsolationLevel::ReadCommitted);
zapytanie2->Connection = PolaczBaze2;
zapytanie2->Transaction = transakcja2;
try{
zapytanie2->CommandText = "UPDATE familiada_2017.rodziny SET ilosc_czlonkow = ilosc_czlonkow + 1 WHERE nazwa_rodziny = '" + txtZawodnicyRodzina->Text + "';";
zapytanie2->ExecuteNonQuery();
transakcja2->Commit();
MessageBox::Show("Dodano kolejnego zawodnika do rodziny: " + txtZawodnicyRodzina->Text + ".", "Wykonano.", MessageBoxButtons::OK, MessageBoxIcon::Information);
}
catch (Exception^ komunikat2){
MessageBox::Show(komunikat2->Message);
transakcja2->Rollback();
MessageBox::Show("Wystąpił błąd podczas dodawania zawodnika.", "UWAGA!", MessageBoxButtons::OK, MessageBoxIcon::Error);
}
PolaczBaze2->Close();
/*DODANIE ZAWODNIKA DO ISTNIEJACEJ RODZINY*/
MySqlConnection^ PolaczBaze2A = gcnew MySqlConnection(konfiguracja_sql);
MySqlCommand^ zapytanie2A = PolaczBaze2A->CreateCommand();
MySqlTransaction^ transakcja2A;
PolaczBaze2A->Open();
transakcja2A = PolaczBaze2A->BeginTransaction(IsolationLevel::ReadCommitted);
zapytanie2A->Connection = PolaczBaze2A;
zapytanie2A->Transaction = transakcja2A;
try{
zapytanie2A->CommandText = "INSERT INTO familiada_2017.zawodnicy (imie, nazwisko, plec, data_ur, pokrewienstwo, wiek, szacowany_czas, uwagi, dokumenty, rodzina, grupa) VALUES ('" + txtZawodnicyImie->Text + "', '" + txtZawodnicyNazwisko->Text + "','" + plec + "','" + txtZawodnicyData->Text + "', '" + txtZawodnicyPokrewienstwo->Text + "', '" + wiek + "', '" + txtZawodnicyCzas->Text + "', '" + uwagi + "', '" + dokumenty + "', '" + Convert::ToString(id_rodziny) + "', , '" + Convert::ToString(idgrupy) + "');";
zapytanie2A->ExecuteNonQuery();
transakcja2A->Commit();
MessageBox::Show("Dodano zawodnika: " + txtZawodnicyImie->Text + " " + txtZawodnicyNazwisko->Text + ".", "Wykonano.", MessageBoxButtons::OK, MessageBoxIcon::Information);
}
catch (Exception^ komunikat2A){
MessageBox::Show(komunikat2A->Message);
transakcja2A->Rollback();
MessageBox::Show("Wystąpił błąd podczas dodawania zawodnika.", "UWAGA!", MessageBoxButtons::OK, MessageBoxIcon::Error);
}
PolaczBaze2A->Close();
}
pokaz_siatke("zawodnicy");