Problem z SQL
Ostatnio zmodyfikowano 2017-04-23 12:50
AndySheppard Temat założony przez niniejszego użytkownika |
Problem z SQL » 2017-04-23 09:03:06 Witam forumowiczów! Mam program, który łączy się z bazą danych w której są dwie tabele "pracownicy" i "godziny". Problem polega z przyciskiem modyfikuj. Gdy chcę zmienić dane np. pracownika czy też godzin przypisanych do tego pracownika to w tabeli pracownicy zostają zmienione dane, ale natomiast w tabeli godziny zostaje dodawany cały czas nowy rekord. Chodzi o to by program modyfikował dany rekord do którego jest przypisany pracownik_id. Przycisk modyfikuj: private: System::Void btnPModyfikuj_Click( System::Object ^ sender, System::EventArgs ^ e ) { if( txtPImie->Text->Length < 2 || txtPNazwisko->Text->Length < 3 || txtPLogin->Text->Length <= 3 ) { MessageBox::Show( "Uzupełnij dane!!!" ); } else { uzytkownik_typ(); MySqlConnection ^ laczBaze = gcnew MySqlConnection( konfiguracja ); MySqlCommand ^ polecenie = laczBaze->CreateCommand(); MySqlTransaction ^ transakcja; laczBaze->Open(); transakcja = laczBaze->BeginTransaction( IsolationLevel::ReadCommitted ); polecenie->Connection = laczBaze; polecenie->Transaction = transakcja; try { polecenie->CommandText = "SELECT * FROM godziny WHERE uzytkownik_id = " + id_rekordu + ";"; MySqlDataReader ^ wynik = polecenie->ExecuteReader(); wynik->Close(); polecenie->CommandText = "UPDATE uzytkownik SET imie='" + txtPImie->Text + "', nazwisko='" + txtPNazwisko->Text + "', uzytkownik_nazwa='" + txtPLogin->Text + "', pracownik=" + pracownik_typ + " WHERE uzytkownik_id = " + id_rekordu + ";"; polecenie->ExecuteNonQuery(); if( wynik->HasRows == true && chbPPracownik->Checked == true ) { polecenie->CommandText = "UPDATE godziny SET pon_od = '" + txtP1p->Text + "', pon_do='" + txtP1k->Text + "', wt_od='" + txtP2p->Text + "', wt_do='" + txtP2k->Text + "', sr_od='" + txtP3p->Text + "', sr_do='" + txtP3k->Text + "', czw_od='" + txtP4p->Text + "', czw_do='" + txtP4k->Text + "', pt_od='" + txtP5p->Text + "', pt_do='" + txtP5k->Text + "', sob_od='" + txtP6p->Text + "', sob_do='" + txtP6k->Text + "' WHERE godziny_id=" + id_rekordu + ", uzytkownik_id=" + id_rekordu + ";"; polecenie->ExecuteNonQuery(); } else if( chbPPracownik->Checked == true ) { polecenie->CommandText = "INSERT INTO godziny SET uzytkownik_id=" + id_rekordu + ", pon_od = '" + txtP1p->Text + "', pon_do='" + txtP1k->Text + "', wt_od='" + txtP2p->Text + "', wt_do='" + txtP2k->Text + "', sr_od='" + txtP3p->Text + "', sr_do='" + txtP3k->Text + "', czw_od='" + txtP4p->Text + "', czw_do='" + txtP4k->Text + "', pt_od='" + txtP5p->Text + "', pt_do='" + txtP5k->Text + "', sob_od='" + txtP6p->Text + "', sob_do='" + txtP6k->Text + "';"; polecenie->ExecuteNonQuery(); } MessageBox::Show( "Dane uzytkownika zostały pomyślnie zmodyfikowne" ); transakcja->Commit(); } catch( Exception ^ komunikat ) { MessageBox::Show( komunikat->Message ); transakcja->Rollback(); } laczBaze->Close(); } pokaz_siatke(); }
|
|
pekfos |
» 2017-04-23 12:50:47 MySqlDataReader ^ wynik = polecenie->ExecuteReader(); wynik->Close(); |
Jesteś pewien, że wynik->hasRows ma właściwą wartość po wywołaniu Close()? W końcu nie możesz czytać po zamknięciu obiektu. |
|
« 1 » |