[ steve585 @ 08.01.2008. 14:29 ] @
Imam tekst fajl unutar kojeg bi trebao da izvrsim prebrojavanje faktura, gdje faktura sadrzi proizvode koje izabere korisnik.
Dakle korisnik unese npr. proizvod br. 1, proizvod br. 2 i proizvod br 3. Program treba da pokaze one fakture koje na sebi imaju i proizvod 1 i proizvod 2 i proizvod 3.

Podaci mi se nalaze u tekst fajl-u, te sam stoga napravio sljedeci kod:

Code:

Private Sub cmdIzvrsiUpit_Click()

Link01 = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="
Link02 = Chr(34)
Link3 = "DBQ=" & App.Path & ";DefaultDir=" & App.Path & ";Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;FIL=text;FILEDSN=" & App.Path & "\TXTODBC.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
TXTLink = Link1 & Link2 & Link3 & Link2


Dim TxtAdoConn As ADODB.Connection 
Dim TxtAdoRS   As ADODB.Recordset  
Dim TxtAdoFld  As ADODB.Field
Dim Server, SQLUpitiServeri As String

Set TxtAdoConn = New ADODB.Connection
TxtAdoConn.Open TXTLink

Dim Proizvodi
Dim Duzina As Integer
Duzina = Len(txtLista.Text)
Duzina = Duzina - 2
Proizvodi = Left(txtLista.Text, Duzina)

Dim CounUvjet As Integer
CounUvjet = Val(txtBrojProizvoda.Text)

SQLUpitServeri = "Select FAKTURA From TxtBaza.txt where ARTIKL in (" & Proizvodi & ") group by FAKTURA having count(DISTINCT(ARTIKL)) = " & CounUvjet
Poruka = MsgBox(SQLUpitServeri, vbOKOnly, "")
     
    'Kreiraj i otvori recordset
    Set TxtAdoRS = New ADODB.Recordset
    TxtAdoRS.Open SQLUpitServeri, TxtAdoConn
     
      With TxtAdoRS
      .MoveFirst
      Do While Not .EOF
        
        .MoveNext
      Loop
      End With
Exit Sub
End Sub


kada pokrenem izvrsavanje dobijem poruku koja se nalazi u prilogu. ODBC Text Driver nedefinirana funkcija 'DISTINCT'. Upit mora sadrzavati DISTINCT, jer jedino tako dobivam ispravne podatke.

Na koji nacin se moze srediti problem?
[ batalule @ 08.01.2008. 21:07 ] @
Naravno da dobijas gresku jer DISTINCT nije funkcija.

"Select Distinct FAKTURA From TxtBaza.txt where ARTIKL in (" & Proizvodi & ") group by FAKTURA having count (ARTIKL)= " & CounUvjet & ";"
[ Aleksandar Ružičić @ 08.01.2008. 21:16 ] @
Code:

Link01 = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="
Link02 = Chr(34)
Link3 = "DBQ=" & App.Path & ";DefaultDir=" & App.Path & ";Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;FIL=text;FILEDSN=" & App.Path & "\TXTODBC.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
TXTLink = Link1 & Link2 & Link3 & Link2


zar LInk01 i Link02 ne bi trebalo da bude Link1 i Link2? (vidim da te dve promenljive koristis a Link01 i Link02 nigde...)
[ steve585 @ 09.01.2008. 17:41 ] @
Aleksandar Ružičić
Moguće da sam ovu 0 kod Link01 i Link02 greškom dodao prilikom kopiranja koda. Ako izbacim Distinct iz SQL upita radi bez problema.

batalule
Distinct mora stajati iza having (count), a ne na početku upita, u suprotnom rezultat koji dobijem nije ispravan.
[ steve585 @ 13.01.2008. 14:40 ] @
Vezano za prethodni upit, opet isti problem sa DISTINCT. Evo koda:

Code:

Link1 = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="
Link2 = Chr(34)
Link3 = "DBQ=" & App.Path & ";DefaultDir=" & App.Path & ";Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;FIL=text;FILEDSN=" & App.Path & "\TXTODBC.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
TXTLink = Link1 & Link2 & Link3 & Link2


Dim TxtAdoConn As ADODB.Connection ' konekcija
Dim TxtAdoRS   As ADODB.Recordset  ' rekordset u kome ce biti podaci
Dim TxtAdoFld  As ADODB.Field
Dim Server, SQLUpitiServeri As String
Dim TxtAdoConn2 As ADODB.Connection ' konekcija
Dim TxtAdoRS2   As ADODB.Recordset


Dim DuzinaFakt As Long


Set TxtAdoConn = New ADODB.Connection
TxtAdoConn.Open TXTLink
SQLUpitServeri = "Select COUNT(DISTINCT(ARTIKL)) AS BROJF, FAKTURA From reportMag001.txt GROUP BY FAKTURA"
Set TxtAdoRS = New ADODB.Recordset
TxtAdoRS.Open SQLUpitServeri, TxtAdoConn
With TxtAdoRS
      .MoveFirst
      Do While Not .EOF
        A = !BROJF
        B = !FAKTURA
        txtRezultat.Text = txtRezultat.Text & A & " " & B & Chr(13) & Chr(10)
       .MoveNext
      Loop
End With


Zar ne postoji nacin da se izvrsi SQL upit
Code:

SQLUpitServeri = "Select COUNT(DISTINCT(ARTIKL)) AS BROJF, FAKTURA From reportMag001.txt GROUP BY FAKTURA"


Sta nije dobro programirano? Samo zelim prebrojati sve razlicite proizvode unutar faktura?
[ goranvuc @ 13.01.2008. 16:40 ] @
Mrzi me da proveravam, ali možda da malo obrneš SQL, tj. da ga drugačije postaviš:
Code:

SELECT COUNT(Artikl) AS BrojF, Faktura 
FROM (SELECT DISTINCT Artikl, Faktura FROM reportMag001.txt) AS Razliciti 
GROUP BY Faktura

Suština je da prvo selektuješ sve različite, a onda iz tog skupa da vadiš Count() po fakturi.
[ steve585 @ 13.01.2008. 17:28 ] @
Sada je javio novu gresku. Saljem je u prilogu.
[ steve585 @ 13.01.2008. 17:33 ] @
Ne radim sa Access-om u pitanju su txt file-ovi
[ goranvuc @ 13.01.2008. 17:36 ] @
Video sam - ali kasno, sorry

Probacu da simuliram kod mene, pa ti javim.
[ goranvuc @ 13.01.2008. 17:44 ] @
Kao sto sam i mislio: kod mene radi.
[ steve585 @ 13.01.2008. 17:48 ] @
U cemu je fazon?
[ goranvuc @ 13.01.2008. 17:53 ] @
Ovo mi je ConnectionString za probni fajl koji sam kreirao da bih ti pomogao:
"Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DefaultDir=E:\Program Files\Common Files\ODBC\Data Sources;Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;Extensions=txt,csv,tab,asc;FIL=text;FILEDSN=E:\Program Files\Common Files\ODBC\Data Sources\Proba.txt.dsn;MaxBufferSize=2048;MaxScanRows=25;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
i koliko vidim nije nista specijalno drugaciji.

Stavi za konekciju da je CursorLocation = Client, a recordset otvori kao Static i ReadOnly - da proverimo da nije mozda to.
[ goranvuc @ 13.01.2008. 17:55 ] @
Posto malo slabije stojim sa nemackim jezikom, ako mozes samo da das prevod te greske.
[ goranvuc @ 13.01.2008. 17:58 ] @
Sad nesto gledam te tvoje screenshot-ove pa mi nesto nije jasno: ti kao da si ovo resenje sto sam ti dao testirao na necemu drugom, a ne na ekranu gde si prvobitno imao problem - hajde samo proveri da li na dobrom mestu testiras.
[ steve585 @ 13.01.2008. 18:12 ] @
ni meni njemacki nije skroz jaka strana, ali otprilike znaci sljedece: 2 parametra su ocekivana, ali je premalo parametara poslano

Nadam se da si na ovo mislio kada si napisao da promjenim parametre kod konekcije i recordset-a
Code:

Set TxtAdoConn = New ADODB.Connection

TxtAdoConn.CursorLocation = adUseClient

TxtAdoConn.Open TXTLink
SQLUpitServeri = "SELECT COUNT(Artikl) AS BrojF, Faktura FROM (SELECT DISTINCT Artikl, Faktura FROM reportMag001.txt) AS Razliciti GROUP BY Faktura"
'" & FAKTURABROJ & A
Set TxtAdoRS = New ADODB.Recordset

TxtAdoRS.Open SQLUpitServeri, TxtAdoConn, adOpenStatic, adLockReadOnly


U pitanju je ista aplikacija u medjuvremenu sam dodao jo dugmadi.
[ goranvuc @ 13.01.2008. 18:15 ] @
Ok je, potpuno se razumemo, to sam mislio.

Vidi, SQL koji sam ti dao je potpuno ispravan - 100% provereno i nije tu problem. Kazi mi da li ti radi najobicniji "SELECT Artikl, Faktura FROM reportMag001.txt" pa da onda sumnjam na nesto drugo.
[ goranvuc @ 13.01.2008. 18:17 ] @
Cek, cek - sta ti je ovo posle SQL-a
Code:
'" & FAKTURABROJ & A

To ti pravi problem.
[ steve585 @ 13.01.2008. 18:20 ] @
Obicni upiti mi rade.

Otisao sam do te mjere, da sam vodjen tvojim prvim postom napravio sljedece:

Code:

Link1 = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="
Link2 = Chr(34)
Link3 = "DBQ=" & App.Path & ";DefaultDir=" & App.Path & ";Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;FIL=text;FILEDSN=" & App.Path & "\TXTODBC.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
TXTLink = Link1 & Link2 & Link3 & Link2

Dim TxtAdoConn As ADODB.Connection ' konekcija
Dim TxtAdoRS   As ADODB.Recordset  ' rekordset u kome ce biti podaci
Dim TxtAdoFld  As ADODB.Field
Dim Server, SQLUpitiServeri As String
Dim TxtAdoConn2 As ADODB.Connection ' konekcija
Dim TxtAdoRS2   As ADODB.Recordset
Dim DuzinaFakt As Long

Kill (App.Path & "\reportMag011.txt")

Set TxtAdoConn = New ADODB.Connection
TxtAdoConn.Open TXTLink
SQLUpitServeri = "Select DISTINCT(ARTIKL) AS ARTIKLI, FAKTURA From reportMag001.txt order by FAKTURA"
'" & FAKTURABROJ & A
Set TxtAdoRS = New ADODB.Recordset
TxtAdoRS.Open SQLUpitServeri, TxtAdoConn
With TxtAdoRS
     .MoveFirst
      Do While Not .EOF
        A = !ARTIKLI
        B = !Faktura
        If txtRezultat.Text = "" Then
        txtRezultat.Text = "ARTIKLI; FAKTURA" & Chr(13) + Chr(10) & A & "; " & B & Chr(13) & Chr(10)
        ElseIf txtRezultat.Text <> "" Then
        txtRezultat.Text = txtRezultat.Text & A & "; " & B & Chr(13) & Chr(10)
        End If
       .MoveNext
      Loop
End With
With CommonDialog1
   .FileName = App.Path & "\reportMag011.txt"
     Open .FileName For Output As #1
     Print #1, txtRezultat.Text
   Close #1
End With
TxtAdoRS.Close
Set TxtAdoRS = Nothing
TxtAdoConn.Close
Set TxtAdoConn = Nothing
End Sub



Code:

Link1 = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="
Link2 = Chr(34)
Link3 = "DBQ=" & App.Path & ";DefaultDir=" & App.Path & ";Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;FIL=text;FILEDSN=" & App.Path & "\TXTODBC.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
TXTLink = Link1 & Link2 & Link3 & Link2

Dim TxtAdoConn As ADODB.Connection ' konekcija
Dim TxtAdoRS   As ADODB.Recordset  ' rekordset u kome ce biti podaci
Dim TxtAdoFld  As ADODB.Field
Dim Server, SQLUpitiServeri As String
Dim TxtAdoConn2 As ADODB.Connection ' konekcija
Dim TxtAdoRS2   As ADODB.Recordset
Dim DuzinaFakt As Long

Kill (App.Path & "\reportMag111.txt")

Set TxtAdoConn = New ADODB.Connection
TxtAdoConn.Open TXTLink
SQLUpitServeri = "Select COUNT(ARTIKLI) AS BRARTIKLI, FAKTURA From reportMag011.txt GROUP by FAKTURA"
'" & FAKTURABROJ & A
Set TxtAdoRS = New ADODB.Recordset
TxtAdoRS.Open SQLUpitServeri, TxtAdoConn
With TxtAdoRS
     .MoveFirst
      Do While Not .EOF
        A = !BRARTIKLI
        B = !Faktura
        If txtCount.Text = "" Then
        txtCount.Text = "BROJ; FAKTURA" & Chr(13) + Chr(10) & A & "; " & B & Chr(13) & Chr(10)
        ElseIf txtRezultat.Text <> "" Then
        txtCount.Text = txtCount.Text & A & "; " & B & Chr(13) & Chr(10)
        End If
       .MoveNext
      Loop
End With

With CommonDialog1
   .FileName = App.Path & "\reportMag111.txt"
     Open .FileName For Output As #1
     Print #1, txtRezultat.Text
   Close #1
End With

TxtAdoRS.Close
Set TxtAdoRS = Nothing
TxtAdoConn.Close
Set TxtAdoConn = Nothing
End Sub


Ove upite bez problema izvodi.

Mislim da se dobije isti rezultat, ali treba vise vremena i koda.
[ steve585 @ 13.01.2008. 18:23 ] @
Citat:
goranvuc: Cek, cek - sta ti je ovo posle SQL-a
Code:
'" & FAKTURABROJ & A

To ti pravi problem.


Ovo je komentar izbrisao sam i to i dalje ista greska
[ goranvuc @ 13.01.2008. 18:30 ] @
Samo te jedno molim, posto ne verujem u zone sumraka: Izvrsi ovaj SQL kod sebe bez ikakvih modifikacija sa tvoje strane (Evo ti jos jednom):
Code:

SELECT COUNT(Artikl) AS BrojF, Faktura 
FROM (SELECT DISTINCT Artikl, Faktura FROM reportMag001.txt) AS Razliciti 
GROUP BY Faktura

pa javi.
[ steve585 @ 13.01.2008. 18:31 ] @
Slazem se s tobom u potpunosti, ako radi kod tebe, trebalo bi da radi i kod mene. Ali nece...

Viditi cu da nije do drajvera, nema mi logike

:-)
[ steve585 @ 13.01.2008. 18:37 ] @
Evo koda doslovce od slova do slova, gdje javlja problem

Code:

Private Sub Command2_Click()
Link1 = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="
Link2 = Chr(34)
Link3 = "DBQ=" & App.Path & ";DefaultDir=" & App.Path & ";Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;FIL=text;FILEDSN=" & App.Path & "\TXTODBC.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
TXTLink = Link1 & Link2 & Link3 & Link2

Dim TxtAdoConn As ADODB.Connection ' konekcija
Dim TxtAdoRS   As ADODB.Recordset  ' rekordset u kome ce biti podaci
Dim TxtAdoFld  As ADODB.Field
Dim Server, SQLUpitiServeri As String
Dim TxtAdoConn2 As ADODB.Connection ' konekcija
Dim TxtAdoRS2   As ADODB.Recordset
Dim DuzinaFakt As Long

' Kill (App.Path & "\reportMag011.txt")

Set TxtAdoConn = New ADODB.Connection
TxtAdoConn.CursorLocation = adUseClient

TxtAdoConn.Open TXTLink

SQLUpitServeri = "SELECT COUNT(Artikl) AS BrojF, Faktura FROM (SELECT DISTINCT Artikl, Faktura FROM reportMag001.txt) AS Razliciti GROUP BY Faktura"
Set TxtAdoRS = New ADODB.Recordset
TxtAdoRS.Open SQLUpitServeri, TxtAdoConn, adOpenStatic, adLockReadOnly

With TxtAdoRS
     .MoveFirst
      Do While Not .EOF
        A = !BROJF
        B = !Faktura
        If txtRezultat.Text = "" Then
        txtRezultat.Text = "ARTIKLI; FAKTURA" & Chr(13) + Chr(10) & A & "; " & B & Chr(13) & Chr(10)
        ElseIf txtRezultat.Text <> "" Then
        txtRezultat.Text = txtRezultat.Text & A & "; " & B & Chr(13) & Chr(10)
        End If
       .MoveNext
      Loop
End With

With CommonDialog1
   .FileName = App.Path & "\reportMag011.txt"
     Open .FileName For Output As #1
     Print #1, txtRezultat.Text
   Close #1
End With

TxtAdoRS.Close
Set TxtAdoRS = Nothing
TxtAdoConn.Close
Set TxtAdoConn = Nothing
End Sub
[ goranvuc @ 13.01.2008. 18:43 ] @
Castis me posle ovog, izgleda da je Case Sensitive, probaj:
Code:

SELECT COUNT(ARTIKL) AS BrojF, FAKTURA FROM (SELECT DISTINCT ARTIKL, FAKTURA FROM reportMag001.txt) AS Razliciti GROUP BY FAKTURA
[ steve585 @ 13.01.2008. 18:52 ] @
Gdje i kada? Radi!!!!!!!!!!!!!
[ goranvuc @ 13.01.2008. 18:57 ] @
Hajde da rezimiramo sta smo iz ovoga naucili:

1. OLEDB drajver za ODBC je Case Sensitive
2. Ne postoji zona sumraka
3. Ukoliko imate problem vezan za rad sa bazama podataka, pozeljno je uploadovati izvor podataka koji se koristi. Razlog zasto smo izgubili vreme je taj sto sam ja da bih imao iste uslove testiranja napravio fajl sa nazivima kolona "Artikl" i "Faktura" a ti imas "ARTIKL" i "FAKTURA" i naravno - ludilo

P.S. Video sam jos pre nekoliko dana da imas ovaj problem i verovatno bih ti odmah pomogao da si uploadovao projekat. Ja sam uvek voljan da pomognem kod ovakvih "twilight zone" problema ako ne moram da pravim projekt iz pocetka.

Sto se tice cascenja - bice prilike, bitno da smo resili problem.

Srecno!