[ ZarkoR82 @ 15.09.2009. 18:59 ] @
Pozdrav. Trazio sam net-u i ovde po forumu, ali nisam uspeo da nadjem ono sto meni treba.
Problem je sledeci:

Treba da upisem u DataGrid podatke iz tabele tblUnos, ali tako da se filtriraju podaci na sledeci nacin:

Od 8-9 kolona koliko ima u tabeli, treba da se ubaci 3 (Ime, Telefon i Status), ali samo one u kojima kolna "status" ima vrednost AKTIVAN.

Nadam se da sam bio jasan. Evo pocetni deo koda koji koristim:

Dim baza As Database
Dim tabela As Recordset

Set baza = OpenDatabase("d:\program\UNOS.mdb")
Set tabela = baza.OpenRecordset("SELECT * FROM tblUnos WHERE status = 'Aktivan'", dbOpenDynaset)

Ovaj SQL upit bi trebao da filtrira podatke, ali mi je problem da takve prikazem u DataGridu. Koliko sam shvatio iz nekih primera, trebalo bi da ide nesto tipa:

Set DataGrid1.DataSource = ????

Ako neko moze da mi pomogne, bio bih mu veoma zahvalan.

P.S. Treba mi iskljucivo kod! Nikako povezivanje preko DataEnvironment-a ili Data kontrole!

Hvala unapred



[ djvlajko @ 15.09.2009. 20:57 ] @
Sve si dobro uradio, sam jos treba ovo ...

Set DataGrid1.DataSource = tabela

... gde je "tabela" RecordSet koji si vec dobio.




[ ZarkoR82 @ 15.09.2009. 23:50 ] @
Tako sam i ja mislio, ali mi prijavljuje grsku:

Run-time 13

Type mismatch
[ dzigilibonglica @ 16.09.2009. 01:38 ] @
E sad...

Kod datagrida probaj ovo:
Code:

        Set DataGrid1.DataSource = tabela.DataSource
        DataGrid1.DataMember = tabela.DataMember


To bi trebalo da resi problem, mada meni to provereno radi sa ADO, ali kako mi se cini ti koristish DAO.

Kod ADO-a imas i josh nekih podesavanja za recordset koja definisu neka pravila kako se oni vezu za kontrole(recimo DataGrid).

Ako ti ni ovo ne radi onda vidi kakav ti je tip recordseta, pa sta tu moze da se izmeni.


Dalje, kada hoces nesto da izmenish kod kolona koje ti se ucitavaju iz tabele, to treba da uradish u SQL upitu i to na sledeci nacin:

Liniju:

Code:

Set tabela = baza.OpenRecordset("SELECT * FROM tblUnos WHERE status = 'Aktivan'", dbOpenDynaset)


zamenish linijom:
Code:

Set tabela = baza.OpenRecordset("SELECT Ime, Telefon, Status FROM tblUnos WHERE Status = 'Aktivan'", dbOpenDynaset)


I to bi trebalo da fercera kako ti hoces. Jos kod datagrida morash da vodish racuna kako je sama kontrola postavljena na formu, odnosno njena svojstva u odnosu na tip recordseta. Ne mozes je vezati za recordset neodgovarajuceg tipa, pa kroz nju menjati vrednosti.

Za detalje kako to da popravish ako je problem u tome ne mogu da ti pomognem jer ja radim u ADO, ane DAO.

Err.Number 13 ne znam sta je, ali za svaki slucaj probaj da proverish jel ti Upit dobar: Napravish Query u Access-u, i u SQL view pejstujesh taj tvoj upit, i ako se ne izvrshi, onda je problem u tvom upitu, ili strukturi baze, a ne u kodu koji ti je covek gore dao.

Pogledaj na kojoj liniji ti puca program i izbacuje taj err.number pa postuj ovde tu liniju da pogledamo.

Pozdrav!
[ ZarkoR82 @ 16.09.2009. 10:06 ] @
Ovako. Puca na sledecoj liniji:

Set DataGrid1.DataSource = tabela

Jednostavno ne prihvata ovaj recordset ovakav. Ne postoji mogucnost da stavim tabela.DataSource. Ovo "DataSource" ne postoji.

Sql upit je dobar i kada ga izvrsim u accessu savrseno radi.

Vec dva dana jurim resenje za ovo i pocinje mnogo da me nervira. Trebalo bi da bude prosto, ali ....

Postoji li mogucnost da se popuni DataGrid preko petlje?

Nesto tipa:

Do Until tabela.EOF
With DataGrid1
.Columns(0).Text = tabela.Fields!Ime
.Columns(1).Text = tabela.Fields!Telefon
.Columns(2).Text = tabela.Fields!Status
End With
tabela.MoveNext
Loop

Naravno, ovaj kod ne radi, cisto sam ga stavio kao ideju.

U VB radim 4.0 verzije (pocetak), mada sam najvise radio u 5.0. Ali sve je to onako amaterski koliko sam mogao da ucim iz helpa i par knjiga tako da mi je DAO za baze podataka.

Ne znam da li je bolja varijanta da sa DAO predjem na ADO. Valjda nije neka velika razlika, a koliko vidim primeri koje nadjem na net-u su uglavnom radjeni sa ADO?!
[ djvlajko @ 16.09.2009. 10:47 ] @
Ako "tabelu" formiras kao ADO.RecordSet (znaci koristis ADO umesto DAO), ono sa DataSource-om mora proci.

Ako zelis koristiti DAO onda bolje na formu prikaci DataControl, preko nje formiraj set podataka i onda usmeri Grid ka toj DataControl-i.
[ dzigilibonglica @ 16.09.2009. 11:02 ] @
Upravo tako.

A ako zelish da radish sa ADO, a ne znash, napisacu ti ovde kod za tvoj konkretan problem(resenje)

To sa petljom je bezveze ako koristish datagrid, i ne znam koliko to tacno moze da radi na taj nacin. Onda morash da stavish i primary key u grid pa radish svaki change event, odnosno pisesh kood za update recorseta.

e ako ti to treba samo za prikaz i odabir, to mozes da stavish u obicnu list controlu, i ne morash u datagrid.

Ako ako hocesh bas datagrid, obda cepaj ADO
[ ZarkoR82 @ 16.09.2009. 11:17 ] @
Aj ako ti nije problem, napisi mi cod za ADO konkretno za ovo sto meni treba.

Uzgred, ima li neki link ili mali tutorial za sintaksu kako se koristi ADO (Otvaranje baze, tabele, upis, citanje....), nesto najosnovnije?!

[ dzigilibonglica @ 16.09.2009. 17:07 ] @
Prvo ukljucish u Project\References sledece:

Microsoft ActiveX DataObjects2.0 Object library a kood ti je sledeci:

Code:


'Connection je u stvari veza prema nekom izvoru podataka, odnosno tvoja baza
Option Explicit

Dim baza As ADODB.Connection
Dim Tabela As ADODB.Recordset

Private Sub Form_Load()

    Set baza = New ADODB.Connection 
    baza.CursorLocation = adUseClient  'Ovo znaci da se na tvom kompu obradjuju upiti
    
    baza.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\program\UNOS.mdb;Persist Security Info=False;"
         

    Set Tabela = New ADODB.Recordset
    Tabela.CursorType = adOpenDynamic
    Tabela.CursorLocation = adUseClient
    Tabela.LockType = adLockOptimistic
    
    
    Tabela.Open "SELECT Ime, Telefon, Status FROM tblUnos WHERE Status = 'Aktivan'", baza, , adCmdTable
    
    Set DataGrid1.DataSource = Tabela.DataSource
    DataGrid1.DataMember = Tabela.DataMember

End Sub


Za ostalo proguglaj,ili elitesecurituj :)

[ ZarkoR82 @ 16.09.2009. 17:20 ] @
Super. Proradilo je sa ovim kodom sto si mi dao.

Hvala puno na pomoci!
[ dzigilibonglica @ 16.09.2009. 18:20 ] @
Nema na cemu.
[ Dacex @ 30.07.2010. 02:50 ] @
Da ne otvaram novu temu... Da li postoji bilo kakav način da se promeni pozadina datagrida ? ne mislim na pozadinu celije, vec dela iza tabele...stvarno mi nije jasan propust ms da ne postavi property za to.... Zamenuo bih sve te datagridove sa msflexgridom ali je to veliki posao jer imam dosta gridova.

Hvala unapred na svakoj pomoći!