Edytowanie wierszy w DataGridView

0

Hej
Mam założoną bazę Oracle i tabele w niej, którą ładuje w datagridview. Chciałbym zrobić coś takiego, że po kliknięciu podwójnym w dany wiersz otwiera mi się nowe okno z textboxami uzupełnionymi tak jak ten wiersz. Wtedy zmieniam to co mnie interesuje i zapisuje zmianę. Może mi ktoś podpowiedzieć jak to powinno wyglądać? Może jakiś przykładowy kod? Dopiero się uczę i łatwiej mi jest na przykładzie.

0

Tworzysz okno z tekstboxami, pobierasz dane z zaznaczonego rekordu, wypełniasz tekstboxy i wyświetlasz okno, zapisujesz zmiany do bazy i w programie.
Będziesz miał konkretny problem i nie znajdziesz rozwiązania w google, dopiero zapytaj.

0

Czy tu jest wszystko ok? bo nie wiem czy poprawnie napisałem formę UPDATE? może powinno być coś więcej?

private void button1_Dodaj_Click(object sender, EventArgs e)
        {
            Oracle.ManagedDataAccess.Client.OracleConnection conn = new Oracle.ManagedDataAccess.Client.OracleConnection("User ID=BAZA;Password=MojeHaslo;");
            Oracle.ManagedDataAccess.Client.OracleCommand cmd = new Oracle.ManagedDataAccess.Client.OracleCommand();

            conn.Open();
            cmd = new Oracle.ManagedDataAccess.Client.OracleCommand(" UPDATE INTO BAZA SET MIEJSCOWOŚĆ='" + textBox1_Miejscowość.Text + "', ULICA='" + textBox2_Ulica.Text + "', NUMER='" + textBox3_Numer.Text + "' WHERE MIEJSCOWOŚĆ='" + ___form.label1_Miejscowość.Text +"', ULICA='" +___form.label2_Ulica.Text +"', NUMER='" + ___form.label3_Numer.Text + "'", conn);
            
        }
1

Lepiej by było wyszukiwać rekord po ID

0

Ok wskazówka na przyszłość ale co z tym. Tu jest coś źle? Czegoś brakuje? Program nie widzi żadnego erroru ale zmiany nie zapisują się.

0

Bo nie wykonałeś tego. Dodaj

cmd.ExecuteNonQuery();
conn.Close()

No i w ogóle to powinno być w bloku try catch.

0

Kumam. Będę w domu to od razu sprawdzę. Dzięki

0
ORA-00903: invalid table name
0

No i co to znaczy?
Jak nie wiemy to wpisujemy w translator.

0

Tak poprawiłem całość ale dalej coś mam nie tak.

 private void button1_Dodaj_Click(object sender, EventArgs e)
        {
            Oracle.ManagedDataAccess.Client.OracleConnection conn = new Oracle.ManagedDataAccess.Client.OracleConnection("User ID=BAZA;Password=MojeHaslo;");
            Oracle.ManagedDataAccess.Client.OracleCommand cmd = new Oracle.ManagedDataAccess.Client.OracleCommand();

            try
            {
                conn.Open();
                cmd = new Oracle.ManagedDataAccess.Client.OracleCommand(" UPDATE INTO BAZA SET MIEJSCOWOŚĆ='" + textBox1_Miejscowość.Text + "' , ULICA='" + textBox2_Ulica.Text + "' , NUMER='" + textBox3_Numer.Text + "' WHERE MIEJSCOWOŚĆ='" + ___form.label1_Miejscowość.Text + "' , ULICA='" + ___form.label2_Ulica.Text + "' , NUMER='" + ___form.label3_Numer.Text + "'", conn);

                cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
0

Coś nie tak czyli co?

0

wpisuje wartości w okienka i pokazuje się ten komunikat

ORA-00903: invalid table name
0

Zastanów się powoli co on może oznaczać, to nie jest trudne.

0

Tabela nazywa się BAZA, serwer tez nazwałem BAZA. Niepotrzebnie zdublowałem nazwę. To musi być problem z tym początkiem?

(" UPDATE INTO BAZA_ADRESOWA SET MIEJSCOWOŚĆ='" + tex......
0

Problem masz z nazwą tabeli.
Nie wiem jak to jest w oraclu ale wejdź do jakiegoś managera i wygeneruj sobie to zapytanie.
W SQL Server Management Studio mogę kliknąć PPM na Nazwę tabeli -> Script Table As -> Insert To -> New Table Window i od razu mam pełną nazwę typu INSERT INTO [Sample].[dbo].[Department]

A to nie robisz wcześniej jakiegoś selecta żeby pobrać tabelę do DataGridView? Jeśli tak to weź nazwę tabeli z tamtego zapytania.

0

Wszędzie korzystam z takiej nazwy. Mam dodawanie elementu, usuwanie i wszędzie działa a tu dalej coś mu nie pasuje.

0

Pokaż jak wygląda działający select czy tam coś innego na tej tabelce.

Wróć.

To jest

insert into nazwaTabeli

i

update nazwaTabeli

Wywal to into

0

Dodawanie na przykład wygląda tak i działa

private void button1_Dodaj_Click(object sender, EventArgs e)
        
            {
                Oracle.ManagedDataAccess.Client.OracleConnection conn = new Oracle.ManagedDataAccess.Client.OracleConnection("User ID=BAZA;Password=MojeHaslo;");
                Oracle.ManagedDataAccess.Client.OracleCommand cmd = new Oracle.ManagedDataAccess.Client.OracleCommand();
try
                {
                    conn.Open();
                    cmd = new Oracle.ManagedDataAccess.Client.OracleCommand(" INSERT INTO BAZA VALUES('" + textBox1_Miejscowość.Text + "','" + textBox2_Ulica.Text + "','" + textBox3_Numer.Text + "')", conn);
                    cmd.ExecuteNonQuery();
 }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
}
}
0

jak wywalam INTO to wyskakuje

ora-00933 sql command not properly ended
0

into wywalasz w update mam nadzieje?

0
private void button1_Dodaj_Click(object sender, EventArgs e)
        {
            Oracle.ManagedDataAccess.Client.OracleConnection conn = new Oracle.ManagedDataAccess.Client.OracleConnection("User ID=BAZA;Password=MojeHasło;");
            Oracle.ManagedDataAccess.Client.OracleCommand cmd = new Oracle.ManagedDataAccess.Client.OracleCommand();

            try
            {
                conn.Open();
                cmd = new Oracle.ManagedDataAccess.Client.OracleCommand(" UPDATE BAZA SET MIEJSCOWOŚĆ='" + textBox1_Miejscowość.Text + "', ULICA='" + textBox2_Ulica.Text + "', NUMER='" + textBox3_Numer.Text + "' WHERE MIEJSCOWOŚĆ='" + ___form.label1_Miejscowość.Text + "', ULICA='" + ___form.label2_Ulica.Text + "', NUMER='" + ___form.label3_Numer.Text + "'", conn);

                cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

i błąd

ora-00933 sql command not properly ended
1

Weź pomiędzy cmd.Open() i cmd.ExecuteNonQuery() daj string command = cmd.CommandText wyświetl to gdzieś i podaj tu.

Albo pod debugerem podejrzyj to.

2

Zamiast sklejać w taki sposób to zapytanie, użyj parametrów: http://docs.oracle.com/html/B28089_01/OracleParameterClass.htm już nawet string.Format byłby czytelniejszy...

0

Kolejny etap za nami. Zmieniliśmy kod, program nie wyrzuca błędu ale dalej nie pokazują się zmiany po ponownym wczytaniu bazy.

private void button1_Dodaj_Click(object sender, EventArgs e)
        {
            using (OracleConnection conn = new OracleConnection("User ID=BAZA;Password=MojeHaslo;"))
            {
                using (OracleCommand cmd = new OracleCommand())
                {

                    string sql = string.Format("UPDATE BAZA SET MIEJSCOWOŚĆ = :NewMIEJSCOWOSC, " +
                            "ULICA = :NewULICA, " +
                            "NUMER = :NewNUMER, " +
                            "POCZTA = :NewPOCZTA " +
                            "WHERE  MIEJSCOWOŚĆ = :OldMIEJSCOWOSC " +
                            "and ULICA = :OldULICA " +
                            "and NUMER = :OldNUMER " +
                            "and POCZTA = :OldPOCZTA");
                    cmd.CommandText = sql;
                    cmd.Connection = conn;
                    cmd.Parameters.Add("NewMIEJSCOWOSC", textBox1_Miejscowość.Text);
                    cmd.Parameters.Add("NewULICA", textBox2_Ulica.Text);
                    cmd.Parameters.Add("NewNUMER", textBox3_Numer.Text);
                    cmd.Parameters.Add("NewPOCZTA", textBox4_Poczta.Text);
                    cmd.Parameters.Add("OldMIEJSCOWOSC", ___form.label1_Miejscowość.Text);
                    cmd.Parameters.Add("OldULICA", ___form.label2_Ulica.Text);
                    cmd.Parameters.Add("OldNUMER", ___form.label3_Numer.Text);
                    cmd.Parameters.Add("OldPOCZTA", ___form.label4_Poczta.Text);

                    conn.Open();
                    cmd.ExecuteNonQuery();
                    conn.Close();
                }


            }
        }

Może ktoś ma pomysł?

0

Miałem na myśli żebyś wkleił zapytanie SQL a nie rozpisywał problem na dwa tematy. Zrób to co @dam1an napisał http://4programmers.net/Forum/Newbie/169950-edytowanie_wierszy_w_datagridview?p=1070800#id1070800 i pokaż to zapytanie oraz sprawdź pod bazą czy jak dasz SELECT * FROM BAZA WHERE /* GDZIE WHERE TAKI SAMO JAK W PRZYOADKU UPDATE */ to czy znajduje Ci w ogóle takie rekordy.

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