Srodne teme
Kliknite za generisanje liste srodnih tema...
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ADOooOOooOO

[es] :: .NET :: ADOooOOooOO

[ Pregleda: 4306 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

*.net

Član broj: 4660
Poruke: 138
*.64.EUnet.yu



Profil

icon ADOooOOooOO14.07.2002. u 10:13 - pre 265 meseci
Imam sledeci problem u vb.net-u. U SQL bazi imam neke redove popunjene u tabeli Table na primer. Na formi imam data grid sa imenom myDG, i dva dugmeta. Jedno refresh koje popunjava data set podacima iz baze (dole je kod) i drugo za brisanje koje brise podatke iz data seta i onda mora da updejtuje bazu. Pokusao sam kao sto je dole navedeno ali ne updejtuje bazu. Obrise ds i podatke iz data grida ali na ponovni click na refresh ponovo ucitava podatke iz baze koje nije obrisao. Da li je mozda problem u matodu clear pa on nesto zeza? Takodje mi je nejasno i zasto dugme za brisanje u kome ne postoji myDG.Refresh() metoda ipak automatsku brise i podatke iz data grida nakon Clear()-a?

Private Sub brisi_Click(ByVal sender As System.Object, ByVal e As_ System.EventArgs) Handles brisi.Click
Me.myDS.Table.Clear()
Me.myDA.Update(Me.myDS.Table)
End Sub

Private Sub refresh_Click(ByVal sender As System.Object, ByVal e As_ System.EventArgs) Handles refresh.Click
daKartice.Fill(Me.myDS)
myDG.Refresh()
End Sub
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: ADOooOOooOO19.07.2002. u 05:05 - pre 264 meseci
Me.myDS.Table.Clear()
ce obrisati tabelu u datasetu a posto je datagrid.datasource setovan da tu tabelu u tom datasetu onda ce i datagrid da osvjezi svoj prikaz.
E sad, ako hoces da brises records u tabeli koristi neku drugu metodu, sigurno ne Table.Clear() :)))

Imas dve mogucnosti:
1) direktno kotistenje SQL-a pomocu npr. SQLCommand ( i SQLParametrer) objekta
2) lociranje odredjenog row-a u tabeli i njegovo brisanje, a zatim apdejt.

Posto si vidim, krenuo putem dataseta, tebi vise lezi ovo pod 2.
Dakle brisanje izvedi ovaku:

Dim mytable as DataTable
Dim row as DataRow
Dim rowIndex as Integer
Try
mytable = Me.myDS.Table ' pokazivac na tvoju tabelu
For rowIndex = 0 to mytable.Rows.Count-1 ' idemo kroz sve recorde u tabeli
row = mytable.Rows.Item(rowIndex)

' uslov za brisanje record:
If row("firstname") = "Zika" And row("lastname")="Slika" Then
row.Delete() ' brisemo record iz tabele ako je uslov ispunjen
End If
Next
If Me.myDS.HasChanges() Then
Me.myDA.Update(Me.myDS.GetChanges() )
End If
Catch ex as SQLException
msgbox(ex.message)
End Try

Dakle par stvari samo da ti pojasnim:
1) ti mozes da izostavis onaj if row("firstname") itd itd i da odmah ides na
row.Delete() posto hoces da obrises sve recorde iz tabele. Ja sam ti ovo prosirio
sa ovim If uslovom ako ti zatreba da vidis kako da obrises samo odredjena polja iz tabele i slichno
2) kad vrshish apdejt nemoj da ides sa adapter.update(dataset) jer tada saljes
citav dataset tamo-vamo (klijent-server). Ponekad to moze biti poveci dataset ako sadrzi dosta tabela sa dosta recorda itd.
Ovako fino proveris da li uopste ima promena u datasetu (.haschanges ???) i ako ima onda u bazu saljes samo te promene (.getchanges).
Eto.
Ako ima jos nesto, pitaj samo sinovac :)

pozdrav
Commercial-Free !!!
 
Odgovor na temu

*.net

Član broj: 4660
Poruke: 138
*.75.EUnet.yu



Profil

icon Re: ADOooOOooOO19.07.2002. u 12:31 - pre 264 meseci
Yo Yo, “bratanac”. Potpuno sam shvatio sve i hvala. Jedino ipak mi je jos uvek logicno da moze i table.clear() mada ne radi , ali ipak :). A da li je 100% da se ceo dataset salje ako koristis Update metodu? U knjizi ado.net step by step sam stekao utisak da upravo tome sluzi AcceptChanges koji update automatski poziva a iz njega vidi sta je menjano da bi navodno samo to poslao client serveru.

I jos jedna stvar sorry. Da li bi mogao da pogledas topic .net i access na ovom forumu koji sam ja postavio?
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: ADOooOOooOO19.07.2002. u 15:31 - pre 264 meseci
Salju se promenjeni datarow-ovi izvrsavanjem odgovrajucih SQL komandi.
Dalje, mozes da ogranicis koje ces promene da saljes bazi; npr:

adapter.update(dataset.getchanges(datarowstate.Added OR datarowstate.Modified))

Evo ti i System.Data.DataRowState enumerator:
---------------------------------------------------------
Added - jasno
Deleted - jasno
Detached - datarow je kreiran ali jos nije dodan u datarowcollection
Modified - jasno
Unchanged - jasno

pogledaj malo uputstvo :)

pozdrav:))


[Ovu poruku je menjao degojs dana 08.08.2002 u 03:18 AM GMT]
Commercial-Free !!!
 
Odgovor na temu

jc denton

Član broj: 2358
Poruke: 1705
*.ptt.yu



Profil

icon Re: ADOooOOooOO19.07.2002. u 19:38 - pre 264 meseci
degojs, dobrodosao na ES i svaka cast na odgovorima.

I ja sam malo eksperimentisao sa novim ADO-om, pa sam naisao na slican problem.
*.net je verovatno pokusao da brise redove iz neke parent tabele ili sl. gde se to kosi sa integritetom baze ?
Ja sam probao da obrisem par redova (u bazi NWind.mdb) u Orders tabeli sve funkcionise ok, ali u Customers tabeli Update javlja gresku.

pozdrav
fire, walk with me
 
Odgovor na temu

*.net

Član broj: 4660
Poruke: 138
*.71.EUnet.yu



Profil

icon Re: ADOooOOooOO19.07.2002. u 20:02 - pre 264 meseci
Nisam , ovaj bila je bas onako losa tabela sama za sebe:).
Degojs hvala jos jednom bratanac
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: ADOooOOooOO20.07.2002. u 07:12 - pre 264 meseci
> Jedino ipak mi je jos uvek logicno da moze i table.clear() mada ne radi

Ajd da razjasnimo do kraja :)

kad ides na update metod adaptera onda se bazi moraju dostaviti DATAROWS(=records) koji su MENJANI (added, updated ili deleted itd).

(slicno kao brisanje fajlova sa harda - fajlovi se ne brisu fizicki vec se samo izmeni prvi karakter u imenu u cini mi se #$E5 i onda OS zna da je fajl izbrisan, ali je on i dalje fizicki na disku dok ga ne prepise drugi fajl)

Kada ti neki datarow obrises sa DELETE onda je on i dalje u datasetu ali je oznacen kao DELETED pa ga vise ne vidis u datagridu. Medjutim kada posle ides na update, adapter zna da treba da ga izbrise iz baze jer je oznacen kao deleted.

E sad ako ti izbrises recorde sa table.clear() oni se izbrisu iz dataseta ali se ne oznacavaju kao DELETED pa adapter nema sta da updejtuje u bazi.



Commercial-Free !!!
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: ADOooOOooOO22.07.2002. u 17:16 - pre 264 meseci
jc denton,
nisam siguran da li je ovo pitanje ili samo konstatacija. Ako nije pitanje, onda zanemari (ili obrisi) ovaj post.

Citat:
jc denton
Ja sam probao da obrisem par redova (u bazi NWind.mdb) u Orders tabeli sve funkcionise ok, ali u Customers tabeli Update javlja gresku

Dakle, da vidimo zasto record moze u Orders tabeli da se obrise, a u Customers tabeli ne moze.

Orders tabela ime definisanu relaciju jedan-prema-mnogo prema tabeli OrderDetails, i tu uz atribute:
Enforce Referential Integrity i Cascade Delete Related Records.

Sta ovo znaci?
Kada obrises record u tabeli Orders, onda ce automatski da se obrisu i sva polja iz tabele OrderDetails koja imaju isti OrderID. Logicno, jer bilo bi potpuno pogresno da imas detalje za neku narudzbu u OrderDetails a da ta narudzba ne postoji u tabeli Orders.

E sad, slicno je sa tabelom Customers.
Ona ima definisanu relaciju jedan-prema-mnogo prema tabeli Orders, ali ovde NIJE definisan atribut Cascade Delete Related Records, a JESTE definisan atribut Enforce Referential Integrity --- sto te efektivno sprecava da obrises nekog kupca u tablei Customers ako postoji narudzba od tog kupca u tabeli Orders.
Zasto? Pa recimo JC DENTON je registrovan u tabeli Customers kao kupac, i izvrsio si neku narudzbu, sto znaci da odmah imas polja u tabeli Orders (i OrderDetails) koja pokazuju sta si narucio.
E sad, ako bi obrisao JC DENTON-a iz tabele Customers, sta bi se desilo sa tvojom narudzbom u tabeli Orders? Na koga bi ona pokazivala? Pokazivala bi da je narudzbu izvrsio kupac koji u stvari ne postoji jer smo te izbrisali iz tabele Customers. Upravo zato je i definisana relacija koja sprecava ovakvu nelogicnost.

Za trenutak se cini da je resenje definisanje atributa Cascade delete... za ovu relaciju (isto kao prethodna tabele Order i OrderDetails), medjutim nije izvodljivo jer Order tabela je dalje povezana sa OrderDetails vezom jedan-prema-mnogo.

Resenje (konacno, eh?:):
da bi obrisao kupca iz tabele Customers, moras prvo da obrises sve narudzbe koje je taj kupac imao (u tabeli Orders, a ovo ce automatski da obrise odgovarajuce detalje narudzbe iz OrderDetails zbog onog Cascade Delete..), a onda mozes i doticnog da obrises iz tabele Customers.

HTH.

p.s.
Slicne relacije postoje izmedju drugih tabela, pa bi predlozio da pogledas kako je baza napravljena sa osvrtom na relacije izmedju tabela.

Commercial-Free !!!
 
Odgovor na temu

jc denton

Član broj: 2358
Poruke: 1705
*.ptt.yu



Profil

icon Re: ADOooOOooOO22.07.2002. u 18:45 - pre 264 meseci
Vise je bila konstantacija ili primer za ono sto je mucilo *.net-a, ali lepo si objasnio o cemu se radi. Ovo je jedan od najcescih problema sa kojima se susrecu pocetnici u programiranju relacionih baza podataka.

Pozdrav
fire, walk with me
 
Odgovor na temu

[es] :: .NET :: ADOooOOooOO

[ Pregleda: 4306 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Srodne teme
Kliknite za generisanje liste srodnih tema...
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.