|
[ 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 :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|