zxz 23.02.2014 14:41
Predmet:Re: Relink sa više kompjutera

PreuzmiIzvorni kôd (Visual Basic):
  1. Function Relink_Godina(Godina As String)
  2. Dim Db As Database
  3. Dim Rs As Recordset
  4. Dim Tdf As TableDef
  5. Dim SQL As String
  6. Dim ImeTabele As String, Putanja As String
  7.  
  8. Set Db = CurrentDb
  9. SQL = "SELECT Database,Name FROM MSysObjects WHERE Database Like '*20??_be*' ORDER By Database"
  10. Set Rs = Db.OpenRecordset(SQL)
  11. Do While Not Rs.EOF
  12. ImeTabele = Rs!Name
  13. Putanja = Rs!Database
  14. Putanja_Godina Putanja, Godina
  15. Set Tdf = Db.TableDefs(ImeTabele)
  16. Tdf.Connect = ";DATABASE=" & Putanja
  17. err = 0
  18. On Error Resume Next
  19. Tdf.RefreshLink
  20.     If err <> 0 Then
  21.     MsgBox "Ne postoji baza"
  22.     Exit Function
  23.     End If
  24. Rs.MoveNext
  25. Loop
  26. MsgBox "Linkovana:" & vbCr & Godina & "_ta godina"
  27. End Function
  28.  
  29. Function Putanja_Godina(Baza As String, LinkGodina As String)
  30. Dim Polozaj As Integer
  31.  
  32. Polozaj = InStr(1, Baza, "_be.mdb") - 4
  33. Mid(Baza, Polozaj) = LinkGodina & "_be.mdb"
  34. End Function
Evo relink za godine.
Trebalo bi jos napraviti kod za combo box iz kog ce se birati i pokretati ova procedura.
U njemu moras imati sve godine koje imaju bazu na disku.

pmiroslav 23.02.2014 09:23
Predmet:Re: Relink sa više kompjutera

Citiraj zxz:
Da pitam ponovo ne vidjeh da si odgovorio:
Jeli možemo uzeti za pravilo da relinkujemo samo tabele iz baze koja ima u nazivu broj godine.
Jeli to pravio.
Ako nije onda moramo napraviti tabelu.
Pa zapravo imam više kombinacija.
1. Imam FE_bazu koja se zove 'Prodaja.mdb' u njoj su oko 40 linkanih tablica iz 'Prodaja_2014_be.mdb' i 2 linkane tablice iz 'Proces_be.mdb'
    Proces_be se uvijek zove tako, a 'Prodaja_2014_be.mdb' se mijenja (Prodaja_2013_be.mdb, Prodaja_2012_be.mdb itd)

2. Imam FE_bazu koja se zove 'Proces.mdb' u njoj su oko 50 linkanih tablica iz 'Proces_be.mdb' i 2 linkane tablice iz 'Skladiste_2014_be.mdb'
    Proces_be se uvijek zove tako, a 'Skladiste_2014_be.mdb' se mijenja (Skladiste_2013_be.mdb, Skladiste_2012_be.mdb itd)

3. Imam FE_bazu koja se zove 'Skladiste.mdb' u njoj su oko 40 linkanih tablica iz 'Skladiste_2014_be.mdb' i 2 linkane tablice iz 'Proces.mdb'
    Proces_be se uvijek zove tako, a 'Skladiste_2014_be.mdb' se mijenja (Skladiste_2013_be.mdb, Skladiste_2012_be.mdb itd)

Znači na serveru je baza Proces_be.mdb koja je uvijek ista
te baze Prodaja_2014_be.mdb i Skladiste_2014_be.mdb gdje se prefiks godine mijenje jer se svake godine pravi nova prazna baza, a ponekad se iz aplikacije treba prelinkata na neku od predhodnih godina da bi se vidjeli neki arhivirani podaci.

zxz 23.02.2014 19:08
Predmet:Re: Relink sa više kompjutera

Naravno da se moze kod izmijeniti samo malo.
Ako ti to bude trebalo ili ti to vec treba tako.
Mogu biti razlicite putanje od razlicitih baza ali ne od razlicitih godina.
Nisam siguran da ti to treba ali i ako treba samo malo treba doraditi kod.

pmiroslav 23.02.2014 19:17
Predmet:Re: Relink sa više kompjutera

Ovo gore je fantastično za korisnika, ali ja kao programer često neÅ¡to dorađujem na bazi i tada mi treba da se prelinkujem sa originalnih radnih tablica na neke probne koje su na drugoj putanji. Tada ne trebam mijenjati godinu već može ostati ona koja je i bila.

zxz 23.02.2014 19:21
Predmet:Re: Relink sa više kompjutera

Aha ok postavit cemo opcionalnu variablu pa kad je ukucas da ti ponudi novu putanju.

pmiroslav 23.02.2014 18:49
Predmet:Re: Relink sa više kompjutera

Ovo sam isprobao i radi fantastično (nisam ni sumnjao). Ali... samo ako je linkovana baza na istoj putanji.
Može li se nekako uraditi da se može birati i putanja ako se ona eventualno promjeni?

zxz 23.02.2014 20:54
Predmet:Re: Relink sa više kompjutera

Evo prepravljena procedura pa probaj.
PreuzmiIzvorni kôd (Visual Basic):
  1. Function Relink_Godina(Godina As String)
  2. Dim Db As Database
  3. Dim Rs As Recordset
  4. Dim Tdf As TableDef
  5. Dim SQL As String
  6. Dim ImeTabele As String, Putanja As String
  7. Dim R As String
  8. Dim Link As Boolean
  9.  
  10. Set Db = CurrentDb
  11. SQL = "SELECT Database,Name FROM MSysObjects WHERE Database Like '*20??_be*' ORDER By Database"
  12. Set Rs = Db.OpenRecordset(SQL)
  13. Do While Not Rs.EOF
  14. ImeTabele = Rs!Name
  15. If Link = False Then
  16. Putanja = Rs!Database
  17. End If
  18. Putanja_Godina Putanja, Godina
  19. Set Tdf = Db.TableDefs(ImeTabele)
  20. Tdf.Connect = ";DATABASE=" & Putanja
  21. err = 0
  22. On Error Resume Next
  23.     Tdf.RefreshLink
  24.     If err <> 0 Then
  25.     Dim iResponse As String
  26.     R = MsgBox("Ne postoji baza na putanji:" & vbCrLf & Putanja & vbCrLf & _
  27.     "Nova putanja?  ", vbOKCancel + vbExclamation + vbApplicationModal + vbDefaultButton1, Putanja)
  28.           If R = vbOK Then
  29.            Link = True
  30.            Putanja = NadjiBazu("")
  31.           Else
  32.           Exit Function
  33.           End If
  34.        
  35.     End If
  36. Rs.MoveNext
  37. Loop
  38. MsgBox "Linkovana:" & vbCr & Godina & "_ta godina"
  39. End Function
  40.  
  41. Function Putanja_Godina(Baza As String, LinkGodina As String)
  42. Dim Polozaj As Integer
  43.  
  44. Polozaj = InStr(1, Baza, "_be.mdb") - 4
  45. Mid(Baza, Polozaj) = LinkGodina & "_be.mdb"
  46. End Function

pmiroslav 23.02.2014 21:09
Predmet:Re: Relink sa više kompjutera

Greška: Sub or Function not defined
na liniji
Putanja = NadjiBazu("")

zxz 23.02.2014 21:12
Predmet:Re: Relink sa više kompjutera

hehe pa to je tvoj modul u kome se nalazi ta procedura kojoj si ti dao ime.
modLinkovanje
Mozda ga nemas u toj bazi.
Ja nisam nista tu htio mijenjati jer pretpostavljam da to koristis i to sam i ja koristio u svim ovim procedurama.

pmiroslav 23.02.2014 21:40
Predmet:Re: Relink sa više kompjutera

Citiraj zxz:

Ovu proceduru trebas pozvati pri podizanju baze.
Netrebaju ti vise tvoje procedure:
RelinkTables1
RefreshLinks1
ProvjeraLinka
IsLinked

Ovo si mi napisao prije pa sam to obrisao iz ove baze sa kojom isprobavam. Našao sam te funkcije i sada je OK.