[ arpsoftt @ 30.06.2009. 23:46 ] @
Pozdrav svima :)

Stvar je sledeca, zapeo sam u kodu i nikako da nadjem resenje.

Dakle, ono sto pokusavam da napravim je sledece.

1. Korisnik iz tekstualnog polja u listu dodaje reči.
2. Kada doda sve reči koje mu trebaju, na osnovu te liste reči, u bazi podataka pretražuje određeno polje.
3. Sva polja, koja u svom stringu, na bilo kojoj poziciji sadrže reči koje je korisnik zadao, pojavljuju se u drugoj listi, sa jos nekim podacima.


Evo kako izgleda kod, nadam se da vam je jasno ovo gore..:

Code:

Option Explicit
Private Function PretraziTekstove() As Boolean
Dim Sql As String, boolFound As Boolean
    If Len(cboVrstaTeksta.Text) = 0 Then 'mora biti izabrana kategorija
        PretraziTekstove = False
        cboVrstaTeksta.SetFocus
        Exit Function
    End If
    
    'Brisanje starih
    On Error Resume Next    'u slucaju da je prazno
    With rsTemp.Recordset
        .MoveFirst
        Do While Not .EOF
            .Delete
        .MoveNext
        Loop
    End With
    
    On Error GoTo errSelectTekst
    Sql = "SELECT * FROM Tekst WHERE VrstaTeksta ="
    Sql = Sql & Chr(34) & cboVrstaTeksta.Text & Chr(34)
    Sql = Sql & " ORDER BY Name"
    rsRecipe.RecordSource = Sql
    rsRecipe.Refresh
    
    
    With rsRecipe.Recordset
        If Option1(0).Value = True Then 'Sve reci moraju biti ukljucene u pretragu
            .MoveFirst
            Do While Not .EOF
                boolFound = True
                For i = 0 To List2.ListCount - 1
                    If InStr(.Fields("GlavniTekst"), CStr(List2.List(List2.ListIndex))) > 0 Then
                    Else
                        boolFound = False
                    End If
                Next
                If boolFound Then
                    rsTemp.Recordset.AddNew
                    rsTemp.Recordset.Fields("Naziv") = .Fields("Naziv")
                    rsTemp.Recordset.Fields("GlavniTekst") = .Fields("GlavniTekst")
                    rsTemp.Recordset.Fields("PomocniTekst") = .Fields("PomocniTekst")
                    rsTemp.Recordset.Update
                End If
            .MoveNext
            Loop
        Else    'samo jedna rec mora biti ukljucena u pretragu
            .MoveFirst
            Do While Not .EOF
                If InStr(.Fields("GlavniTekst"), CStr(Text1.Text)) > 0 Then
                    rsTemp.Recordset.AddNew
                    rsTemp.Recordset.Fields("Naziv") = .Fields("Naziv")
                    rsTemp.Recordset.Fields("GlavniTekst") = .Fields("GlavniTekst")
                    rsTemp.Recordset.Fields("PomocniTekst") = .Fields("PomocniTekst")
                    rsTemp.Recordset.Update
                End If
            .MoveNext
            Loop
        End If
    End With
    
    Sql = "SELECT * FROM Tekst ORDER BY Name"
    rsTemp.RecordSource = Sql
    rsTemp.Refresh
    PretraziTekstove = True
    Exit Function
    
errSelectTekst:
    Err.Clear
    PretraziTekstove = False
End Function





E, na kraju, moj problem lezi u tome sto kada selektujem drugu opciju "Smo jedna rec da bude ukljucena u pretragu", kod radi savrseno, ukucam rec i izlista mi sve tekstove koji sadrze tu rec, ali, kad odaberem vise reci, dodam ih u listu i izvrsim pretragu, izbaci mi sve i jedan tekst koji postoji u bazi podataka, bilo da sadrzi odredjene reci u listi, bilo da sadrzi samo jednu....



[Ovu poruku je menjao arpsoftt dana 01.07.2009. u 01:09 GMT+1]
[ Aleksandar Vasic @ 02.07.2009. 16:06 ] @
Nisam se mnogo udubljivao u kôd,ali koliko sam shvatio iz ovoga sto si rekao, ti si u stvari proveravao sve tekstove da li sadrze reci koje si naveo. Medjutim ti to treba da uradis na sledeci nacin, prvo uradis pretragu svih tekstova za prvu rec, zatim u tekstovima koji sadrze prvu rec da trazis tekstove koje sadrze drugu i td... Znaci bukvalno filtriras listu u odnosu na reci. Izvinjavam se ako nisam dobro shvatio sta zelis.
[ arpsoftt @ 03.07.2009. 12:02 ] @
Shvatio si ti to, ali, stvar je u tome sto korisnik mozda nece da proverava prvu rec, pa onda sve reci, vec, (pogledaj u pocetku koda), stoji opcija da se pretraga odjednom izvrsi na osnovu liste zadatih reci. I ne ide pa ne ide...
[ dzigilibonglica @ 04.07.2009. 01:35 ] @
A sto radis to na masini?
Prvo si mu povukao celu tabelu(recordset), a baza ionako moze sama to da odradi i vrati ti samo ono sto ti treba.
Znaci stavis WHERE naredbu u SQL, gde imas:

SELECT [PoljaKoja ti trebaju] FROM [Tabele u kojima su] WHERE Vrsta='ABCDEFG' AND (Nesto LIKE '%TvojString%' OR Nesto LIKE '%TvojString2%' OR Nesto LIKE '%TvojString3%'....)ORDER BY Nesto


Stavis jedan string u kod, koji posle For petlja popuni sa svim parametrima u zavisnosti od broja reci u listi(For i=0 to List2.ListCount-1, Next i) i cao!

Ako treba pomoc ja cu ti sutra napisati.

Pozdrav!
[ arpsoftt @ 04.07.2009. 22:27 ] @
Citat:
A sto radis to na masini?
Prvo si mu povukao celu tabelu(recordset), a baza ionako moze sama to da odradi i vrati ti samo ono sto ti treba.
Znaci stavis WHERE naredbu u SQL, gde imas:

SELECT [PoljaKoja ti trebaju] FROM [Tabele u kojima su] WHERE Vrsta='ABCDEFG' AND (Nesto LIKE '%TvojString%' OR Nesto LIKE '%TvojString2%' OR Nesto LIKE '%TvojString3%'....)ORDER BY Nesto


Stavis jedan string u kod, koji posle For petlja popuni sa svim parametrima u zavisnosti od broja reci u listi(For i=0 to List2.ListCount-1, Next i) i cao!

Ako treba pomoc ja cu ti sutra napisati.

Pozdrav!


Ajde molim te ako ti nije frka, program je ogroman, trebam ga isporuciti do ponedeljka uvece, a milion stvari jos nije zavrseno.

Dakle, bitno mi je samo da se pretraga vrsi na osnovu LISTE zadatih reci.

Hvala unapred..
[ dzigilibonglica @ 04.07.2009. 23:08 ] @
Prvo da te pitam da li koristis ADO ili DAO ili ne daj Boze neku kontrolu za pristup tabeli?

Ako koristis ADO, daj mi koju bazu koristis (Acess,MySQL ili sta vec) pa cu ti napisem...

Pozdrav!
[ dzigilibonglica @ 04.07.2009. 23:19 ] @
i da,

ni ja se nisam mnogo udubio u kod, ali koliko vidim ti imas nesto tipa pretraga na osnovu jedne reci, ili svih reci... Nije ti to bas najbolje resenje, mislim ako ga radis za klijenta, on cete zezati a sto ne moze na osnovu vise reci itd.

Namesti da ti ta tvoja lista bude [Lista].Style=1 (checkbox)

Pa onda prodjes kroz nju, i proveris za reci koje su checkirane.

Znaci daj mi koja je baza u pitanju(tip), i naravno ako je ADO napisacu ti... Aj javljaj pa da uradimo to!
[ dzigilibonglica @ 05.07.2009. 00:05 ] @
Evo u sushtini to ti je to, samo ga malo izmenjaj da ti bude POKRETABILNO...

Ako ne razumesh....................E jbg!
Code:

Private Sub Pretrazi()

Dim UpitS As String
Dim i As Long
    
    UpitS = "SELECT * FROM Tekst WHERE VrstaTeksta='" & TvojParametar & "'"
    
    
    If List2.ListCount <> 0 Then
        
        For i = 0 To List2.ListCount - 1
            If i = 0 Then
                UpitS = UpitS & " AND (Tekst LIKE '%" & List2.List(List2.ListIndex) & "%'"
            ElseIf i <> 0 And i <> List2.ListCount - 1 Then
                UpitS = UpitS & " OR tekst LIKE '%" & List2.List(List2.ListIndex) & "%'"
            Else
                UpitS = UpitS & " OR tekst LIKE '%" & List2.List(List2.ListIndex) & "%)'"
            End If
        Next i
    End If
    
    
    UpitS = UpitS & " ORDER BY Name"
    
    rsTemp.Open UpitS, TvojaBaza, , adCmdTable


I dobio si recordset koji je vratio samo sto ti treba
Ako ne razumes,jbg....
TvojaBaza je objekat tipa connection, preko kojega gadjas bazu i sve radish


[ arpsoftt @ 05.07.2009. 08:43 ] @
Hehe, razumem :D

Hvala ti!
[ dzigilibonglica @ 05.07.2009. 16:34 ] @
Nema na cemu :)