Садржај
1 Релационе базе података
1.0 1 Релационе базе података
1.0 2 Релационе базе података - квиз
1.0 3 Веза један према више
1.0 4 Веза један према више - квиз
1.0 5 Веза више према више
1.0 6 Веза више према више - квиз
1.0 7 Алат за пројектовање
1.0 8 СУБП
1.0 9 Креирање базе на други начин
1.0 10 Још неке SQL команде
1.1 1 Упит SELECT
1.1 2 Упит SELECT - упит из једне табеле - задаци
1.1 3 Упит SELECT - упит из једне табеле - квиз
1.1 4 Упит SELECT - функције и подупити - задаци
1.1 5 Упит SELECT - функције и подупити - квиз
1.1 6 Упит SELECT - спајање - задаци
1.1 7 Упит SELECT - спајање - квиз
1.1 8 Упит SELECT - нерешени задаци
1.2 1 База података за библиотеку - креирање базе
1.2 2 БП Библиотека - Упит SELECT - упит из једне табеле - задаци
1.2 3 БП Библиотека - Упит SELECT - упит из једне табеле - нерешени задаци
1.2 4 БП Библиотека - Упит SELECT - спајање - задаци
1.2 5 БП Библиотека - Упит SELECT - спајање - нерешени задаци
1.2 6 БП Библиотека - Упит SELECT - функције и подупити - задаци
1.2 7 БП Библиотека - Упит SELECT - функције и подупити - нерешени задаци
1.3 1 База података за возачке дозволе - креирање базе
1.3 2 БП Возачке дозволе - Дијаграм и подаци - практичан рад
1.3 3 БП Возачке дозволе - Упит SELECT - задаци
1.3 4 БП Возачке дозволе - Упит SELECT - нерешени задаци
1.4 1 БП Филмови - Креирање базе - практични рад
1.4 2 БП Филмови - Дијаграм и подаци - практични рад
1.4 3 БП Филмови - Упит SELECT - задаци
1.4 4 БП Филмови - Упит SELECT - нерешени задаци
2 Писање програма унутар система за управљање базама података
2.0 1 Процедуре и команда INSERT
2.0 2 Процедуре и команде UPDATE и DELETE
2.0 3 Процедуре и команде INSERT, UPDATE, и DELETE - квиз
2.0 4 Процедуре и тестирање програма
2.0 5 Процедуре и упит SELECT
2.0 6 Процедуре и курсор за упит SELECT
2.1 1 Функције и упит SELECT
2.1 2 Процедуре и функције са упитом SELECT - квиз
2.1 3 Процедуре и функције са упитом SELECT из једне табеле - задаци
2.1 4 Процедуре и функције са упитом и групним функцијама - задаци
2.1 5 Процедуре и функције са упитом SELECT са спајањем табела - задаци
2.1 6 Процедуре и функције са упитом - нерешени задаци
2.1 7 Формат XML
2.2 1 База података за библиотеку - Процедуре, функције и поређење различитих решења
2.2 2 Процедуре, функције и поређење различитих решења
2.2 3 Процедуре и функције са упитом SELECT из једне табеле - вежбање
2.2 4 Процедуре и функције са упитом SELECT са спајањем табела - вежбање
2.2 5 Процедуре и функције са упитом и групним функцијама и подупитима - вежбање
2.2 6 Процедуре и функције са упитом SELECT - нерешени задаци
2.3 1 База података за возачке дозволе - процедуре и функције са упитом SELECT - вежбање
2.3 2 База података за возачке дозволе - процедуре и функције - нерешени задаци
2.4 1 База података за филмове - процедуре и функције са упитом SELECT - вежбање
2.4 2 База података за филмове - процедуре и функције - нерешени задаци
3 Писање програма у програмским језицима вишег нивоа
3.0 1 Писање програма у развојном окружењу Visual Studio
3.0 2 Писање програма у развојном окружењу Visual Studio - практичан рад
3.0 3 Писање програма у развојном окружењу Visual Studio - процедуре
3.0 4 Писање програма у развојном окружењу Visual Studio - квиз
3.1 1 Угнежђени упит SELECT унутар програма
3.1 2 Угнежђени упит SELECT унутар програма - задаци
3.1 3 Позив процедуре унутар програма
3.1 4 Позив креиране функције унутар програма
3.1 5 Програм са угнежђеним командама у развојном окружењу Visual Studio - квиз
3.1 6 Програм са угнежђеним упитом SELECT из једне табеле - вежбање
3.1 7 Програм са угњежђеним упитом и групним фунцкијама - вежбање
3.1 8 Програм са угнежђеним упитом SELECT са спајањем табела - вежбање
3.1 9 Програм са класом
3.1 10 Програм са угнежђеним упитом - нерешени задаци
3.1 11 Програм са угнежђеним командама INSERT, UPDATE, и DELETE
3.2 1 База података за библиотеку - програм са угнежђеним упитом SELECT из једне табеле - задаци
3.2 2 База података за библиотеку - програм са угнежђеним упитом SELECT - вежбање
3.2 3 База података за библиотеку - програм са угнежђеним упитом - нерешени задаци
3.3 1 База података за возачке дозволе - програм са угнежђеним упитом SELECT - вежбање
3.3 2 База података за возачке дозволе - програм са угнежђеним упитом - нерешени задаци
3.4 1 База података за филмове - програм са угнежђеним упитом SELECT - вежбање
3.4 2 База података за филмове - програм са угнежђеним упитом - нерешени задаци
4 Друга софтверска решења - СУБП Oracle
4.0 1 Oracle Apex и језик PL/SQL
4.0 2 Језик PL/SQL - задаци
4.0 3 Језик PL/SQL - квиз
4.0 4 Језик PL/SQL – нерешени задаци
4.0 5 Наредбе гранања
4.0 6 Наредбе гранања - нерешени задаци
4.0 7 Наредбе циклуса
4.0 8 Наредбе циклуса - нерешени задаци
4.1 1 База података за библиотеку - практичан рад
4.1 2 Наредба SELECT INTO
4.1 3 Наредба SELECT INTO - zadaci
4.1 4 Наредба SELECT INTO - квиз
4.1 5 Наредба SELECT INTO - вежбање
4.1 6 Наредба SELECT INTO - нерешени задаци
4.2 1 Курсори - Узимање података из више редова
4.2 2 Курсори - задаци
4.2 3 Различити начини да се реши проблем
4.2 4 Курсори - нерешени задаци
4.2 5 Курсор са параметром
4.2 6 Курсор са параметром - задаци
4.2 7 Курсор са параметром - нерешени задаци
4.2 8 Курсори - квиз
4.2 9 Курсори и гранање - задаци
4.2 10 Курсори - вежбање
4.2 11 Тренутне позајмице члана - пример
4.2 12 Спискови књига - пример
4.3 1 Процедуре и функције у СУБП-у Oracle Apex
4.3 2 Процедуре и функције - задаци
4.3 3 Процедуре и функције - нерешени задаци
4.3 4 Позајмице једне књиге - пример
4.3 5 Тренутне позајмице - пример
4.3 6 Процедуре и друге SQL команде
4.3 7 Тригери
4.3 8 Списак свих објеката у бази података
4.4 1 Креирање апликације помоћу алата App Builder
4.4 2 Додатне опције App Builder алата
4.4 3 Покретање апликације
4.4 4 Креирање нових страница у апликацији
4.4 5 Покретање раније креиране процедуре
4.4 6 Алат App Builder и XML
4.5 1 База података за салон аутомобила у СУБП-у Oracle Apex - 1. део
4.5 2 База података за салон аутомобила у СУБП-у Oracle Apex - 2. део
4.5 3 База података за салон аутомобила у СУБП-у Oracle Apex - 3. део
4.5 4 База података за продавницу - нерешени пројектни рад

Програм са угнежђеним командама INSERT, UPDATE, и DELETE

Видели смо како се креирају програми са угњежденим упитом SELECT. Унутар програма могу да се користе и команде за унос, измену и брисање података.

Креираћемо програм у којем можемо да уносимо, мењамо и бришемо податке из табеле autori.

Када се покрене развојно окружење Visual Studio Community, потребно је да се креира нови пројекат избором опције Create a new project. Изабрани језик треба да буде С#, а врста пројекта Windows Forms App, апликација са графичким корисничким интерфејсом.

Пројекту треба да додамо базу података. У прозору Solution Explorer је потребно да се кликне десни тастер миша над називом пројекта, а затим да се изабере Add/Existing Item… са менија који се појави. База података коју смо креирали се већ налази на рачунару и потребно је пронаћи и изабрати фајл Biblioteka_knjige.mdf, у којем је сачувана. Тачна локација може да се провери у систему SQL Server Management Studio, у којем смо креирали базу.

За приказ резултата позива процедуре из релационе базе података ћемо користити контролу DataGridView, коју можемо да превучемо из прозора Toolbox. Потребна су нам и три поља за унос података о аутору, идентификациони број, име и презиме, као и три дугмета за унос, измену и брисање.

Класе које су нам потребне за читање података из базе и њихов приказ у програму се налазе у именском простору System.Data.SqlClient, који није аутоматски укључен у нови пројекат. Потребно је да додамо следећи ред на врх документа са програмским кодом.

using System.Data.SqlClient;

Приликом писања програма потребно је да се употреби конекциони стринг који је формиран у ранијим примерима, а односи се на повезивање програма на базу података Biblioteka_knjige.mdf. У решењу задатака стоји KONEKCIONI_STRING на месту где се очекује конекциони стринг.

Приликом покретања програма, у DataGridView ће се учитати табела из базе података. Двоструки клик било где на дизајн апликације, а ван контрола које смо поставили, даје оквир за писање реакције на догађај Form1_Load, где наводимо наредбе које ће се извршити при самом покретању програма. Ван догађаја, тако да можемо да их користимо на више места у програму, декларисаћемо објекте класа SqlDataAdapter, SqlConnection, SqlCommand и DataTable. На следећој слици се види програмски код који је потребан да се приликом покретања програма прикаже садржај целе табеле.

../_images/slika_314a.jpg

Све је спремно да се покрене апликација кликом на дугме Start и да се тестира прва опција коју смо испрограмирали. На следећој слици може да се види покренут програм.

../_images/slika_314b.jpg

Програм можемо да зауставимо тако што затворимо прозор у којем је покренут и вратимо се у развојно окружење. Како приказ садржаја табеле желимо да позовемо сваки пут када се догоди нека измена са подацима, програмски код који пише унутар догађаја Form1_Load можемо да издвојимо у засебну методу коју ћемо позивати на неколико места. Следи измењени програмски код.

private void PrikaziTabelu()
    {
        con.Open();
        dt = new DataTable();
        da = new SqlDataAdapter("SELECT * FROM autori", con);
        da.Fill(dt);
        dataGridView1.DataSource = dt;
        con.Close();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        PrikaziTabelu();
    }

Програмираћемо реакције на догађај када се кликне на дугме. Потребно је да се вратимо на картицу Form1.cs [Design] и да урадимо двоклик на дугме. Поступак поновимо и за преостала два дугмета. Поред тога, потребан нам је догађај када корисник програма обележи један ред. У прозору Properties проверимо да је изабран објекат dataGridView1, а затим кликнемо на муњу, па урадимо двоструки клик десно од назива догађаја RowHeaderMouseClick.

../_images/slika_314c.jpg

Имамо спреман оквир за писање програмског кода.

../_images/slika_314d.jpg

Следи програмски код са угњежденом командом INSERT. Користимо методу AddWithValue да повежемо параметре са конкретним вредностима пре него што се команда покрене позивом меторе ExecuteNonQuery.

private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "")
        {
            cmd = new SqlCommand("INSERT INTO autori " +
                "VALUES(@id, @ime, @prezime)", con);
            con.Open();
            cmd.Parameters.AddWithValue("@id", textBox1.Text);
            cmd.Parameters.AddWithValue("@ime", textBox2.Text);
            cmd.Parameters.AddWithValue("@prezime", textBox3.Text);
            cmd.ExecuteNonQuery();
            con.Close();
            PrikaziTabelu();
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
        }
        else
            MessageBox.Show("Popunite sva tri polja za unos!");
    }

Можемо да апликацију покренемо кликом на дугме Start и да тестирамо опцију уноса. На следећој слици се види покренут програм. Унећемо аутора Велимира Радловачког.

../_images/slika_314e.jpg

Након што се кликне на дугме, може да се види да је Велимир Радловачки сада у табели autori.

../_images/slika_314f.jpg

Програм ћемо да зауставимо и да се вратимо у развојно окружење. Следи програмски код са угњежденом командом DELETE. Да бисмо знали ког аутора бришемо, потребно је да прочитамо податке из реда који је корисник обележио. Индекс реда који је корисник обележио се може прочитати помоћу e.RowIndex, који потом можемо да искористимо за приступ подацима у том реду и то првој ћелији, односно идентификацином броју, помоћу Cells[0], а затим и имену и презимену у наредним ћелијама истог реда помоћу Cells[1] и Cells[2]. Идентификациони број који том приликом прочитамо ћемо употребити када формирамо команду DELETE.

    int id = 0;
        private void dataGridView1_RowHeaderMouseClick(...)
        {
            id =
Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
            textBox1.Text = id.ToString();
            textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
            textBox3.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (id != 0)
            {
                cmd = new SqlCommand("DELETE FROM autori WHERE id_autora=@id", con);
                con.Open();
                cmd.Parameters.AddWithValue("@id", id);
                cmd.ExecuteNonQuery();
                con.Close();
                PrikaziTabelu();
                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
            }
            else
                MessageBox.Show("Oznacite red koji zelite da obrisete!");
        }

Можемо да апликацију покренемо кликом на дугме Start и да тестирамо опцију брисања.

../_images/slika_314g.jpg

Програм ћемо да зауставимо и да се вратимо у развојно окружење. Следи програмски код са угњежденом командом UPDATE.

private void button2_Click(object sender, EventArgs e)
{
    if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "")
    {
        cmd = new SqlCommand("UPDATE autori " +
        "SET id_autora=@id, ime=@ime, prezime=@prezime " +
        "WHERE id_autora=@id", con);
        con.Open();
        cmd.Parameters.AddWithValue("@id", textBox1.Text);
        cmd.Parameters.AddWithValue("@ime", textBox2.Text);
        cmd.Parameters.AddWithValue("@prezime", textBox3.Text);
        cmd.ExecuteNonQuery();
        con.Close();
        PrikaziTabelu();
        textBox1.Text = "";
        textBox2.Text = "";
        textBox3.Text = "";
    }
    else
        MessageBox.Show("Oznacite red koji zelite da izmenite!");
}

Апликацију можемо да покренемо кликом на дугме Start и да тестирамо опцију измене података. Рецимо да је, на пример, у базу података унет аутор Цеца Радловачки, али не желимо да у бази чувамо надимак, него пуно име.

../_images/slika_314h.jpg

Када се означи Цеца Радловачки, у пољима за унос текста може да се унесе измењено име Светлана које ће бити сачувано у бази након клика на дугме за измену.

../_images/slika_314i.jpg

Унутар програмског кода смо директно користили угњеждене команде INSERT, UPDATE и DELETE. Могли смо и да позивамо процедуре које имамо сачуване у бази података за унос, измену и брисање.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+