comboBox [wybór z bazy danych]

0

Mam taki problem, nie wiem jak napisać warunek, który po wyborze z listy comboBox jedna z 2 możliwości (lekarz, laboratorium) wrzuci dane do odpowiedniej tabeli(lekarz lub laboratorium) z bazy danych. Czy mógłby mi ktoś podpowiedzieć jak to ma wyglądać? bo jak na razie to wrzuca mi wszystko do jednej tabeli. Bardzo proszę o pomoc:)

0
private: System::Void comboBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) 
{
           if(comboBox1->Text == "lekarz")
                do something...
}
1

Sid_ - wydawało mi się że parametrem domyślnym w tym dziale, jeśli chodzi o język programowania, jest C# a nie C++/Cli ;)

@autor - jakiej tabelki? Masz połączenie z bazą danych?

0

aaa.... sorka... W C# będzie miej wiecej tak:) :

  private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.Text == "lekarz") 
                      do something...
        }

ale to chyba masz... Sprecyzuj pytanie...

0

zakładam że używasz czystego SQL'a bez procedur składowanych i wpisujesz ta sama wartość ale do rożnych tabel.

String sSQL = String.Format("INSERT INTO {0}(kolumna) VALUES(wartosc)", combobox.Text == "lekarz"?"TABLEA_LEKARZ":"TABLEA_LABOLATORIUM")
0

moja składnia wygląda tak

if (comboBox1.Text == "laboratorium")
{
SqlCommand comm = new SqlCommand("insert into Labolatorium values(@imie, @nazwisko, @stanowisko, @nr_pozwolenia, @haslo, @nick)", Baza.conn);
comm.Parameters.Add("@imie", SqlDbType.VarChar, 15).Value = textBoxImie.Text;
comm.Parameters.Add("@nazwisko", SqlDbType.VarChar, 30).Value = textBoxNazwisko.Text;
comm.Parameters.Add("@stanowisko", SqlDbType.VarChar, 40).Value = textBoxStanowisko.Text;
comm.Parameters.Add("@nr_pozwolenia", SqlDbType.VarChar, 20).Value = textBoxPozwolenie.Text;
comm.Parameters.Add("@haslo", SqlDbType.VarChar, 30).Value = textBoxHaslo.Text;
comm.Parameters.Add("@nick", SqlDbType.VarChar, 30).Value = textBoxLogin.Text;
comm.ExecuteNonQuery();

        }

       else
        {
            SqlCommand comm1 = new SqlCommand("insert into Lekarz values(@imie, @nazwisko, @stanowisko, @nr_pozwolenia, @haslo, @nick)", Baza.conn);
            comm1.Parameters.Add("@imie", SqlDbType.VarChar, 15).Value = textBoxImie.Text;
            comm1.Parameters.Add("@nazwisko", SqlDbType.VarChar, 30).Value = textBoxNazwisko.Text;
            comm1.Parameters.Add("@stanowisko", SqlDbType.VarChar, 40).Value = textBoxStanowisko.Text;
            comm1.Parameters.Add("@nr_pozwolenia", SqlDbType.VarChar, 20).Value = textBoxPozwolenie.Text;
            comm1.Parameters.Add("@haslo", SqlDbType.VarChar, 20).Value = textBoxHaslo.Text;


            comm1.Parameters.Add("@nick", SqlDbType.VarChar, 20).Value = textBoxLogin.Text;
            comm1.ExecuteNonQuery();
        }

tylko, że wywala mi błąd, przy comm.ExecuteNonQuery(); ->Insert Error: Column name or number of supplied values does not match table definition.
Z tym, że sprawdziłam czy dobrze przepisałam te varchar oraz ilości znaków jakie założyłam i wszystko się zgadza. Nie wiem gdzie jest błąd. Widzi ktoś może?

p.s. po pierwszej odpowiedzi sobie poradziłam miałam dosłownie troszeczkę C++;-) w każdym razie dziękuję za pomoc:)

0

jesteś pewna że tabele w bazie wyglądają właśnie w ten sposób w jaki budujesz insert-a?

może jakaś kolumna została pominięta, i na to bym stawiał.

0

Za "insert into Lekarz" trzeba podać w nawiasach nazwy kolumn w tabeli, jeśli wartości którejkolwiek z nich nie podaje się na liście values. Obstawiam, że w tym przypadku pomijana jest właśnie kolumna PK.

0

rzeczywiście, nie sądziłam, że to może mieć wpływ. Dzięki wielkie dark_astray :)

0

w dalszej części używam takiej samej funkcji i znów wywala mi błąd, przejrzałam chyba ze 100 razy czy się zgadzają dane z bazy i z kodu. Może wam uda się wypatrzeć błąd.

Tutaj jest fragment z bazy:

create table Badanie(data datetime, ALAT varchar(10),AspAT varchar(10),Bialkocalkowite varchar(10),Bilirubinacalkowita varchar(10),Cholesterol varchar(10),id_lekarza int not null, id_pracownika int not null,id_badania int identity primary key)

a tu kod:

SqlCommand dan = new SqlCommand("insert into Badanie values((@data), (@ALAT),(@AspAT),(@Bialkocalkowite),(@Bilirubinacalkowita),(@cholesterol),(@id_lekarza),(@id_pracownika))", Baza.conn);
dan.Parameters.Add("@data", SqlDbType.VarChar, 10).Value = textBox1.Text;
dan.Parameters.Add("@ALAT", SqlDbType.VarChar, 10).Value = textBox2.Text;
dan.Parameters.Add("@AspAT", SqlDbType.VarChar, 10).Value = textBox3.Text;
dan.Parameters.Add("@Bialkocalkowite", SqlDbType.VarChar, 10).Value = textBox4.Text;
dan.Parameters.Add("@Bilirubinacalkowita", SqlDbType.VarChar, 10).Value = textBox5.Text;
dan.Parameters.Add("@Cholesterol", SqlDbType.VarChar, 10).Value = textBox6.Text;
dan.Parameters.Add("@id_lekarza", SqlDbType.Int).Value = textBox7.Text;
dan.Parameters.Add("@id_pracownika", SqlDbType.Int).Value = textBox8.Text;

        dan.ExecuteNonQuery();
0

A możesz podać treść tego błędu wtedy będzie łatwiej i szybciej.

EDIT

przyjrzałem się zapytanie i aż mnie zatkało:

values((@data), (@ALAT),(@AspAT),(@Bialkocalkowite),(@Bilirubinacalkowita),(@cholesterol),(@id_lekarza),(@id_pracownika))
po co aż tyle nawiasów ?

0

już sobie poradziłam, z tymi nawiasami to była jedna z prób czy aby to nie spowoduje, że zacznie działać...

0

jesli PK nie jest autoinkrementowalny to takze jawnie trzeba go podac
oczywiscie mozna nie wymieniac listy kolumn w insert, ale dobra praktyka jest aby to robic, bo gry podamy wartosci w zlej kolejnosci lub pozniej dodany kolumny to bedzie klopot

0

wiem, właśnie z powodu tego było sporo problemów:) dzięki wszystkim za pomoc:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1