|
[ Boki1974 @ 28.12.2004. 15:45 ] @
| Pozdrav svima!
Imam problem, koji rješavam već dugo, ali bez uspjeha. Želim ga podijeliti i sa vama, i zatražiti pomoć i sugestije u njegovom rješavanju. Naime, pokušavam stvoriti jednu bazu podataka, koja bi, na primjer, sadržala podatke o letovima između aerodroma.
Kreirao sam naredne table:
- „AERODROMI“, gdje je svaki aerodrom predstavljen id-om ( AerodromID ) i imenom aerodroma ( ImeAerodroma ).
- „AVIOKOMPANIJE“, gdje je svaka aviokompanija predstavljena id-om ( KompanijaID ) i imenom kompanije( ImeKompanije )
- „TIPOVI AVIONA“, gdje je svaki avion predstavljen id-om ( AvionID ) i opisom aviona ( TipAviona )
- „TARIFE“, gdje je svaka tarifa predstavljena id-om ( TarifaID ) i opisom tarife ( OpisTarife )
- „TARIFE NA RELACIJAMA“, gdje su sadržani id relacije ( RelacijaID ), id tarife ( TarifaID ) i cijena ( Cijena )
1. Želim da kreiram glavni formular, na kojem će se putem selekcije iz combo-boxova „POLAZIŠTE“ I „DOLAZIŠTE“ odrediti polazni i dolazni aerodromi, nakon čega će na subformularu koji je uključen u ovaj glavni formular biti izlistane sve mogućnosti za datu relaciju. Kako ? Koje procedure moraju biti izvedene, da bi nakon selektiranja cijela baza bila pročešljana i traženi let ili letovi bili pokazani na subformularu ?
Slikovito:
1. ) Selekcija polaznog i dolaznog aerodroma
Polazni aerodrom: Frankfurt Dolazni aerodrom: Amsterdam
2. ) Nakon selekcije, baza biva pročešljana i na subformularu dobivam rezultate o traženom letu :
Kod leta Kompanija Avion Polazak Dolazak Trajanje leta Servis
LH500 Lufthansa A320 08:00 09:00 01:00 Breakfast
KL300 KLM A319 10:00 11:00 01:30 Breakfast
Znači, koja je to čarobna procedura kojom mogu „natjerati“ Access da prečešlja bazu i da mi izbaci tražene podatke ? |
[ BiloKoje @ 28.12.2004. 17:36 ] @
Nema čarobne formule, ovo je malo ozbiljnije, ali mi strašno liči na primer iz jedne kjige (relacije, normalizacije i sl.). Knjiga mi nije pri ruci, ako bude interesantno sutra, kažem ti autora i dr.
[ Boki1974 @ 28.12.2004. 19:25 ] @
Citat: BiloKoje: Nema čarobne formule, ovo je malo ozbiljnije, ali mi strašno liči na primer iz jedne kjige (relacije, normalizacije i sl.). Knjiga mi nije pri ruci, ako bude interesantno sutra, kažem ti autora i dr.
************************************************************
Prvo, da ti se zahvalim, jer si probio led, obzirom, da je ovo izgleda malo komplikovanija stvar !
Da prvo sebi nešto razjasnim, a možda tebe i ostale koji se pozabave ovim navede na razmišljanje ( by the way, ja lupam glavu već mjesecima): ono što je ključno, jeste da nakon selekcije polaznog i dolaznog aerodroma putem combo-boxova, MORA BITI POKRENUTA PROCEDURA, koja će uputiti Access da češlja, najvjerovatnije query, koji sadrži sve tražene podatke. Taj query je sigurno stvoren iz 4 tabele: POLAZNI AERODROM, DOLAZNI AERODROM, KOMPANIJE, TIPOVI AVIONA, I TARIFE NA RELACIJAMA.
Eh, sad...
Idući prema mojoj inuticiji, morao bi se koristiti statement koji otprilike ovako izgleda:
Select * FROM tbl WHERE PolazišteID="FRA" & DolazišteID="AMS"
Samo...Svaki put, kada putem combo-boxova selektiram nova polazišta i dolazišta, ovaj gore navedeni statement će morati sadržati NOVE vrijednosti između navodnih znakova, dakle ne više FRA i AMS ! Šta se onda mora koristiti na poziciji, gdje idu kodovi aerodroma ?
U biti, ovdje postoji jedan problem, koji se grana na više njih. Samim tim, izgleda da imamo mnogo gradiva za razmišljanje :-)
[ rribaric @ 28.12.2004. 22:43 ] @
Neznam koliko ću ti moć pomoć jer vidim da ovo treba postavit od samog početka.Ali koliko vidim tebe muči I pitanje kako ćeš u sql izkazu promijenit tražene vrijednosti.
Ovo ti je jedan kod koji meni iz dva kombo boxa pretražuje bazu na osnovu unijetih kriterija.U prvi combobox cbological upisujem gdje (koju kolonu)pretražujem.A u drugom comboxu upisujem što tražim.
To bi moglo biti riješenje za dio tvog problema.Kako promijenit vrijednosti u sql izrazu.
[blue
“Samo...Svaki put, kada putem combo-boxova selektiram nova polazišta i dolazišta, ovaj gore navedeni statement će morati sadržati NOVE vrijednosti između navodnih znakova, dakle ne više FRA i AMS ! Šta se onda mora koristiti na poziciji, gdje idu kodovi aerodroma ?”]
Znači da u formi imaš dva comboboxa a u kodu ih onda stavi u ovisnosti o sql izkazu.
Ja ti ovako za sad mogu pomoć.Ti dalje to radi pa navedi konkretni problem a onda ćemo probat nać to riješenje!
Private Sub cmdRunQuery_Click()
Dim strSQL As String
On Error GoTo Err_cmdRunQuery_Click
DoCmd.maximize
‘ako je vrijednost u comboxu “” prekida izvršenje
If IsNull(Me!cboLogical) Or IsNull(Me!txtCostCenter) Then
MsgBox "NISTE UNIJELI KRITERIJ ZA PRETRAZIVANJE"
Exit Sub
End If
Rem MsgBox " tu sam " & Year([Datum Nabave]) & "unos" & Year(Me![txtCostCenter])
'*** create the string based on the information on the form
strSQL = "SELECT amortizacija.* FROM amortizacija WHERE "
If (Me![cboLogical] = "Naziv sredstva") Then
strSQL = strSQL & " LTRIM([Naziv sredstva]) like """ & Me![txtCostCenter] & """"
End If
If (Me![cboLogical] = "Konto") Then
strSQL = strSQL & "[konto] like """ & Me![txtCostCenter] & """"
End If
If (Me![cboLogical] = "Datum Nabave") Then
strSQL = strSQL & "Year([Datum Nabave]) like """ & Year(Me![txtCostCenter]) & """"
End If
'*** set the record source
Me.RecordSource = strSQL
Me.Requery
Me!txtCostCenter.DefaultValue = ""
Me!txtCostCenter.Enabled = False
Me!cboLogical.DefaultValue = ""
Me!cboLogical.Enabled = True
Me!txtCostCenter.InputMask = ""
Exit_cmdRunQuery_Click:
Exit Sub
Err_cmdRunQuery_Click:
MsgBox Err.Description
Resume Exit_cmdRunQuery_Click
End Sub
[ Boki1974 @ 28.12.2004. 23:31 ] @
Pozdrav !
Jako mi je drago, da je ovaj problem zainteresirao neke od nas. Zahvaljujem ti se na ovoj ideji, i pokušaću je primjeniti u praksi. Naravno, očekujem mišljenja i sugestije drugih članova i posjetilaca, tako da zajednički dođemo do najboljeg rješenja.
U svakom slučaju, ako bi želio, mogu ti putem mail-a proslijediti ono što već imam od baze, pa da i ti o tome daš svoje mišljenje.
Pozdrav !
Boris
***************************************************************
Citat: rribaric: Neznam koliko ću ti moć pomoć jer vidim da ovo treba postavit od samog početka.Ali koliko vidim tebe muči I pitanje kako ćeš u sql izkazu promijenit tražene vrijednosti.
Ovo ti je jedan kod koji meni iz dva kombo boxa pretražuje bazu na osnovu unijetih kriterija.U prvi combobox cbological upisujem gdje (koju kolonu)pretražujem.A u drugom comboxu upisujem što tražim.
To bi moglo biti riješenje za dio tvog problema.Kako promijenit vrijednosti u sql izrazu.
“Samo...Svaki put, kada putem combo-boxova selektiram nova polazišta i dolazišta, ovaj gore navedeni statement će morati sadržati NOVE vrijednosti između navodnih znakova, dakle ne više FRA i AMS ! Šta se onda mora koristiti na poziciji, gdje idu kodovi aerodroma ?”
Znači da u formi imaš dva comboboxa a u kodu ih onda stavi u ovisnosti o sql izkazu.
Ja ti ovako za sad mogu pomoć.Ti dalje to radi pa navedi konkretni problem a onda ćemo probat nać to riješenje!
Private Sub cmdRunQuery_Click()
Dim strSQL As String
On Error GoTo Err_cmdRunQuery_Click
DoCmd.maximize
‘ako je vrijednost u comboxu “” prekida izvršenje
If IsNull(Me!cboLogical) Or IsNull(Me!txtCostCenter) Then
MsgBox "NISTE UNIJELI KRITERIJ ZA PRETRAZIVANJE"
Exit Sub
End If
Rem MsgBox " tu sam " & Year([Datum Nabave]) & "unos" & Year(Me![txtCostCenter])
'*** create the string based on the information on the form
strSQL = "SELECT amortizacija.* FROM amortizacija WHERE "
If (Me![cboLogical] = "Naziv sredstva") Then
strSQL = strSQL & " LTRIM([Naziv sredstva]) like """ & Me![txtCostCenter] & """"
End If
If (Me![cboLogical] = "Konto") Then
strSQL = strSQL & "[konto] like """ & Me![txtCostCenter] & """"
End If
If (Me![cboLogical] = "Datum Nabave") Then
strSQL = strSQL & "Year([Datum Nabave]) like """ & Year(Me![txtCostCenter]) & """"
End If
'*** set the record source
Me.RecordSource = strSQL
Me.Requery
Me!txtCostCenter.DefaultValue = ""
Me!txtCostCenter.Enabled = False
Me!cboLogical.DefaultValue = ""
Me!cboLogical.Enabled = True
Me!txtCostCenter.InputMask = ""
Exit_cmdRunQuery_Click:
Exit Sub
Err_cmdRunQuery_Click:
MsgBox Err.Description
Resume Exit_cmdRunQuery_Click
End Sub
[ Boki1974 @ 29.12.2004. 16:07 ] @
Pozdrav !
Moram da kažem da je došlo do značajnog napretka, koji je djelimično uslovljen tvojim post-om. Međutim, napravio sam značajne promjene u konstrukciji rješenja ovog problema.
Evo o čemu se radi:
1. Kreirao sam tablu koja se zove Letovi, i koja sadrži SVE vrijednosti o jednom letu (LetID, Kompanija, Polazište, Dolazište, VrijemePolaska, VrijemeDolaska, TipAviona)
2. Napravio sam novi query pod nazivom Detalji letova i dodao gore navedenu tablu, ali nisam definirao nikakve vrijednosti u gridu. Snimio sam query.
3. Napravio sam prazan form i nazvao ga Letovi. Dodao sam u njega dva text-box-a koja sam nazvao txtStart i txtEnd. Zatim sam dodao komandno dugme, i nazvao ga cmdResults, sa caption.om "Pregled rezultata"
4. Zatim sam u kod-windows ubacio ovaj kod:
Function BuildSQLString(strSQL As String) As Boolean
Dim strSELECT As String, strFROM As String, strWHERE As String
strSELECT = "*"
strFROM = "[Letovi]"
strWHERE = " AND Polazište = [Forms]![Letovi]![txtStart]"
If Not IsNull(txtStart) Then strWHERE = strWHERE
If Not IsNull(txtEnd) Then strWHERE = strWHERE & " And Dolazište = [Forms]![Letovi]![txtEnd]"
strSQL = "SELECT" & strSELECT
strSQL = strSQL & "FROM" & strFROM
If strWHERE <> "" Then strSQL = strSQL & "WHERE " & Mid$(strWHERE, 6)
BuildSQLString = True
End Function
5. A, kod komandnog dugmeta, u rubriku On Click sam kao Event ubacio naredni kod:
Private Sub cmdResults_Click()
Dim strSQL As String
If Not BuildSQLString(strSQL) Then
MsgBox "Pojavio se problem pri kreiranju SQL stringa"
Exit Sub
End If
CurrentDb.QueryDefs("Detalji letova").SQL = strSQL
RefreshDatabaseWindow
DoCmd.OpenForm "Letovi", , acReadOnly
End Sub
Znači, sve super funkcionira ! Ubacim vrijednosti u text-boxove, pritisnem dugme " "Pregled rezultata", i dobijem izlistane vrijednosti.
Dakle...Jedan dio Sizifovog posla je riješen. Komentari ? Bolje solucije ?? Ideje ???
Tome se iskreno nadam !
******************************************************************
Znači da u formi imaš dva comboboxa a u kodu ih onda stavi u ovisnosti o sql izkazu.
Ja ti ovako za sad mogu pomoć.Ti dalje to radi pa navedi konkretni problem a onda ćemo probat nać to riješenje!
Private Sub cmdRunQuery_Click()
Dim strSQL As String
On Error GoTo Err_cmdRunQuery_Click
DoCmd.maximize
‘ako je vrijednost u comboxu “” prekida izvršenje
If IsNull(Me!cboLogical) Or IsNull(Me!txtCostCenter) Then
MsgBox "NISTE UNIJELI KRITERIJ ZA PRETRAZIVANJE"
Exit Sub
End If
Rem MsgBox " tu sam " & Year([Datum Nabave]) & "unos" & Year(Me![txtCostCenter])
'*** create the string based on the information on the form
strSQL = "SELECT amortizacija.* FROM amortizacija WHERE "
If (Me![cboLogical] = "Naziv sredstva") Then
strSQL = strSQL & " LTRIM([Naziv sredstva]) like """ & Me![txtCostCenter] & """"
End If
If (Me![cboLogical] = "Konto") Then
strSQL = strSQL & "[konto] like """ & Me![txtCostCenter] & """"
End If
If (Me![cboLogical] = "Datum Nabave") Then
strSQL = strSQL & "Year([Datum Nabave]) like """ & Year(Me![txtCostCenter]) & """"
End If
'*** set the record source
Me.RecordSource = strSQL
Me.Requery
Me!txtCostCenter.DefaultValue = ""
Me!txtCostCenter.Enabled = False
Me!cboLogical.DefaultValue = ""
Me!cboLogical.Enabled = True
Me!txtCostCenter.InputMask = ""
Exit_cmdRunQuery_Click:
Exit Sub
Err_cmdRunQuery_Click:
MsgBox Err.Description
Resume Exit_cmdRunQuery_Click
End Sub
[ Boki1974 @ 02.01.2005. 13:31 ] @
Evo, ponovo jedan similaran problem, jer sa iskoristio sasvim drugačiju proceduru od do sada navedenih.
Opis:
Kreirao sam glavni formular, na kome postoji pet combo-boxova, i tri button-a (dugmeta).
Prvo komandno dugme ima naziv „Pretraži“, i dodjeljen mu je OnClick event.
Upravo kod tog OnClick eventa se pojavljuje jedan problem.
Slijedi kod :
Option Compare Database
Option Explicit
Private Sub Pretraži_Click()
Dim strSQL As String, intCounter As Integer
'Build SQL String
For intCounter = 1 To 5
If Me("Filter" & intCounter) <> "" Then
strSQL = strSQL & "[" & Me("Filter" & intCounter).Tag & "] " & " = " & Chr(34) & Me("Filter" & intCounter) & Chr(34) & " And "
End If
Next
If strSQL <> "" Then
'Strip Last " And "
strSQL = left(strSQL, (Len(strSQL) - 5))
'Set the Filter property
Forms![subLetovi].Filter = strSQL
Forms![subLetovi].FilterOn = True
Else
Forms![subLetovi].FilterOn = False
End If
End Sub
Private Sub Poništi_Click()
Dim intCouter As Integer
For intCouter = 1 To 5
Me("Filter" & intCouter) = ""
Next
End Sub
Private Sub Command30_Click()
DoCmd.Close acForm, Me.Form.Name
End Sub
Private Sub Form_Close()
DoCmd.Close acForm, "subLetovi"
DoCmd.Restore
End Sub
Private Sub Form_Open(Cancel As Integer)
DoCmd.OpenForm "subLetovi"
End Sub
Praktična posljedica ovog koda je da mi se istovremeno otvara i formular „subLetovi“ na kojem se ODMAH prikazuju SVI podaci o svim LETOVIMA. Znači: subformular je otvoren PRIJE nego što je primjenjen filter.
Kako je moguće ispraviti ovo ? Znači, kako je moguće prvo isfiltrirati podatke, a onda ih prikazati na form-u „subLetovi“ ?
Doduše, filter savršeno funkcionira. Samo je potrebno ili „sakriti“ subLetovi form za vrijeme pretraživanja, ili ga otvoriti praznog, a njegovo punjenje podacima usljeđuje nakon filtriranja.
[ Zidar @ 05.01.2005. 14:58 ] @
Kad otvaras formu sa letovima, orvori je kao Hidden
Code:
Private Sub Form_Open(Cancel As Integer)
DoCmd.OpenForm formname:="subLetovi",windowmode:=acHidden
End Sub
Onda je postavi da bude Visible nakon sto se odabere i sagradi filter. Dodao sam jednu liniju na kraj procedure Pretrazi_click.
Code:
Private Sub Pretraži_Click()
Dim strSQL As String, intCounter As Integer
'Build SQL String
For intCounter = 1 To 5
If Me("Filter" & intCounter) <> "" Then
strSQL = strSQL & "[" & Me("Filter" & intCounter).Tag & "] " & " = " & Chr(34) & Me("Filter" & intCounter) & Chr(34) & " And "
End If
Next
If strSQL <> "" Then
'Strip Last " And "
strSQL = left(strSQL, (Len(strSQL) - 5))
'Set the Filter property
Forms![subLetovi].Filter = strSQL
Forms![subLetovi].FilterOn = True
Else
Forms![subLetovi].FilterOn = False
End If
'Napravi subLetovi vidljivim
Forms("subLetovi").Visible=TRUE
End Sub
[ Boki1974 @ 06.01.2005. 23:37 ] @
Pozdrav !
Moram se zahvaliti onim članovima ovog foruma koji su mi pokušali pomoći. Ali, evo, želim da kažem da je rješenje pronađeno ! Princip rješenja je sasvim drugačiji nego što je ovdje predloženo, i prilično je nesvakidašnji, malo korišten u praksi i kompliciran. Mada, važno je da se POKUŠA pomoći. Još jednom, hvala na dobrim namjerama !
**************************************************************
Citat: Zidar: Kad otvaras formu sa letovima, orvori je kao Hidden
Code:
Private Sub Form_Open(Cancel As Integer)
DoCmd.OpenForm formname:="subLetovi",windowmode:=acHidden
End Sub
Onda je postavi da bude Visible nakon sto se odabere i sagradi filter. Dodao sam jednu liniju na kraj procedure Pretrazi_click.
Code:
Private Sub Pretraži_Click()
Dim strSQL As String, intCounter As Integer
'Build SQL String
For intCounter = 1 To 5
If Me("Filter" & intCounter) <> "" Then
strSQL = strSQL & "[" & Me("Filter" & intCounter).Tag & "] " & " = " & Chr(34) & Me("Filter" & intCounter) & Chr(34) & " And "
End If
Next
If strSQL <> "" Then
'Strip Last " And "
strSQL = left(strSQL, (Len(strSQL) - 5))
'Set the Filter property
Forms![subLetovi].Filter = strSQL
Forms![subLetovi].FilterOn = True
Else
Forms![subLetovi].FilterOn = False
End If
'Napravi subLetovi vidljivim
Forms("subLetovi").Visible=TRUE
End Sub
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|