zasto ne upisuje u bazu mesece,dane i sate dobro?

4

zasto ne upisuje u bazu mesece,dane i sate dobro?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14263
  • Gde živiš: Niš

Napisano: 07 Okt 2014 20:31

Već u tri - četri teme razglabamo o osnovnim stvarima. Da si to proučio kako treba prvo bi tebi bilo mnogo lakše da skapiraš sve to, a zatim bi bilo mnogo lakše da se međusobno razumemo.

Nema ljutiš, ali ti je stvarno već dosta servirano. Ne smeš ni da pomisliš da ne želimo da ti pomognemo, a kamo li da tako nešto kažeš. Wink

Na pitanje kako da sklopiš string za naredbu si dobio odgovor. Ja mogu i da ti napišem to, ali će biti mnogo korisnije da to sam naučiš nego da koristiš gotov primer. Dakle, treba sam da pretražiš malo o tome i da izučiš to. Ako ti treba literatura, pa kaži, naći će se nešto. Nećemo mi uvek biti tu da rešavamo situaciju kada ti zapneš. Wink

Na kraju, stvarno treba da se podsetiš spojeva, barem INNER JOIN-a. Da si načisto sa tim kako on funkcioniše poslednja pitanja ne bi ni pitao, već bi ti sve bilo jasno i do sada bi već sredio problem koji je pred tobom. Wink

Dopuna: 07 Okt 2014 20:35

Na kraju, jedan od temelja pri radu sa bazom podataka jeste jednoznačna identifikacija entiteta (događaja, korisnika, spoja između njih itd). Ime definitivno ne određuje korisnika jednoznačno, što će reći da bi trebalo pored imena prikazati i redni broj (koje je primarni ključ u toj tabeli). To nosi sa sobom određene pogodnosti. U tom slučaju ne bi morao da vršiš pretragu i tražiš ID korisnika u bazi jer bi ti on bio dostupan u samom programu...



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Huskar
  • strukovni inzenjer elektrotehnike i racunarstva
  • Pridružio: 31 Maj 2008
  • Poruke: 881
  • Gde živiš: Kula

Mislim da sam sada okej spojio?
SELECT Tomislav.korisnik_ID, Tomislav.dogadjaj_ID, Tomislav.Datum FROM dogadjaji INNER JOIN (korisnici INNER JOIN Tomislav ON korisnici.ID = Tomislav.korisnik_ID) ON dogadjaji.ID = Tomislav.dogadjaj_ID;
Time dobijem da sam spojio iz dogadjaji ID(njegov primaryKey) i korisnici(njegov PK) sa tomislav tabelom i kolonama korisnikID i dogadjajID. To je ok?

A ovako sa dodatim korisnik i dogadjaj iz njihovih tabela, odnosno ta imena.

SELECT Tomislav.korisnik_ID, Tomislav.dogadjaj_ID, Tomislav.Datum, dogadjaji.dogadjaj, korisnici.korisnik FROM dogadjaji INNER JOIN (korisnici INNER JOIN Tomislav ON korisnici.ID = Tomislav.korisnik_ID) ON dogadjaji.ID = Tomislav.dogadjaj_ID;



offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14263
  • Gde živiš: Niš

Napisano: 07 Okt 2014 21:23

Ajde izvrši tu naredbu, pa uporedi njen rezultat sa tabelom Tomislav. Isto, jel da? Very Happy

Svrha spoja je spajanje informacija. Ako si spojio informacije koje su ti potrebne, što si te iste informacije uklonio u projekciji (izboru kolona nakon select klauzule)? Koja je svrha ove komande? Smile Generalno, spoj je dobar, ali si ukolnio potrebne informacije, tako da je beskoristan.

Ajmo da probamo da pojednostavimo. Tabele Korisnik i Događaj su zasebne i nezavisne. Kada ti treba informacija o događaju, tu informaciju tražiš u tabeli Događaj. Analogno je i za korisnike. Međutim, ako ti treba informacija o akciji (nazovimo je tako, misli se na događaj koji je izvršio korisnik), tu informaciju tražiš u spoju prve dve tabele. Kako spajaš? Tako što koristiš tabelu Tomislav kao posrednika u spoju (pošto je u pitanju MxN spoj, no da ne komplikujemoy to ćeš već razjasniti). Pored toga, tabela Tomislav čuva i sve informacije vezane za akciju (datum kod tebe). Dakle, spoj koristiš samo onda kada su ti potrebne sve informacije o akciju (recimo kod prikaza svih akcija, kao u formi na prethodnoj strani).

Ako želiš da dodaš korisnika, dodaješ ga u tabelu Korisnik. Analogno je i za događaj. Ako pak želiš da dodaš akciju, moraš da odabereš ID korisnika, ID događaja i da to zajedno sa datumom upišeš u tabelu spoja, tj. u tabelu Tomislav.

Dopuna: 07 Okt 2014 21:25

Ovo drugo je bolje, i to je ono što ti zapravo treba. Very Happy

Jedna stvar - kad se tema otegne ovako na više strana ne bi bilo loše da imaš jedan post u kome ćeš da prikazuješ aktuelno stanje baze i programa. Ovako je teško da se isprati koja tabela ima koje atribute, šta, kako itd.

Dopuna: 07 Okt 2014 21:30

I da, još jedna stvar. Ako korisnik može da izvršava neki događaj više puta, onda primarni ključ (PK) ne može da bude samo skup ID_KOR, ID_DOG (kao na skici), već mora uključiti i datum, ili nešto drugo (recimo AutoNumber kolonu).

offline
  • Huskar
  • strukovni inzenjer elektrotehnike i racunarstva
  • Pridružio: 31 Maj 2008
  • Poruke: 881
  • Gde živiš: Kula

Okej, sada kada sam to uradio, primetio sam da kod dogadjaj i korisnik tabela sam dobio plusic


sto mi ustvari znaci da sam okej spojio to, msm da je uspelo tako kako sam napisao.
E sad, ono sto mi je zadatak jeste da u c# umesto string komande napisem nesto drugo? Jer ovo vise ne pije vodu, imena su druga, a i ne mogu string da upisujem. E to me malo buni, taj deo...Ja sam u bazi odradio sto sam hteo, samo taj upis u istu me buni..
string tekstKomande = "insert into Tomislav (korisnik, dogadjaj, Datum) values('" + this.comboBox1.SelectedItem + "','" + this.comboBox2.SelectedItem + "','" + s +  "') ;";


P.S. Sad tek vidim da mi u tabelama dogadjaji i korisnici kod plusica stoje obrnute ifnromacije? Zasto to, dobar je sql koliko vidim, ne kontam u cemu je tu greska? Sad sam prema slici video.

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14263
  • Gde živiš: Niš

Umesto  this.comboBox1.SelectedItem treba da kreiraš upit koji će da ti vrati ID korisnika na osnovu selektovanog imena (još jednom, i po poslednji put, ime u ovom slučaju mora da ti bude jedinstveno!). Isto tako je i sa drugim atributom, tj. sa događajem. To je vrlo jednostavno, siguran sam da to znaš. Very Happy Možeš da odradiš kao zaseban upit, ali možeš da odradiš i kao ugnježden upit.
tomislav91 ::P.S. Sad tek vidim da mi u tabelama dogadjaji i korisnici kod plusica stoje obrnute ifnromacije? Zasto to, dobar je sql koliko vidim, ne kontam u cemu je tu greska? Sad sam prema slici video.Ne stoje nikakve obrnute informacije, već je + tu da dodaš akciju za tog korisnika, odnosno za taj događaj. Dakle, na ID događaja (korisnika) se referencira tabela Tomislav, pa se to prikazuje na kvaj način. Sve je u redu.

offline
  • Huskar
  • strukovni inzenjer elektrotehnike i racunarstva
  • Pridružio: 31 Maj 2008
  • Poruke: 881
  • Gde živiš: Kula

Znaci fora je u c# samo u tom queriju "string tekstKomande" promeniti stvari? opet me to buni, dje to staviti Very Happy

znam da treba nekako pomocu
displayMember i valueMember....u comboBoxu podesit, da display budu imena, a value ID-evi..i onda cu ja da vidim imena, ali ce stavljati id umesto imena...
samo jos ne znam DataSource koji da stavim, tj kako da stavim, probao sam path do baze, nece.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Uzmimo za primer korisnike. Pošto sad u tabeli Tomislav imaš korisnik_ID, a ne samo njegovo ime, to znači da u to polje moraš da upišeš ID jednog od zapisa iz tabele korisnici. Da bi dobio sve korisnike iz tabele, prvo moraš da ih pročitaš. Napiši komandu koja selektuje polja ID i naziv korisnika (verovatno si tom polju dao ime korisnik), a zatim ih ubaci u svoj combobox tako da do tih podataka možeš da dođeš. Recimo ovako:
public class ComboboxItem {     public string Text { get; set; }     public object Value { get; set; }     public override string ToString()     {         return Text;     } } ComboboxItem item = new ComboboxItem(); item.Text = "Korisnik"; item.Value = 12; comboBox1.Items.Add(item);
Kad budeš sklapao komandu za upis, pročitaj izabrani ID iz polja Value:
(comboBox1.SelectedItem as ComboboxItem).Value.ToString()
To isto treba da uradiš i sa događajima.

Inače, ovako kako ti radiš nije pogrešno, ali je prilično teško i postoji velika šansa da ćeš napraviti grešku. Predlažem ti da malo pogledaš Entity Framework i Data binding.

offline
  • Huskar
  • strukovni inzenjer elektrotehnike i racunarstva
  • Pridružio: 31 Maj 2008
  • Poruke: 881
  • Gde živiš: Kula

Da, ali zasto ja upisujem nove u combobox? Zar to sve ne bi trebalo da bude procitano? inace kad krenem da kucam comboBox1 ne izbaci mi ga kao ponudjeno.
ComboboxItem item = new ComboboxItem(); item.Text = "Korisnik"; item.Value = 12;   comboBox1.Items.Add(item);

I to iscitavanje, ja sam to stavio u form_load
 string query="SELECT korisnik from korisnici";                 string query2 = "select dogadjaj from dogadjaji";                 OleDbCommand command = new OleDbCommand(query, connection);                 command.Connection = connection;                 OleDbDataReader reader = command.ExecuteReader();                                                               while(reader.Read())                 {                     comboBox1.Items.Add(reader["korisnik"].ToString());                                                     }                 command = new OleDbCommand(query2, connection);                 reader = command.ExecuteReader();                 while (reader.Read())                 {                     comboBox2.Items.Add(reader["dogadjaj"].ToString());                 }            
ako na to mislis?

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Mislim da se ne razumemo. Ti već sad u form_load funkciji dodaješ podatke u comboBox1, ali trenutno upisuješ samo ime korisnika/događaja. Umesto da dodaješ samo string, dodaj objekat ComboboxItem koji sadrži i ime i ID onako kako sam ti gore napisao.

Ako si sve dobro napisao, onda ne bi trebalo da bude greške. Moraš da dodaš klasu ComboboxItem čiji kod imaš gorei umesto da ovako dodaješ podatke u comboBox1:
comboBox1.Items.Add(reader["korisnik"].ToString());
Dodaj ih ovako:
ComboboxItem item = new ComboboxItem(); item.Text = reader["korisnik"].ToString(); item.Value = pročitaj ID polje iz readera za korisnika;   comboBox1.Items.Add(item);

offline
  • Huskar
  • strukovni inzenjer elektrotehnike i racunarstva
  • Pridružio: 31 Maj 2008
  • Poruke: 881
  • Gde živiš: Kula

Napisano: 08 Okt 2014 10:42

Ovako?
  public class ComboBoxItem         {             public string Text { get; set; }             public object Value { get; set; }             public override string ToString()             {                 return Text;             }         }        private void Form1_Load(object sender, EventArgs e)         {             dtpOd.Format = DateTimePickerFormat.Custom;             dtpOd.CustomFormat = " dd/MM/yyyy hh:mm:ss tt";             dtpDo.Format = DateTimePickerFormat.Custom;             dtpDo.CustomFormat = " dd/MM/yyyy hh:mm:ss tt";             dtpRucno.Format = DateTimePickerFormat.Custom;             dtpRucno.CustomFormat = "dd/MM/yyyy hh:mm:ss tt";                 connection.Open();                                 string query="SELECT ID, korisnik from korisnici";                 string query2 = "select ID,dogadjaj from dogadjaji";                 OleDbCommand command = new OleDbCommand(query, connection);                 command.Connection = connection;                 OleDbDataReader reader = command.ExecuteReader();                                                          while(reader.Read())                 {                     ComboBoxItem item = new ComboBoxItem();                     item.Text = reader["korisnik"].ToString();                     item.Value = reader["ID"];                     comboBox1.Items.Add(item);                                                     }                 command = new OleDbCommand(query2, connection);                 reader = command.ExecuteReader();                 while (reader.Read())                 {                     ComboBoxItem item = new ComboBoxItem();                     item.Text = reader["dogadjaj"].ToString();                     item.Value = reader["ID"];                     comboBox2.Items.Add(item);                 }                                         connection.Close();                     }

Dopuna: 08 Okt 2014 10:50

I sto se tice upisivanja komande za upis sto si napisao
(comboBox1.SelectedItem as ComboboxItem).Value.ToString()
To je sve u redu, ali on ne prihvata to, on meni prihvati kod rucnog, ali kod random nece

Ko je trenutno na forumu
 

Ukupno su 551 korisnika na forumu :: 25 registrovanih, 4 sakrivenih i 522 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 2967 - dana 31 Okt 2019 06:37

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, A.R.Chafee.Jr., Bane san, beowl, darkangel2, dedalus2, ILGromovnik, joca83, Kubovac, Lošmi, LUDI, MiroslavD, nenad812, piston79, Profica2, Rakenica, Sasa Pavlovic, scimitar19, ShurikSST, Skywhaler, Stepp, vlvl, Wisdomseeker, wizzardone, zlatkoa987