Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z SQL

Ostatnio zmodyfikowano 2017-04-23 12:50
Autor Wiadomość
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:
C/C++
private: System::Void btnPModyfikuj_Click( System::Object ^ sender, System::EventArgs ^ e ) {
    // modyfikacja danych uzytkownika
    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();
}
P-160394
pekfos
» 2017-04-23 12:50:47
C/C++
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.
P-160401
« 1 »
  Strona 1 z 1