Bosna i Hercegovina



#1 22.09.2011-07:56
pmiroslav Offline
Clan
Registrovan/a od: 02.02.2009-10:32
Komentari: 1,376


Subject: Razika između Last i Max funkcije
U bazi koristim slijedeću proceduru za zamjenu Autonumber-a o kojoj smo prije raspravljali:
DownloadIzvorni kod (vb.net):
  1. Function SifraN()
  2.  
  3. Dim DB As Database
  4. Dim SQL As String
  5. Dim Rs As Recordset
  6. Dim I As String
  7.  
  8. Set DB = CurrentDb
  9. SQL = "SELECT Last(PROCES.ID) AS LastOfID " & "FROM PROCES"
  10. Set Rs = DB.OpenRecordset(SQL)
  11. If Format$(Rs.Fields(0)) <> "" Then
  12. I = Val(Rs.Fields(0))
  13. End If
  14. I = I + 1
  15. SifraN = Format(I, "0000000")
  16. Rs.Close
  17. Set DB = Nothing
  18.  
  19. End Function

Do jučer je sve radilo kako treba i onda odjednom se podatak ID počeo odjednom duplirati.

nakon što sam u dijelu funkcije:
SQL = "SELECT Last(PROCES.ID) AS LastOfID " & "FROM PROCES"
Last promjenio u Max sada sve opet radi kako treba:

Napravio sam i dva query-a sa Last i Max i oni mi ne daju isti rezultat.
Zanima me u čemu je razlika između Last i Max.
Pozdrav
↑  ↓

#2 22.09.2011-09:49
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,813


Subject: Re: Razika između Last i Max funkcije
Last je zadnji uneseni.
Max je najveci.

Last je sigurnije i ja nikada nisam imao problema. Problemi mogu naici ako se mijenja sifra, sto znaci da ivrsimo izmjenu neke sifre koja nije zadnja.

Sad ako je polje brojcano PROCES.ID i sa max nebi trebalo biti problema.
Pozdrav
↑  ↓

#3 22.09.2011-10:02
pmiroslav Offline
Clan
Registrovan/a od: 02.02.2009-10:32
Komentari: 1,376


Subject: Re: Razika između Last i Max funkcije
Polje nije brojčano več tekst u obliku 0012395.
Access baza u kojoj radi podljeljena je na Front i Back i u međuvremenu sam primjetio da kada sam napravoi Compact BackEnd dijela da su mi se ID podaci opet počeli ponašati normalno.

Sada je problem da se ovo više nebi dešavalo, kako raditi Compact BackEnd dijela baze kada se on obično ne otvara več se otvara samo FronEnd dio baze,
Pozdrav
↑  ↓

#4 22.09.2011-10:29
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,813


Subject: Re: Razika između Last i Max funkcije
Pa uvijek se radi kompakt BackEnd, FronEnd je valčjda aplikacija i kodom i nemozes uraditi kompakt jer je podignuta.
Svi podaci su u BackEnd.
Mozes jos promijeniti ovo:
SELECT Last(PROCES.ID) AS LastOfID " & "FROM PROCES"
u
SELECT Max(Val(PROCES.ID)) AS Najveci FROM PROCES"
Pozdrav
↑  ↓

#5 22.09.2011-10:33
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,813


Subject: Re: Razika između Last i Max funkcije
DownloadIzvorni kod (Visual Basic):
  1. Function Kompakt()
  2. Dim StaroIme As String
  3. Dim NovoIme As String
  4.  
  5. 'On Error Resume Next
  6.  
  7. StaroIme ="Imesa putanjom do be baze"
  8. NovoIme = "Putanjadobebaze "\Nova.mdb"
  9.    If Dir(NovoIme) <> "" Then _
  10.        Kill NovoIme
  11.    DBEngine.CompactDatabase StaroIme, _
  12.        NovoIme
  13.        Kill StaroIme
  14.        Name NovoIme As StaroIme
  15. MsgBox "Baza je servisirana"
  16. End Function

Pozdrav
↑  ↓

#6 22.09.2011-13:23
pmiroslav Offline
Clan
Registrovan/a od: 02.02.2009-10:32
Komentari: 1,376


Subject: Re: Razika između Last i Max funkcije
Tražio sam malo sa Googlom i našao slijedeču funkciju koja je interesantna jer sa njome se može:
1) Izraditi backup kopiju baze
2) Napraviti kompakt baze i preimenovati je
3) Napraviti samo kompakt baze

DownloadIzvorni kod (vb.net):
  1. Public Sub Compact_MDB(()
  2. Dim PutanjaBaze As String, staroImeBaze As String, novoImeBaze As String, DbBackup As String
  3. Dim Response As Integer, fs As Object
  4. PutanjaBaze = Application.CurrentProject.Path
  5. staroImeBaze = "Proces_be" & ".mdb"   ' ovdje staviti ime svoje baze, putanja nije potrebna
  6. novoImeBaze = "Proces_BeNew" & ".mdb"
  7. DbBackup = Mid(staroImeBaze, 1, Len(staroImeBaze) - 4) & "_" & Format(Date, "mmddyy") & ".mdb"
  8. Response = MsgBox("Želite li napraviti Back-Up kopiju ove baze koja e se zvati " & vbCrLf & "'" & DbBackup & "'", vbYesNo, "Continue")
  9. If Response = vbYes Then
  10. Set fs = CreateObject("Scripting.FileSystemObject")
  11. fs.CopyFile PutanjaBaze & "\" & staroImeBaze, PutanjaBaze & "\" & DbBackup
  12. Set fs = Nothing
  13. Else
  14. If MsgBox("Želite li uraditi kompakt ove baze i preimenovati je kao " & vbCrLf & "'" & novoImeBaze & "'", vbYesNo, "Continue") = vbYes Then
  15. Set fs = CreateObject("Scripting.FileSystemObject")
  16. fs.CopyFile PutanjaBaze & "\" & staroImeBaze, PutanjaBaze & "\" & DbBackup
  17. DBEngine.CompactDatabase PutanjaBaze & "\" & DbBackup, PutanjaBaze & "\" & novoImeBaze
  18. Kill PutanjaBaze & "\" & DbBackup
  19. Set fs = Nothing
  20. Else
  21. If MsgBox("Želite li uraditi samo kompakt ove baze?", vbYesNo, "Continue") = vbYes Then
  22. CommandBars("Menu Bar"). _
  23. Controls("Tools"). _
  24. Controls("Database utilities"). _
  25. Controls("Compact and repair database..."). _
  26. accDoDefaultAction
  27. Else
  28. DoCmd.CancelEvent
  29. End If
  30. End If
  31. End If
  32. End Sub

Pozdrav
Ovaj komentar je mijenjan 2 puta. zadnja izmjena 22.09.2011-13:24 od strane pmiroslav. ↑  ↓

#7 22.09.2011-13:27
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,813


Subject: Re: Razika između Last i Max funkcije
Mogao si je staviti i u koristan kod.
Jedina moja neka zamjerka je jer radi preko menija compact.
Za one koji hoce raditi compakt trenutno podignute baze je jedino rjesenje.
Pozdrav
↑  ↓

#8 22.09.2011-13:44
pmiroslav Offline
Clan
Registrovan/a od: 02.02.2009-10:32
Komentari: 1,376


Subject: Re: Razika između Last i Max funkcije
Citat od zxz:
Za one koji hoce raditi compakt trenutno podignute baze je jedino rjesenje.
U tome i jest stvar. Jer na moj BackEnd znaju biti prikvačena i 4-5 korisnika pa se onda ne možeš ništa raditi na bazi.
Pa me zanima što se dešava ako se radi Kompat baze, a neki od korisnika radi sa njom?
Pozdrav
↑  ↓

#9 22.09.2011-15:04
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,813


Subject: Re: Razika između Last i Max funkcije
Mozes na 2 nacina.
Jedan je da provjeravas jeli koji korisnik nakacen te ako nije tada uraditi.
Mislim da negdje ima i procedura koja provjerava jeli koji korisnik nakacen na bazu.
Drugi nacin je da ostavis jedno polje u bazi u nekoj od tabela napr. provjera.
Ta tabela moze imati samo jedan red podataka. Ja napr. imam takvu tabelu gdje upisujem podatke o korisniku programa.

Sada u to polje kada pokrenes compakt upises napr beoj 1.
Sve app. provjeravju non stop ovu vrijednost te ako nadju 1 izbaci se msg box da ce se napr. za 3 min. app. zatvoriti.
Pri zatvaranju se pise u ovo polje 1+1 =2 sledeci 2+1=3 itd.
Kada se sve zatvore odradi se compakt.

Da napomenem.
Nemora se app. cijela zatvoriti, samo je bitno da se ne koriste tabele iz udaljene baze.
Pozdrav
↑  ↓

Stranice (1): 1


All times are GMT +01:00. Current time: 11.12.2018-00:10.