• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

MySQL nie aktualizuje rekordu

Object Storage Arubacloud
0 głosów
131 wizyt
pytanie zadane 3 stycznia 2018 w SQL, bazy danych przez smg Użytkownik (760 p.)

Mam pewien problem z aktualizacją pola w bazie danych. W Visual Studio stworzyłem apkę bazo-danową w C++, gdzie można dodawać urządzenia wraz z podaniem informacji o nich (nazwa, nr seryjny, właściciel). Żeby wybrać właściciela danego urządzenia należy go wybrać z listy dostępnych podmiotów. Po wybraniu podmiotu klika się na "Przypisz podmiot do urządzenia" i wtedy nazwa podmiotu pokazuje się w textBoxie.

Do tego momentu wszystko działa ok. Wybieram podmiot, jego nazwa się pojawia i mogę dodać takie urządzenie do bazy. Problem się pojawia kiedy próbuję zaktualizować dane już istniejącego urządzenia. Tzn. Jeżeli próbowałbym zmienić "właściciela" poprzez wpisanie z klawiatury to wszystko działa prawidłowo. Z kolei jeśli próbuję poprzez wciśnięcie przycisku do którego wpisałem następujący kod:

tbUWlasciciel->Text = tbPNazwa->Text;

To po kliknięciu na "modyfikuj" nic się nie dzieje. Żeby było jasne o co mi chodzi nagrałem, krótki film na którym widać o co chodzi. Link poniżej:

FILM

Kod do przycisku modyfikuj poniżej:

 

private: System::Void btnUModyfikuj_Click(System::Object^  sender, System::EventArgs^  e) {
			 if (tbUNazwa->Text->Length < 3 || tbUSeryjny->Text->Length < 3 || tbUWlasciciel->Text->Length < 3 || cbUTyp->Text->Length < 3 || cbUSerwisant->Text->Length < 3){
				 MessageBox::Show("Uzupełnij brakujące dane !");
			 }
			 else{
				 MySqlConnection^ laczBaze = gcnew MySqlConnection(konfiguracja);
				 MySqlCommand^ polecenie = laczBaze->CreateCommand();
				 MySqlTransaction^ transakcja;
				 laczBaze->Open();

				 transakcja = laczBaze->BeginTransaction(IsolationLevel::ReadCommitted);  //odczyt zatwierdzonych danych
				 polecenie->Connection = laczBaze;
				 polecenie->Transaction = transakcja;

				 if (rbUNaprawa->Checked == true) kategoria = "naprawa";
				 if (rbUPrzeglad->Checked == true) kategoria = "przegląd";
				 if (rbUusluga->Checked == true) kategoria = "usługa";

				 try{
					 polecenie->CommandText = "UPDATE urzadzenie SET nazwa='" + tbUNazwa->Text + "', nr_seryjny='" + tbUSeryjny->Text + "', wlasciciel='"+ tbUWlasciciel->Text +"',typ='" + cbUTyp->Text + "',serwisant='" + cbUSerwisant->Text + "', kategoria='" + kategoria + "', opis='"+rtbUOpis->Text+"' WHERE urzadzenie_id="+id_rekordu+" ";
					 polecenie->ExecuteNonQuery(); 
					 transakcja->Commit(); // rozpoczecie transakcji mysql
				 }
				 catch (Exception^ komunikat){
					 MessageBox::Show(komunikat->Message);
					 transakcja->Rollback(); //cofanie transakcji
				 }
				 laczBaze->Close();
			 }
			pokaz_siatke();
}

 

2 odpowiedzi

0 głosów
odpowiedź 3 stycznia 2018 przez Wiciorny Ekspert (270,910 p.)
A czy przypadkiem: transakcje nie rozpoczyna się od "begin"? Commit, to jest po wykonaniu transakcji. Tak przynajmniej jest w Javie. przy pracy z MySQL
komentarz 4 stycznia 2018 przez smg Użytkownik (760 p.)
Tylko czy wtedy w jednym przypadku by działało, a w drugim nie? Sprawdzę wieczorem.
komentarz 4 stycznia 2018 przez smg Użytkownik (760 p.)

Tylko, że ja mam przecież linijkę odpowiedzialną za rozpoczęcie transakcji:

transakcja = laczBaze->BeginTransaction(IsolationLevel::ReadCommitted);

 

0 głosów
odpowiedź 4 stycznia 2018 przez smg Użytkownik (760 p.)
Ktoś ma jeszcze jakiś pomysł?

Podobne pytania

0 głosów
2 odpowiedzi 297 wizyt
pytanie zadane 3 lutego 2018 w SQL, bazy danych przez Dynamic Bywalec (2,910 p.)
0 głosów
1 odpowiedź 216 wizyt
0 głosów
1 odpowiedź 639 wizyt
pytanie zadane 27 stycznia 2018 w PHP przez halotelefonek Bywalec (2,410 p.)

92,632 zapytań

141,499 odpowiedzi

319,874 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...