[ niknen @ 19.04.2007. 13:47 ] @
| kako da napravim da kada promenim mesto linkovane baze aplikacija me pita npr izaberi mesto gde se nalazi baza. A kada ponovo ulazimo u aplikaciju da ako sam namestio novu lokaciju da me ne pita opet da izaberem lokaciju nego da proveri pa ako je lokacija dobra otvori formu a ako nije da mi opet izbaci msgbox da izaberem mesto gde se nalazi baza.
p.s; gledao sam na forumu ali mi nije bas najasnije pa sam zato okacio svoj primer ako neko moze da mi objasni na mom primeru hvala svima unapred pozdrav! |
[ Zidar @ 19.04.2007. 15:03 ] @
Da malo preformulisemo zahtev:
1) Imas aplikaciju u jednom MDB fajlu i podatke u drugom (back end). tako i treba :-)
2) Lokacija back enda se ponekad menja
3) Kad se promeni lokacija back enda, aplikacija to ne zna i ne moze da koristi linkovane tabele
4) Ako j3 3) tacno, zelis da aplikacija prepozna situaciju i da trazi da pokazes lokaciju back enda
Im dva pristupa:
1) pri svakom startovanju aplikacije, trazi da korisnik pokaze gde je back end [pa se onda linkuju sve table, trebalo ne trebalo. Ako ti se back end cesto seli sa mesta na mesto, onda ovo nije tako losa opcija.
2) Aplikacija proveri na startu da li postoje tabele iz kojih se mogu citati podaci. Ako ne psotoje (zato sto se back end preselio) onda usmeri korisnika na formu sa koje se startuje proces pronalazenja back enda i linkovanje.
Za opciju 2) pretpostavis da ako je jedan tabela linkovana dobro onda su sve linkovane dobro. Treba ti nekakva funckija koja proverava da li je moguce citati iz neke table. Izaberes neku linkovanu tabelu, bilo koju, i napravis kveri "SELECT * FROM myTable WHERE 1=2" Ono 1=2 naravno nikad nije tacno i tvoj kveri ce vratiti prazan set ako je tabela linkovana, ili ce doci do RUN TIME ERROR. funkciji ulovis gresku, pa ako ima greske funkcija vrati jedan rezultat, a ako nema greske funkcija vrati drugi rezultat. Zavisno od rezultata, aplikacija ce pozvati formu za linkovanje ili ce nastaviti normalno sa radom.
Funkcija izgleda otprilike ovako (pseudo kod, cut/paste nece pomoci):
Function IsBackendAvailable() as Boolean
'Funkcija proverava da li je back end tamo gde je bio poslednji put
'Funkcija naravno moze da bude u modulu, a moze i u form-modulu
'startup forme
On Error Goto ERROR_HANDLING
DoCmd.OpenQuery "Tvoj kveri koji kaze SELECt * FROM nekatablea WHERE 1=2"
'Ako je back end premeste, OpenQuery ce da izazove gresku
'i egzekucija programa ida na ERROR_HANDLING, gde ce IsBackendAvailable
'da bude setovano na FALSE
'do ove linije dolzai se samo ako nema runt-time error
IsBackendAvailable = TRUE
EXIT_HERE:
exit function
ERROR_HANDLING:
Select Case Err.Number
case X 'x je broj greske koju dobijes kad je back end premesten
msgbox "Back end je premesten"
IsBackendAvailable = FALSE
resume EXIT_HERE
End Select
End Function
Onda negde u start up formi, recima na OnOpen, ili na neko dugme koje se mora pritisnuti da se nastavi rad, stavis nesto ovako:
IF IsBackendAvailable=TRUE THEN
.. otvori prvu 'radnu' formu aplikacije
ELSE
.. otvori formu za linkovanje
ENDIF
Na formi za linkovanje, na OnClose, vratis se na start up formu ili ides na prvu radnu formu aplikacije.
Eto ti ideje, pa malo poradi na tome.
Predpostavljam da umes da otvoris file dialog box programski i da programski prelinkujes tabele. Ako ne umes, onda potrazi neku knjigu, predugacko je da na forumu objasnjavamo kako se to radi.
[ niknen @ 19.04.2007. 23:05 ] @
ok odprilike sam skapirao evo napravio sam da kada mi se otvori aplikacija da ako nije prepoznao putanju baze otvori formu da linkujem tabelu ali kako da napravim da kada je recimo tabela dobro linkovana da mi ne prikazuje tu formu za linkovanje nego otvori normalno tu moju glavnu formu na kojoj su podaci. Evo molim te pogledaj pa ako mozes da mi pomognes sa kodom koji treba da proveri da li treba ili ne pozdrav1
[ niknen @ 20.04.2007. 00:18 ] @
evo ovde gore sam ti okacio da vidis sta me muci! :-( Dakle radi mi to povezivanje sa linkovanim tabelama ali kada god otvorim program on me na pocetku pita da linkujem tabele kako mogu da uradim neku proveru pre otvaranja da ako su linkovane otvori glavnu formu e a ako nisu onda da mi izbaci ovu formu za linkovanje!!:-( Please help me zezam se sa ovim poludeo sam vise ne mogu da provalim! hvala ti unapred
[Ovu poruku je menjao niknen dana 20.04.2007. u 03:51 GMT+1]
[Ovu poruku je menjao niknen dana 20.04.2007. u 03:52 GMT+1]
[ srdjan ub @ 20.04.2007. 09:42 ] @
Napraviš novi modul i u njega ubaciš kod:
Code:
Function IsLinked(strTableName As String) As Boolean
'Purpose: check if tables are linked OK
'strTableName - any of linked tables
'Returns = tRUE if all is OK, FALSE if relinking is needed
'Example: ? IsLinked("tblRoba")
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Dim flgRetval As Boolean
On Error GoTo ERROR_HANDLER:
strSQL = "SELECT * FROM " & strTableName & " WHERE FALSE"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
flgRetval = True
EXIT_HERE:
IsLinked = flgRetval
Exit Function
ERROR_HANDLER:
Select Case Err.Number
Case 3024
'do nothing, no message!
'3024 is "Could not find the file ' ... where table strTableName is suposed to b
Case Else
MsgBox "IsLinked() ERROR " & Err.Number & vbCrLf & Err.Description
End Select
Resume EXIT_HERE
End Function
Zatim tu funkciju opozoveš recimo na OnOpen ulazne (logon) forme ili na neko dugme na formi, primer:
Code:
Private Sub Command0_Click()
If IsLinked("tblTABELA") Then
Call OpenForm("frmTABELA_koju pozivas")
Else
Call OpenForm("frmLinkovanje")
End If
DoCmd.Close acForm, Me.Name
End Sub
Pozdrav
[ niknen @ 21.04.2007. 12:16 ] @
uradio sam sve i nece da mi radi sto je najgore ne prijavljuje mi ni jednu gresku ne znam gde sam zeznuo stvar? Ti nije problem imas gore primen da mi na njemu objasnis?
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.