Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 15 odgovora
  • 7.164 pregleda

Najnovija ↓

Listview =Listview 12.09.2003. u 02:44 · pre 281 mesec #1
Imam problem koji pokusavam da resim ali mi ne ide a to je:
Imam dva objekta listview-a ,dve tabele u access-u koje su relacijski povezane 1>vise.E sad u jednoj od listview-a nalazi se recimo podaci porudzbe(parent tabela) a u drugoj detalji(child tabela) tih porudzbi.Sad bih trebao da kad kliknem na na jednu od porudzbi u drugom listview-u da dobijem podatke o detaljima o toj porudzbi.Kako da povezem ta dva objekta?Puno bi mi pomogli.
Hvala unapred.
Potpis
i don't like money oh yea,i love it
Re: Listview =Listview 12.09.2003. u 11:57 · pre 281 mesec #2
Kad selektujes item u parent listviewu, tada bi trebao da azuriras child view. Znaci na click eventu (mislim da je ovaj event u pitanju), trebao bi da ispraznis child listview, otvoris recordset sa podacima na osnovu selektovanog parenta i nafilujes podatke iz recordseta u child view. Drugo resenje je da povuces sve podatke na pocetku i da ih drzis u nekoj kolekciji, i onda da radis sa kolekcijom a ne kacis na bazu svaki put kad ti trebaju podaci. Oba resenja uticu na performanse aplikacije, kod prvog se stalno kacis na bazu, a u drugom slucaju sve podatke drzis u memoriji, tako da treba videti sta je "bezbolnije".
Potpis
Blue Man Group
Re: Listview =Listview 12.09.2003. u 12:44 · pre 281 mesec #3
Hvala ti na brzom odgovoru ali sam malo zbunjen.Mozda kad bi mi dao mali deo sintaxe ili primercic u vezi prvog slucaja jer u drugom slucaju (mislim na kolekciju) nisam vest..
Potpis
i don't like money oh yea,i love it
Re: Listview =Listview 12.09.2003. u 13:24 · pre 281 mesec #4
Evo primercic, dve tabele: Patient (parent) i Study (child)

Code:

Option Explicit

Private Const mcstrDSNBeg       As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
Private Const mcstrDSNEnd       As String = ";Persist Security Info=False"
Private Const mcstrPath         As String = "C:\Projects\XoranCAT\XoranData.mdb"
Private Const mcstrDSN          As String = mcstrDSNBeg & mcstrPath & mcstrDSNEnd

Private Const mcstrSQLParent    As String = "SELECT * FROM Patient"
Private Const mcstrSQLChild     As String = "SELECT * FROM Study WHERE PatientID=<PatID>"

Private Sub Form_Load()
    Call m_FillParent       ' popuni parent view
    Call lvwParent_Click    ' da bi se child view popunio
End Sub

Private Sub m_FillParent()
Dim adoConn As ADODB.Connection
Dim adoRS   As ADODB.Recordset
Dim Itm     As ListItem

    lvwParent.ListItems.Clear

    Set adoConn = New ADODB.Connection
    Set adoRS = New ADODB.Recordset
    
    adoConn.Open mcstrDSN
    adoRS.Open mcstrSQLParent, adoConn
    
    While Not adoRS.EOF
        Set Itm = lvwParent.ListItems.Add(, , adoRS("LastName") & ", " & adoRS("FirstName"))
        Itm.Tag = adoRS("PatientID") ' u tag stavi kljuc koji je veza sa child tabelom
        
        adoRS.MoveNext
    Wend
    
    adoRS.Close
    adoConn.Close
    
    Set adoRS = Nothing
    Set adoConn = Nothing
    
End Sub

Private Sub m_FillChild(ParentKey As Long)
Dim adoConn As ADODB.Connection
Dim adoRS   As ADODB.Recordset
Dim Itm     As ListItem
Dim Qry     As String

    lvwChild.ListItems.Clear
    
    Qry = Replace(mcstrSQLChild, "<PatID>", ParentKey)

    Set adoConn = New ADODB.Connection
    Set adoRS = New ADODB.Recordset
    
    adoConn.Open mcstrDSN
    adoRS.Open Qry, adoConn
    
    While Not adoRS.EOF
        Set Itm = lvwChild.ListItems.Add(, , adoRS("Title"))
        
        adoRS.MoveNext
    Wend
    
    adoRS.Close
    adoConn.Close
    
    Set adoRS = Nothing
    Set adoConn = Nothing
End Sub

Private Sub lvwParent_Click()
Dim ParentKey As Long
    If Not lvwParent.SelectedItem Is Nothing Then
        ParentKey = lvwParent.ListItems.Item(lvwParent.SelectedItem.Index).Tag
        m_FillChild ParentKey
    End If
End Sub

Potpis
Blue Man Group
Re: Listview =Listview 13.09.2003. u 18:07 · pre 281 mesec #5
I dalje pokusavam ali nista.Znam , radim sa DAO objektom (za razliku od tvog coda)ali mislim da sam dobrom postavio code.Evo pogledaj i ti pa mi reci gde gresim
Code:
Dim rsPOR As Recordset 'rspor=parent tabela
Dim rsDET As Recordset 'rsdet=child tabela

Private Const str      As String = "SELECT * FROM porudzba"
Private Const str1     As String = "SELECT * FROM detprodaje WHERE brporudzbe = brporudzbe"

Private Sub Form_Load()
Data 'baza podataka Set db = DBEngine.Workspaces(0).OpenDatabase(App.Path & "/leka.mdb")
ucit
L1_Click
End Sub

Private Sub UCitaj(ParentKey As Long)


Dim quer As String
quer = Replace(str1, "brporudzbe", ParentKey)
 Set rsDET = db.OpenRecordset(quer)
 Dim Itm As ListItem
Lv2.ListItems.Clear
   
    While Not rsDET.EOF
        Set Itm = Lv2.ListItems.Add(, , rsDET("brporudzbe"))
        
        rsDET.MoveNext
    Wend
rsDET.Close
Set rsDET = Nothing

End Sub
Private Sub ucit()
Set rsPOR = db.OpenRecordset("select * from porudzba ")
Dim Itm As ListItem
L1.ListItems.Clear

  While Not rsPOR.EOF
        Set Itm = L1.ListItems.Add(, , rsPOR!ID_kupac)
        Itm.SubItems(1) = rsPOR!brporudzbe
        Itm.Tag = rsPOR("brporudzbe") ' u tag stavi kljuc koji je veza sa child tabelom
        
       rsPOR.MoveNext
    Wend
rsPOR.Close
Set rsPOR = Nothing

End Sub

Private Sub L1_Click()
Dim ParentKey As Long
    If Not L1.SelectedItem Is Nothing Then
        ParentKey = L1.ListItems.Item(L1.SelectedItem.Index).Tag
        UCitaj ParentKey
    End If
End Sub
Potpis
i don't like money oh yea,i love it
Re: Listview =Listview 14.09.2003. u 15:12 · pre 281 mesec #6
Ne znam sta ti tacno ne radi ovde, ali imas jednu "gadnu" gresku u svom kodu.

Code:

Private Const str1     As String = "SELECT * FROM detprodaje WHERE brporudzbe = brporudzbe"

...

quer = Replace(str1, "brporudzbe", ParentKey)



Replace ce ti zameniti sva pojavljivanja trazenog stringa, tako da ce tebi query izgledati ovako (za npr. ParentKey=1)

SELECT * FROM detprodaje WHERE 1 = 1

a ovo je isto sto i SELECT * FROM detprodaje WHERE True, pa ce ti selektovati sve zapise.

Primeti da sam ja koristio <>, na taj nacin si siguran da sa Replace neces promeniti nista u queryu sto ne trebas. Znaci ove dve linije tvog koda odozgo bi trebalo da izgledaju ovako:

Code:

Private Const str1     As String = "SELECT * FROM detprodaje WHERE brporudzbe = <brporudzbe>"

...

quer = Replace(str1, "<brporudzbe>", ParentKey)


Ako ti kod ne radi, napisi sta se desava (kako vidis da ne radi).
Potpis
Blue Man Group
Re: Listview =Listview 14.09.2003. u 15:20 · pre 281 mesec #7
e da, ova linija izgleda bas cudno

Code:

Data 'baza podataka Set db = DBEngine.Workspaces(0).OpenDatabase(App.Path & "/leka.mdb")
Potpis
Blue Man Group
Re: Listview =Listview 15.09.2003. u 01:01 · pre 281 mesec #8
Postavio sam onako kako si rekao:
Code:
Private Const str1 As String = "SELECT * FROM detprodaje WHERE brporudzbe = <brporudzbe>"

...

quer = Replace(str1, "<brporudzbe>", ParentKey)
[/code]

ali mi javlja gresku "data type mismatch in criteria expresion" kad sklonim znakove<> onda mi ne javlja gresku ali ucita mi u listview-u(child) sve podatke umesto podatka koji sam izabrao u parent(listview-u).Nemam predstavu sta da radim.
E da dali ima negde na netu e-knjiga (ili mozda neki site )tutorijala za manipulaciju objektima i kontrolama narocito sa listview, listboxu i flexgrid-u?Imam par knjiga (piter norton(vb6.0) i curtis smith(vb6.0 povezivanje baza podataka) ali nijedna nije bas opsirna sto se tice manipulacijom kontrola kao recimo ovaj moj problem.
Potpis
i don't like money oh yea,i love it
Re: Listview =Listview 15.09.2003. u 11:50 · pre 281 mesec #9
Kad izbacis <> onda tvoj upit postane SELECT * FROM detprodaje WHERE True i onda ti vrati sve zapise zato sto svi zapisi zadovoljavaju kriterijum True

Ajde stavi jedan debug.print quer posle tog replacea, pa postuj ovde kako ti izgleda upit kada se u njega stavi parametar. I jos nesto kog ti je tipa polje brporudzbe u detprodaje? Ako je tipa Text onda upit mora da izgleda ovako:

Code:

Private Const str1 As String = "SELECT * FROM detprodaje WHERE brporudzbe = '<brporudzbe>'"


Sto se tice tutoriala, mislim da je MSDN dovoljan za ove stvari.
Potpis
Blue Man Group
Re: Listview =Listview 15.09.2003. u 16:40 · pre 281 mesec #10
Tip polja u tabeli jeste text i uradio sam onako kako si rekao ali sad uopste nemam podatke u child(Lv2).Uradio sam i debug:
Code:

False
SELECT * FROM detprodaje WHERE brporudzbe = '243'

to je to nije mi vratio true zapise izgleda da je tu greska ali ja je ne znam ukloniti.
Izvini sto te smaram ali to mi je bas potrebno.Hvala
Potpis
i don't like money oh yea,i love it
Re: Listview =Listview 15.09.2003. u 16:44 · pre 281 mesec #11
Da li ti je prijavio gresku prilikom izvrsavanja ovog upita?
Napravi u accessu novi query, i pasteuj ovaj SQL upit (SELECT * FROM detprodaje WHERE brporudzbe = '243') pa vidi da li ti tamo radi.
Potpis
Blue Man Group
Re: Listview =Listview 15.09.2003. u 17:27 · pre 281 mesec #12
Uspio sam.Ali sam morao da polje brporudzbe u Access-u promenim u number to je jedini uslov.Verovatno je u pitanju bilo to sto je u polju bio broj '0000243' a on mi ga registrovao kao '243'.Kako da mi cita i nule?
Potpis
i don't like money oh yea,i love it
Re: Listview =Listview 15.09.2003. u 17:49 · pre 281 mesec #13
ParentKey deklarisi svuda kao String umesto kao Long, ali moras da vratis da polje bude Text
Potpis
Blue Man Group
Re: Listview =Listview 15.09.2003. u 17:52 · pre 281 mesec #14
To je to.MNOGO ti hvala STVARNO si mi pomogao!!!
Potpis
i don't like money oh yea,i love it
Re: Listview =Listview 19.09.2003. u 01:19 · pre 281 mesec #15
Znam da sam dosadan ali sta da radim.Pojavio mi se jos jedan problem koji je vezan za ovaj a to je da sam sad ubacio textbox kontrolu u ovu formu koja je povezana sa tabelom "kupci".E sad bih zelio da na text_change dogadjaj (znaci ,kad trazim IDkupca u text) u Listview-u (parent) pojave samo podaci koji je taj trazeni kupac imao.Pokusao sam na prethodne nacine ali nije uspelo. Koji bi bio princip ili sintaxa?


P.S. trazio sam u msdn ali nisam nasao ni primer.Jos samo ovaj put molim na odgovor.
Potpis
i don't like money oh yea,i love it
Re: Listview =Listview 19.09.2003. u 11:35 · pre 281 mesec #16
Change event nije bas najsjajnije resenje. Ako u taj txtbox ukucas 123456 Change event ce se okinuti 6 puta. Bolje koristi LostFocus event, ili stavi dugme na koje bi to trebalo da se radi.

Postuj kod koji si napravio pa da vidimo
Potpis
Blue Man Group
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme