[ Zidar @ 28.04.2004. 17:59 ] @
Na ovaj topik mozete da odgovarate tako sto cete nam pokazati vasu omiljenu korisnicku funkciju ili metod rada, nesto nedokumentovano o Accessu ili sta god mislite da bi nekome drugome moglo biti od koristi. Nemojte odgovarati na tudje postove ovde. Ako osecate potrebu da odgovorite ili se nadovezete na neki post, molim da to izdvojite kao posebnu temu i onda cemo da se prepiremo do mile volje, ali ne ovde.

Da bi olaksali pretrazivanje, molim da svaki post u ovoj temo pocnete opisom oblasti na koju se post odnosi. Za pocetak, evo oblasti: QUERY, Reports, Forms, VBA, Macros.

Ja cu sad sam sebi da odgovorim na ovo jednim postom na temu Query, da pokazemo primer kako bi to trebalo da izgleda.
[ Zidar @ 28.04.2004. 18:29 ] @
QUERY

(Q) Kako kvqrijem procitati nazive objekata u tekucem MDB fajlu(queries /forms/ table/ reports/ modules/ macros) ?

(A) Accessova systemska tabela MsysObjects sadrzi listu svih database objekata. Ovo nije dokumentovano niti podrzano od strane Microsofta, ali radi. Tabelu MsysObjects mozete videti ako idete na Tools/Options/View i cekirete System Objects.

Paznja: Od verzije do verzije Accessa, Microsft moze da promeni strukturu i sadzaj tabele MsySObjects, pa mozete da experimentisete malo ako treba. Sistemske tabele su read-only, pa nema straha da cete nesto pokvariti.




'******************** Code Start ************************
Da dobijete listu objekata iz tekuceg MDB fajla, mozete koristiti sledec kverije:

Queries:
SELECT MsysObjects.Name, MsysObjects.Name
FROM MsysObjects
WHERE (
((MsysObjects.Name) Not Like "~*")
AND ((MsysObjects.Type)=5)
)
ORDER BY MsysObjects.Name;



Forms:
SELECT MSysObjects.Name FROM MsysObjects
WHERE (
((MsysObjects.Type)=-32768)
AND ((MsysObjects.Name) Not Like "~*")
)
ORDER BY MsysObjects.Name;

Tables:
SELECT Name, Type, Name, Name, Connect, Database
FROM MsysObjects
WHERE (((Type) In (4,1,6)) AND ((Name) Not Like "Msys*") AND ((Name) Not Like "~*"))
ORDER BY Name;
Paznja: MSysObjects.Type je razlicit za lokalne, attachovane i ODBC tabele. Za ODBC tabele (SQL, ORACLE) polje Connect ce imati neki sdrzaj, za attachovane tabele polje Database imace neki sadrzaj, a za lokalne oba polja su NULL

Reports:
SELECT MSysObjects.Name
FROM MsysObjects
WHERE (
((MsysObjects.Type)=-32764)
AND ((MsysObjects.Name) Not Like "~*")
)
ORDER BY MsysObjects.Name;

Modules:
SELECT MsysObjects.Name, MsysObjects.Name
FROM MsysObjects
WHERE (
((MsysObjects.Type)=-32761)
AND ((MsysObjects.Name) Not Like "~*")
)
ORDER BY MsysObjects.Name;


Macros:
SELECT MSysObjects.Name FROM MsysObjects
WHERE (
((MsysObjects.Type)=-32766)
AND ((MsysObjects.Name) Not Like "~*")
)
ORDER BY MsysObjects.Name;

'******************** Code End ************************
[ Zidar @ 28.04.2004. 18:46 ] @
DATUMSKE FUNKCIJE

Kako se racuna starost osobe, na odredjeni dan, ako je zadat rodjendanski datum. Na primer, ako ste rodjeni 12 Oct 1991, 10 Oct 2001 imacete 9 godina, a 16 oct 2001 imacete 10 godina.

(A) Evo nekoliko funkcija koje to rade:

Ako pretpostavimo da se polje sa datumom rodjenja zove [BDate] i da je data ype date, sledeci izraz movraca godine starosti. Moze se koristiti i u kveriju, bice brze nego koristiti korisnicke funkcije:

Age=DateDiff("yyyy", [Bdate], Now())+ _
Int( Format(now(), "mmdd") < Format( [Bdate], "mmdd") )

Opcije: Mogu se koristiti i sledece dve funkcije:

a) vraca srtarost u godinama:
Function Age(Bdate, DateToday) As Integer
' Returns the Age in years between 2 dates
' Doesn't handle negative date ranges i.e. Bdate > DateToday

If Month(DateToday) < Month(Bdate) Or (Month(DateToday) = _
Month(Bdate) And Day(DateToday) < Day(Bdate)) Then
Age = Year(DateToday) - Year(Bdate) - 1
Else
Age = Year(DateToday) - Year(Bdate)
End If
End Function

b) Jos jedna detaljna funkcija, racuna starost u godinama, mesecima i danima

'--- CODE START ---
Public Sub CalcAge(vDate1 As Date, vdate2 As Date, ByRef vYears As Integer,
ByRef vMonths As Integer, ByRef vDays As Integer)
' Comments : calculates the age in Years, Months and Days
' Parameters:
' vDate1 - D.O.B.
' vDate2 - Date to calculate age based on
' vYears - will hold the Years difference
' vMonths - will hold the Months difference
' vDays - will hold the Days difference
vMonths = DateDiff("m", vDate1, vdate2)
vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
If vDays < 0 Then
' wierd way that DateDiff works, fix it here
vMonths = vMonths - 1
vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
End If
vYears = vMonths \ 12 ' integer division
vMonths = vMonths Mod 12 ' only want leftover less than one year
End Sub
'--- CODE END ---
[ Zidar @ 28.04.2004. 18:59 ] @
QUERY

Kako napraviti da u kveriju svaki rekord ima u nekom polju sumu svih rekorda pre njega (running sum query)?

Ovo mozemo da uradimo ako data set koji sumiramo ima autonumber polje ili numericki jedinstveni kjuc za svaki red koji kveri vraca.
RunningSum query koristi subquery da sumira sve rekorde gde je kljuc manji ili jednak tekucem. Na primer:

RunningSum: (Select Sum (OrderTotal) FROM [Orders] as Temp
WHERE [Temp].[OrderID] <= [Orders].[OrderID])

Za velike setove podataka, ovakav query moze da bude dosta spor.
Ako vam running total treba za prikazivanje u izvestaju, bolje je koristiti properti RunningSum za kontrolu na reportu. radi mnogo brze nego query-subquery.
[ Zidar @ 28.04.2004. 19:11 ] @
VBA

Kako iz VBA koda aktivirati zvuk? Funkcija PlaySound se poziva kao
=PlaySound("C:\WINDOWS\media\chord.wav")

WAV fajlovi proizvode bazicne zvuke. Ima i zvuk registar kase, sudar automobila, pucanje stakla, skripa kocnica, pa pustite masti navolju, pa kad korisnik unese nesto lose, e onda ga upucajte zvukom pistolja. :-)

'******* CODE START

Option Compare Database
Option Explicit

Declare Function apisndPlaySound Lib "winmm" Alias "sndPlaySoundA" _
(ByVal filename As String, ByVal snd_async As Long) As Long


Function PlaySound(sWavFile As String)
' Purpose: Plays a sound.
' Argument: the full path and file name.
'call: PlaySound("C:\WINDOWS\media\chord.wav")
If apisndPlaySound(sWavFile, 1) = 0 Then
MsgBox "The Sound Did Not Play!"
End If
End Function

'****** CODE END
[ Zidar @ 29.04.2004. 15:23 ] @
FORMS
- Kako upotrebiti Combo Box da se forma pozicionira na trazeni rekord

Upozorenje: U Access 97 iranijim verzijama ovo moze da izazove bookmark bug .
Vidi site http://members.iinet.net.au/~allenbrowne/BugBookmark.html
Ako dobijete Error u Accessu 2000 ili 2002, moguce je da imate probleme sa Referencama. Vidi site:http://members.iinet.net.au/~allenbrowne/ser-38.html

Jedan od nacina za kretanje kroz bazu podataka jeste upotreba combo boxa za pretrazivanje. Combo box mora biti unbound (nije vezan za polja u forminom record source). Ideja je da korisnik izbere nesto iz padajuce liste i da onda Access prikaze u formi taj slog (record).

Pretpostavimo da je record source za formu tabela "tblCustomers" sa sledecom strukturom:

CustomerID Text (indexed as Primary Key).
Company Text
ContactPerson Text

Forma prikazuje podatke kao Single Form. Dodajte combo box u zaglavlje forme (Forms Header) i neka conbo box ima sledece properties:

Name cboMoveTo
Control Source [ostvite ovo prazno!]
Row Source Type Table/Query
Row Source tblCustomers
Column Count 3
Column Widths 0.6 in; 1.2 in; 1.2 in
Bound Column 1
List Width 3.5 in
Limit to List Yes

Zapazite da je Control Source za Combo box PRAZAN. Row source jeste ono sto se vidi u padajucoj listi.

Ovo je kod na AfterUpdate za Combo Box:

Sub CboMoveTo_AfterUpdate ()
Dim rs As DAO.Recordset

If Not IsNull(Me!cboMoveTo) Then
'Sacuvajmo tekuci record pre pomeranja na novi:
If Me.Dirty Then
Me.Dirty = False
End If

'Kloniramo formin recordset i tu napravimo pretragu:
Set rs = Me.RecordsetClone
rs.FindFirst "[CustomerID] = " & Me!cboMoveTo
If rs.NoMatch Then
'za slucaj da ne nadjemo record
MsgBox "Trazeni slog nije nadjen. Da nije mozda Filter aktivan?"
Else
'Ovim pozicioniramo formu na zeljeni record
Me.Bookmark = rs.Bookmark
End If
Set rs = Nothing
End If
End Sub

Upozorenje: ako je CustomerID Text polje, onda treba uotrebiti znake navoda kod pretrazivanja:

rs.FindFirst "[CustomerID] = """ & Me!cboMoveTo & """"
[ konstantin @ 03.05.2004. 10:49 ] @
Nije su mi bas omiljene, ali su mi jednom bile jako,jako korisne:

TOP n PERCENT i Rnd funkcije:

SELECT TOP 15 PERCENT My_table.*
FROM My_table
ORDER BY Rnd([ID]);
'Konkretan primjer kako iz tabele My_table dobiti 15 procenata slogova, slucajno izabranih na osnovu polja ID.

[ Zidar @ 12.05.2004. 14:23 ] @
Expirienced Tips - ovj prilog dao je byTer
----------- ----

Ukoliko se desi da kljucne reci kao sto su Text, string, itd (ne znam ih ni ja sve) se nadju kao imena polja stavite apsolutnu putanju do tih tabela primer topics.text umesto samo text tako da cete moci da resite ovaj problem. Inace ukoliko se javi ovakav slucaj, interpretator SQLa vam nece javiti neku gresku (MS Access) vec
ce javiti samo da je greska u SQL statmentu.

Pozdrav.

____________________________
Još jedan prijatelj manje kakvo s***e.
[ Zidar @ 15.06.2004. 14:30 ] @
Ako cesto koristite akcione kverije u kode (Update, delete, Append), normalno se javklja Accessova poruka tipa "Are you sure you want to update 150 records.."
Ponekad ne zelimo da se takve poruke vide, pa ih onda iskljucimo. Na primer:
Code:

'Iskljucimo poruke:
DoCmd.SetWarnings False
'Izvrsimo akcioni kveri
Docmd.OpenQuery "qryUpdateStanje"
'Ponovo vratimo poruke
DoCmd.SetWarnings True

Ako ocekujemo da se akcioni kveri izvrsava sporo, onda mozemo da pokazemo Hourglass, da korisnik zna da se nesto desava.
Code:

'Iskljucimo poruke:
DoCmd.SetWarnings False
'Uklucimo Hourglas
'DoCmd.SetHourglass True
'Izvrsimo akcioni kveri
Docmd.OpenQuery "qryUpdateStanje"
'Ponovo vratimo poruke
DoCmd.SetWarnings True
'Iskljucimo Hourglas:
DoCmd.Hourglass False


Problem 1 sa ovim je sto se mnogo pise DoCmd pa nas mrzi da to pisemo svaki cas. Drugo, ako kveri pukne, ne izvrsi se, puci ce i program - OK, imamo Error handling, prezivecemo. Problem 2 je sto ce Warnings da ostanu FALSE i Hourglas TRUE. Hourglas TRUE je neprijatan, jer se od tog momenta na dalje kursor ne vidi, vidi se pescani sat.

Problem 1 se resava upotrebom jednostavnih funkcija
Code:

Function WON()
'Purpose: turns Warnings ON
    DoCmd.SetWarnings True
End Function

Function WOF()
'Purpose: turns Warnings OFF
    DoCmd.SetWarnings False
End Function

Function HON()
'Purpose: turns HourGlass ON
    DoCmd.Hourglass True
End Function

Function HOF()
'Purpose: turns HourGlass OFF
    DoCmd.Hourglass False
End Function

i onda kod iz primera izgleda ovako:
Code:

WOF
HON
'Izvrsimo akcioni kveri
Docmd.OpenQuery "qryUpdateStanje"
WON
HOF


Za Problem 2, Hourglas koji ostaje ako se nesto desi - uklucite ga u Error handler
Code:

Function DoSoemthing()
 On Error GoTo ERROR_HANDLER
'.. neki kod dodje ispred
 WOF
 HON
'Izvrsimo akcioni kveri
 Docmd.OpenQuery "qryUpdateStanje"
 WON
 HOF
'..... ostatak koda ide ovde

EXIT HERE:
 On Error Resume Next
 WON
 HOF
 Exit Function

ERROR_HANDLER:
 Select case Err.Number
    Case Else
         MsgBox "Error " & err.number & vbcrlf & err.description & vbcrlf & " in DoSomething()"
 End Seelct
 Resume EXIT HERE:
End Function


Korisno je napraviti i makro koji odradjuje Hourglas FALSE. Ovo posebno vazi vreme razvoja aplikacije. Ponkead Access sam od sebe aktivira hourglass, program pukne i vi ostanete sa hourglass kursorom. Aktivirajte makro koji ce da ponisti Hourglass.


[ Zidar @ 21.06.2004. 13:36 ] @
VBA PROGRAMIRANJE

U Accessu cesto imamo potrebu da sagradimo ceo SQL string ili jedan deo. Znate ono kao:
Code:

strSQL = "SELECT Poje1, Polje2 FROM myTable WHERE Polje1='Laza'"
set rs=db.openrecordset(strSQL)



Problem je WHERE iskaz. Nikada se ne kodira WHERE Polje1='Laza', mnogo cesce ide nesto kao
Code:

"WHERE Polje=" & txtPolje1


gde rezultat mora da bude validan SQL string (onaj koji se moze izvrsiti).

Zavisno od tipa podataka za txtPolje1, problem se resava na razlicte nacine.
1) txtPolje je numericki podatak => upotrebiti " WHERE Polje=" & txtPolje1
2) txtPolje je tekstualni podatak => upotrebiti jedno od sledecih varijanti:
Code:

" WHERE Polje='" & txtPolje1 "'"
" WHERE Polje=" & chr$(34) & txtPolje1 & chr$(34)


3) txtPolje je DATUM => moraju se zadovoljiti dva uslova a) upotrebiti # kao delimiter b) datum mora biti formatiran u USA formatu "mm/dd/yyyy"
Code:

" WHERE Polje=" & "#" & Format(txtPolje1, "mm/dd/yyyy") & "#"



Previla za tekstualne podatke su teska za kucanje, pa se preporucuje upotreba funkcija za formatiranje:
Code:


Function EnQuote(varString As Variant)
EnQuote = Chr$(34) & Nz(varString, vbNullString) & Chr$(34)
End Function

Function SQLDate(Date2Convert As Variant) As String
'*** Changed on 22 Feb 2005, by ZIdar
'Forllowing code is OK for English speaking countries,
'but it does not work well for other regional settings
' SQLDate = "#" & Format(CVDate(Date2Convert), "mm/dd/yyyy") & "#"

'Code that works for other regional settings
'(tested for Serbian Cyrilic):
SQLDate = "#" & Format(Month(CVDate(Date2Convert)), "00") & "/" _
& Format(Day(CVDate(Date2Convert)), "00") _
& "/" & Format(Year(CVDate(Date2Convert)), "0000") & "#"

End Function

'Primeri:
" WHERE myDatum=" & SQLDate(myDatum)
" WHERE myDate BETWEEN " & SQLDate(myFromDate) & " AND " & SQLDate(myToDate)

" WHERE myTextPolje=" & EnQuote(myTextpolje)
" WHERE myTextPolje LIKE " & EnQuote(myTextpolje) & "*"
" WHERE myTextPolje LIKE " & "*" & EnQuote(myTextpolje) & "*"



Upotrebom funkcija kod se brze pise, smanjuje se verovatnoca greske i kod je mnogo citljiviji i razumljiviji.



[Ovu poruku je menjao Zidar dana 22.02.2005. u 15:44 GMT+1]
[ Zidar @ 25.06.2004. 13:51 ] @
VBA , $String funkcije - ispiisvanje stringa naopako

Na Serbian cafeu bilo je pitanje "Kako odstampati brojeve od unazad, tako da se broj 1234 stampa kao 4321". Ovo je resilo problem:
Citat:

Ni Access ni Excel nazalost nemaju funkciju koja ispisuje stringove naopako. Probaj ovo:

Function ReverseString(strToInvert As String) As String
'Purpose: reverses given string
'Example: ReverseString("1234567") returns "7654321"
Dim i As Integer
Dim L As Integer
Dim strTarget As String

L = Len(strToInvert)
strTarget = ""

For i = 1 To L
strTarget = Mid(strToInvert, i, 1) & strTarget
Next i

ReverseString = strTarget

End Function

Kopiras ovu funkciju u modul (ne na formu), da bi bila vidljiva zakverije. Onda spakujes brojeve u Access tabelu i onda napravis kveri, na primer:

SELECT Broj, ReverseString(Cstr(Broj)) AS Broj_Naopako
FROM tbltabelaSaBorjevima

:-)
Na printer se salje Broj_Naopako.


[ Daks @ 30.06.2004. 10:19 ] @
KAKO UKLJUČITI/ISKLJUČITI SHIFT KEY?

Kreirajte novi public modul. Kada ste u modulu idete na Tools pa zatim References. Ukljucite Microsoft DAO 3.6.


Slijedeći kod kopirate u taj novi modul:

'***************** Code Start ***************
'Koprati ovu funkciju u novi public modul
Public Function SetProperties(strPropName As String, varPropType As Variant, varPropValue As Variant) As Integer
On Error GoTo Err_SetProperties
Dim db As DAO.Database, prp As DAO.Property
Set db = CurrentDb
db.Properties(strPropName) = varPropValue
SetProperties = True
Set db = Nothing

Exit_SetProperties:
Exit Function
Err_SetProperties:
If Err = 3270 Then
Set prp = db.CreateProperty(strPropName, varPropType, varPropValue)
db.Properties.Append prp
Resume Next
Else
SetProperties = False
MsgBox "SetProperties", Err.Number, Err.Description
Resume Exit_SetProperties
End If
End Function
'***************** Code End ***************


Potom slijedeći kod dodate u onClick proceduru command butona, labela ili čak neke slike kako bi uključivanje/isključivanje shift key-a bilo neprmjetno za korisnika:

'***************** Code Start ***************
'Dodati u OnClick proceduru command butona,
'labela ili slike "bIskljuciShift"
'Promijeniti default sifru "Vasa sifra ovdje" u Vašu sifru
Private Sub bIskljuciShift_Click()
On Error GoTo Err_bIskljuciShift_Click
Dim strInput As String
Dim strMsg As String
Beep
strMsg = "Zelite li omoguciti SHIFT key?" & vbCrLf & vbLf & _
"Molimo Vas upisite sifru za omogucivanje SHIFT key-a."
strInput = InputBox(Prompt:=strMsg, title:="Shift key nije omogucen")
If strInput = "Vasa sifra ovdje" Then
SetProperties "AllowBypassKey", dbBoolean, True
Beep
MsgBox "Shift key je ukljucen." & vbCrLf & vbLf & _
"Slijedeci put kad budete otvarali vasu bazu Shift key ce biti omogucen.", _
vbInformation, "Set Startup Properties"
Else
Beep
SetProperties "AllowBypassKey", dbBoolean, False
MsgBox "Sifra nije prihvacena!" & vbCrLf & vbLf & _
"Shift key je onemogucen." & vbCrLf & vbLf & _
"Slijedeci put kad budete otvarali bazu Shift key ce biti onemogucen.", _
vbCritical, "Netacna sifra"
Exit Sub
End If
Exit_bIskljuciShift_Click:
Exit Sub
Err_bIskljuciShift_Click:
MsgBox "bIskljuciShift_Click", Err.Number, Err.Description
Resume Exit_bIskljuciShift_ClickEnd Sub
'***************** Code End ***************


Kada zelite omoguciti Shift key kliknete na command buton (label) unesete sifru, zatvorite bazu i ponovo je otvorite drzeci Shift.
Kada zelite onemoguciti Shift key takodjer kliknite na command buton (label) unesite netačnu šifru i zatvorite bazu. Shift key će biti onemogućen.

Omer
[ Simke @ 03.07.2004. 00:47 ] @
Kako export-ovati objekat i Access-a u text fajl i import-ovati ga nazad

Ako dodje do korupcije ili ostecenja Access baze, obicno repair i/ili importovanje objekata u novi fajl pomaze. Ali ako ni ovo ne radi, onda mozete da koristite komandu Application.SaveAsText da snimite objekat u text fajl i da ga komandom Application.LoadFromText ucitate u novi Access fajl.

Ako imamo formu "frmProducts" i zelimo da je exportujemo u text fajl, onda:
Otvorite code editor i immediate (debug) prozoru kucajte
Application.SaveAsText acForm, "frmProducts", "C:\frmProducts.txt"

Za import se koristi:
Application.LoadFromText acForm "frmProducts", "C:\frmProducts.txt"
[ Zidar @ 09.07.2004. 13:33 ] @
Funkcija za konverziju novcanih iznosa u tekst, na srpskom.
Funkciju prilozili Mauzer i Daks, 8 Jul 2004.
[Code]
Function slovima(broj)

If broj = 0 Then rez = "nula"

ReDim imebr(9)
imebr(1) = "jedan"
imebr(2) = "dva"
imebr(3) = "tri"
imebr(4) = "cetiri"
imebr(5) = "pet"
imebr(6) = "sest"
imebr(7) = "sedam"
imebr(8) = "osam"
imebr(9) = "devet"

rez = ""
celi = Int(broj)
dec = ((broj - celi) * 100) Mod 100
cbr = Str(celi)
duzina = 16 - Len(cbr)
cbroj = String(duzina, "0") & Right(cbr, Len(cbr) - 1)

i = 1

Do While i < 15
tric = Mid(cbroj, i, 3)
trojka = Val(tric)
If tric <> "000" Then
cs = Val(Mid(tric, 1, 1))
cd = Val(Mid(tric, 2, 1))
cj = Val(Mid(tric, 3, 1))
Select Case cs
Case 2
rez = rez & "dve"
Case Is > 2
rez = rez & imebr(cs)
End Select

Select Case cs
Case 1
rez = rez & "stotinu"
Case 2, 3, 4
rez = rez & "stotine"
Case Is > 4
rez = rez & "stotina"
End Select

If cj = 0 Then sl1 = "" Else sl1 = imebr(cj)

Select Case cd
Case 4
rez = rez & "cetr"
Case 6
rez = rez & "sez"
Case 5
rez = rez & "pe"
Case 9
rez = rez & "deve"
Case 2, 3, 7, 8
rez = rez & imebr(cd)
Case 1
sl1 = ""
Select Case cj
Case 0
rez = rez & "deset"
Case 1
rez = rez & "jeda"
Case 4
rez = rez & "cetr"
Case Else
rez = rez & imebr(cj)
End Select
If cj > 0 Then rez = rez & "naest"
End Select

If cd > 1 Then rez = rez & "deset"

If (i = 4 Or i = 10) And cd <> 1 Then
If cj = 1 Then
sl1 = "jedna"
ElseIf cj = 2 Then
sl1 = "dve"
End If
End If

rez = rez & sl1

Select Case i

Case 1
rez = rez & "bilion"
If cj > 1 Or cd = 1 Then rez = rez & "a"

Case 4
rez = rez & "milijard"
If ((trojka Mod 100) > 11 And (trojka Mod 100) < 19) Then
rez = rez & "i"
ElseIf cj = 1 Then
rez = rez & "a"
ElseIf cj > 4 Or cj = 0 Then
rez = rez & "i"
ElseIf cj > 1 Then
rez = rez & "e"
End If

Case 7
rez = rez & "milion"
If ((trojka Mod 100) > 11 And (trojka Mod 100) < 19) Or cj <> 1 Then
rez = rez & "a"
End If

Case 10
rez = rez & "hiljad"
If ((trojka Mod 100) > 11 And (trojka Mod 100) < 19) Or cj = 1 Then
rez = rez & "a"
ElseIf trojka = 1 Then
rez = rez & "u"
ElseIf cj > 4 Or cj = 0 Then
rez = rez & "a"
ElseIf cj > 1 Then
rez = rez & "e"
End If

End Select
End If
i = i + 3
Loop

slovima = rez & Str(dec) & "/100"

End Function
[/code]

Potrebno je kreirati novi modul, na primer modPrevodBrojeva i iskopirati prilozeni kod.

Preporucuje se da se sve promenljive explicitno DIMenzionisu.




[ Simke @ 11.08.2004. 07:15 ] @
Access 2000 i korupcija adp fajlova.

Access 2000 ima jedan gadan bug, kada se uradi import nekog objekta u adp fajl da moze da dodje do korupcije fajla. Da bi se ovo sprecilo, bito je da se odmah nakon importa uradi compile celog projekta. Posle kompilacije zatvorite fajl i ponovo ga otvorite. Sada moze da se uradi i compact & repair, mada nije neophodno.
[ Simke @ 22.08.2004. 00:16 ] @
There is no licence poruka u Access 97

Pretpostavljam da retko ko ovde koristi Access 97, ali ipak da postavim resenje za ovo, posto sam naisao na problem par puta do sada.

Znaci uradite instalaciju Accessa, probate da startujete i pojavi se poruka: Microsoft Access can't start because there is no license for it on this machine.

Da bi resili problem uradite sledece:
1) Otvorite Find i uradite search za hatten.ttf fajl (Win\Fonts)
2) Uradite rename fajla u recimo hatten.xxx
3) Pokrenite setup za Office / Access 97 i izaberite opciju Reinstall.
4) Posle reinstalacije vratite ima fajla nazad u hatten.ttf
[ Zidar @ 02.09.2004. 17:22 ] @
Au Access 97 Helpu moze da se nadje ova funkcija. Funkcija kreira tebelu sa gotovo svim Access i JET Error kodovima i opisima. Do sada nisam nisao na nesto sto se razlikuje od 2002. Pitanje se pojavljivalo na raznim forumima pa ajde da ga imamo i ovde.

Code:

Function AccessAndJetErrorsTable() As Boolean
    Dim dbs As Database, tdf As TableDef, fld As Field
    Dim rst As Recordset, lngCode As Long
    Dim strAccessErr As String
    Const conAppObjectError = "Application-defined or object-defined error"

    On Error GoTo Error_AccessAndJetErrorsTable
    ' Create Errors table with ErrorNumber and ErrorDescription fields.
    Set dbs = CurrentDb
    Set tdf = dbs.CreateTableDef("AccessAndJetErrors")
    Set fld = tdf.CreateField("ErrorCode", dbLong)

tdf.Fields.Append fld
    Set fld = tdf.CreateField("ErrorString", dbMemo)
    tdf.Fields.Append fld

    dbs.TableDefs.Append tdf
    ' Open recordset on Errors table.
    Set rst = dbs.OpenRecordset("AccessAndJetErrors")
    ' Loop through error codes.
    For lngCode = 0 To 3500
        On Error Resume Next
        ' Raise each error.
        strAccessErr = AccessError(lngCode)
        DoCmd.Hourglass True
        ' Skip error numbers without associated strings.
        If strAccessErr <> "" Then

' Skip codes that generate application or object-defined errors.
            If strAccessErr <> conAppObjectError Then
                ' Add each error code and string to Errors table.
                rst.AddNew
                rst!ErrorCode = lngCode
                ' Append string to memo field.
                rst!ErrorString.AppendChunk strAccessErr
                rst.Update
            End If
        End If
    Next lngCode
    ' Close recordset.
    rst.Close
    DoCmd.Hourglass False
    RefreshDatabaseWindow
    MsgBox "Access and Jet errors table created."

AccessAndJetErrorsTable = True

Exit_AccessAndJetErrorsTable:
    Exit Function

Error_AccessAndJetErrorsTable:
    MsgBox Err & ": " & Err.Description
    AccessAndJetErrorsTable = False
    Resume Exit_AccessAndJetErrorsTable
End Function
[ Zidar @ 10.09.2004. 21:18 ] @
Pitanje je bilo: kako skalirati forme za razlicite rezolucije.
http://www.elitesecurity.org/tema/68006

Evo sta je Daks ponudio, a Obradorriuss potvrdio da to radi:

Kreiraj novi modul i nazovi ga npr. modResizeForm. u njega kopiraj slijedeci kod:


Option Compare Database
Option Explicit
'-----------------------------MODULE CONSTANTS & VARIABLES------------------------------
Private Const DESIGN_HORZRES As Long = 800 '<- CHANGE THIS VALUE TO THE RESOLUTION
'YOU DESIGNED YOUR FORMS IN.
'(e.g. 800 X 600 -> 800)
Private Const DESIGN_VERTRES As Long = 600 '<- CHANGE THIS VALUE TO THE RESOLUTION
'YOU DESIGNED YOUR FORMS IN.
'(e.g. 800 X 600 -> 600)
Private Const DESIGN_PIXELS As Long = 92 '<- CHANGE THIS VALUE TO THE DPI
'SETTING YOU DESIGNED YOUR FORMS IN.
'(If in doubt do not alter the
'DESIGN_PIXELS setting as most
'systems use 96 dpi.)
Private Const WM_HORZRES As Long = 8
Private Const WM_VERTRES As Long = 10
Private Const WM_LOGPIXELSX As Long = 88
Private Const TITLEBAR_PIXELS As Long = 18
Private Const COMMANDBAR_PIXELS As Long = 26
Private Const COMMANDBAR_LEFT As Long = 0
Private Const COMMANDBAR_TOP As Long = 1
Private OrigWindow As tWindow 'Module level variable holds the
'original window dimensions before
'resize.

Private Type tRect
left As Long
Top As Long
right As Long
bottom As Long
End Type

Private Type tDisplay
Height As Long
Width As Long
DPI As Long
End Type

Private Type tWindow
Height As Long
Width As Long
End Type

Private Type tControl
Name As String
Height As Long
Width As Long
Top As Long
left As Long
End Type
'-------------------------- END MODULE CONSTANTS & VARIABLES----------------------------

'------------------------------------API DECLARATIONS-----------------------------------
Private Declare Function WM_apiGetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" _
(ByVal hdc As Long, ByVal nIndex As Long) As Long

Private Declare Function WM_apiGetDesktopWindow Lib "user32" Alias "GetDesktopWindow" _
() As Long

Private Declare Function WM_apiGetDC Lib "user32" Alias "GetDC" _
(ByVal hwnd As Long) As Long

Private Declare Function WM_apiReleaseDC Lib "user32" Alias "ReleaseDC" _
(ByVal hwnd As Long, ByVal hdc As Long) As Long

Private Declare Function WM_apiGetWindowRect Lib "user32.dll" Alias "GetWindowRect" _
(ByVal hwnd As Long, lpRect As tRect) As Long

Private Declare Function WM_apiMoveWindow Lib "user32.dll" Alias "MoveWindow" _
(ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Private Declare Function WM_apiIsZoomed Lib "user32.dll" Alias "IsZoomed" _
(ByVal hwnd As Long) As Long
'--------------------------------- END API DECLARATIONS----------------------------------

'---------------------------------------------------------------------------------------
' Procedure : getScreenResolution
' DateTime : 27/01/2003
' Author : Jamie Czernik
' Purpose : Function returns the current height, width and dpi.
'---------------------------------------------------------------------------------------
Private Function getScreenResolution() As tDisplay

Dim hDCcaps As Long
Dim lngRtn As Long

On Error Resume Next

'API call get current resolution:-
hDCcaps = WM_apiGetDC(0) 'Get display context for desktop (hwnd = 0).
With getScreenResolution
.Height = WM_apiGetDeviceCaps(hDCcaps, WM_VERTRES)
.Width = WM_apiGetDeviceCaps(hDCcaps, WM_HORZRES)
.DPI = WM_apiGetDeviceCaps(hDCcaps, WM_LOGPIXELSX)
End With
lngRtn = WM_apiReleaseDC(0, hDCcaps) 'Release display context.

End Function

'---------------------------------------------------------------------------------------
' Procedure : getFactor
' DateTime : 27/01/2003
' Author : Jamie Czernik
' Purpose : Function returns the value that the form's/control's height, width, top &
' left should be multiplied by to fit the current screen resolution.
'---------------------------------------------------------------------------------------
Private Function getFactor(blnVert As Boolean) As Single

Dim sngFactorP As Single

On Error Resume Next

If getScreenResolution.DPI <> 0 Then
sngFactorP = DESIGN_PIXELS / getScreenResolution.DPI
Else
sngFactorP = 1 'Error with dpi reported so assume 96 dpi.
End If
If blnVert Then 'return vertical resolution.
getFactor = (getScreenResolution.Height / DESIGN_VERTRES) * sngFactorP
Else 'return horizontal resolution.
getFactor = (getScreenResolution.Width / DESIGN_HORZRES) * sngFactorP
End If

End Function

'---------------------------------------------------------------------------------------
' Procedure : ReSizeForm
' DateTime : 27/01/2003
' Author : Jamie Czernik
' Purpose : Routine should be called on a form's onOpen or onLoad event.
'---------------------------------------------------------------------------------------
Public Sub ReSizeForm(ByVal frm As Access.Form)

Dim rectWindow As tRect
Dim lngWidth As Long
Dim lngHeight As Long
Dim sngVertFactor As Single
Dim sngHorzFactor As Single

On Error Resume Next

sngVertFactor = getFactor(True) 'Local function returns vertical size change.
sngHorzFactor = getFactor(False) 'Local function returns horizontal size change.
Resize sngVertFactor, sngHorzFactor, frm 'Local procedure to resize form sections & controls.
If WM_apiIsZoomed(frm.hwnd) = 0 Then 'Don't change window settings for max'd form.
Access.DoCmd.RunCommand acCmdAppMaximize 'Maximize the Access Window.
'Store for dimensions in rectWindow:-
Call WM_apiGetWindowRect(frm.hwnd, rectWindow)
'Calculate and store form height and width in local variables:-
With rectWindow
lngWidth = .right - .left
lngHeight = .bottom - .Top
End With
'Resize the form window as required (don't resize this for sub forms):-
If frm.Parent.Name = VBA.vbNullString Then
Call WM_apiMoveWindow(frm.hwnd, ((getScreenResolution.Width - _
(sngHorzFactor * lngWidth)) / 2) - getLeftOffset, _
((getScreenResolution.Height - (sngVertFactor * lngHeight)) / 2) - _
getTopOffset, lngWidth * sngHorzFactor, lngHeight * sngVertFactor, 1)
End If
End If
Set frm = Nothing 'Free up resources.

End Sub

'---------------------------------------------------------------------------------------
' Procedure : Resize
' DateTime : 27/01/2003
' Author : Jamie Czernik
' Purpose : Routine re-scales the form sections and controls.
'---------------------------------------------------------------------------------------
Private Sub Resize(sngVertFactor As Single, sngHorzFactor As Single, ByVal frm As Access.Form)

Dim ctl As Access.Control 'Form control variable.
Dim arrCtls() As tControl 'Array of Tab and Option Group control properties.
Dim lngI As Long 'Loop counter.
Dim lngJ As Long 'Loop counter.
Dim lngWidth As Long 'Stores form's new width.
Dim lngHeaderHeight As Long 'Stores header's new height.
Dim lngDetailHeight As Long 'Stores detail's new height.
Dim lngFooterHeight As Long 'Stores footer's new height.
Dim blnHeaderVisible As Boolean 'True if form header visible before resize.
Dim blnDetailVisible As Boolean 'True if form detail visible before resize.
Dim blnFooterVisible As Boolean 'True if form footer visible before resize.
Const FORM_MAX As Long = 31680 'Maximum possible form width & section height.

On Error Resume Next

With frm
.Painting = False 'Turn off form painting.
'Calculate form's new with and section heights and store in local variables
'for later use:-
lngWidth = .Width * sngHorzFactor
lngHeaderHeight = .Section(Access.acHeader).Height * sngVertFactor
lngDetailHeight = .Section(Access.acDetail).Height * sngVertFactor
lngFooterHeight = .Section(Access.acFooter).Height * sngVertFactor
'Now maximize the form's width and height while controls are being resized:-
.Width = FORM_MAX
.Section(Access.acHeader).Height = FORM_MAX
.Section(Access.acDetail).Height = FORM_MAX
.Section(Access.acFooter).Height = FORM_MAX
'Hiding form sections during resize prevents invalid page fault after
'resizing column widths for list boxes on forms with a header/footer:-
blnHeaderVisible = .Section(Access.acHeader).Visible
blnDetailVisible = .Section(Access.acDetail).Visible
blnFooterVisible = .Section(Access.acFooter).Visible
.Section(Access.acHeader).Visible = False
.Section(Access.acDetail).Visible = False
.Section(Access.acFooter).Visible = False
End With
'Resize array to hold 1 element:-
ReDim arrCtls(0)
'Gather properties for Tabs and Option Groups to recify height/width problems:-
For Each ctl In frm.Controls
If ((ctl.ControlType = Access.acTabCtl) Or _
(ctl.ControlType = Access.acOptionGroup)) Then
With arrCtls(lngI)
.Name = ctl.Name
.Height = ctl.Height
.Width = ctl.Width
.Top = ctl.Top
.left = ctl.left
End With
lngI = lngI + 1
ReDim Preserve arrCtls(lngI) 'Increase the size of the array.
End If
Next ctl
'Resize and locate each control:-
For Each ctl In frm.Controls
If ctl.ControlType <> Access.acPage Then 'Ignore pages in Tab controls.
With ctl
.Height = .Height * sngVertFactor
.left = .left * sngHorzFactor
.Top = .Top * sngVertFactor
.Width = .Width * sngHorzFactor
.FontSize = .FontSize * sngVertFactor
'Enhancement by Myke Myers --------------------------------------->
'Fix certain Combo Box, List Box and Tab control properties:-
Select Case .ControlType
Case Access.acListBox
.ColumnWidths = adjustColumnWidths(.ColumnWidths, sngHorzFactor)
Case Access.acComboBox
.ColumnWidths = adjustColumnWidths(.ColumnWidths, sngHorzFactor)
.ListWidth = .ListWidth * sngHorzFactor
Case Access.acTabCtl
.TabFixedWidth = .TabFixedWidth * sngHorzFactor
.TabFixedHeight = .TabFixedHeight * sngVertFactor
End Select
'------------------------------------> End enhancement by Myke Myers.
End With
End If
Next ctl
'********************************************************
'* Note if scaling form up: If Tab controls or Option *
'* Groups are too near the bottom or right side of the *
'* form they WILL distort due to the way that Access *
'* keeps the child controls within the control frame. *
'* Try moving these controls left or up if possible. *
'* The opposite is true for scaling down so in this *
'* case try moving these controls right or down. *
'********************************************************
'Now try to rectify Tabs and Option Groups height/widths:-
For lngJ = 0 To lngI
With frm.Controls.Item(arrCtls(lngJ).Name)
.left = arrCtls(lngJ).left * sngHorzFactor
.Top = arrCtls(lngJ).Top * sngVertFactor
.Height = arrCtls(lngJ).Height * sngVertFactor
.Width = arrCtls(lngJ).Width * sngHorzFactor
End With
Next lngJ
'Now resize height for each section and form width using stored values:-
With frm
.Width = lngWidth
.Section(Access.acHeader).Height = lngHeaderHeight
.Section(Access.acDetail).Height = lngDetailHeight
.Section(Access.acFooter).Height = lngFooterHeight
'Now unhide form sections:-
.Section(Access.acHeader).Visible = blnHeaderVisible
.Section(Access.acDetail).Visible = blnDetailVisible
.Section(Access.acFooter).Visible = blnFooterVisible
.Painting = True 'Turn form painting on.
End With
Erase arrCtls 'Destory array.
Set ctl = Nothing 'Free up resources.

End Sub

'---------------------------------------------------------------------------------------
' Procedure : getTopOffset
' DateTime : 27/01/2003
' Author : Jamie Czernik
' Purpose : Function returns the total size in pixels of menu/toolbars at the top of
' the Access window allowing the form to be positioned in the centre of the
' screen.
'---------------------------------------------------------------------------------------
Private Function getTopOffset() As Long

Dim cmdBar As Object
Dim lngI As Long

On Error GoTo err

For Each cmdBar In Application.CommandBars
If ((cmdBar.Visible = True) And (cmdBar.Position = COMMANDBAR_TOP)) Then
lngI = lngI + 1
End If
Next cmdBar
getTopOffset = (TITLEBAR_PIXELS + (lngI * COMMANDBAR_PIXELS))

exit_fun:
Exit Function

err:
'Assume only 1 visible command bar plus the title bar:
getTopOffset = TITLEBAR_PIXELS + COMMANDBAR_PIXELS
Resume exit_fun

End Function

'---------------------------------------------------------------------------------------
' Procedure : getLeftOffset
' DateTime : 27/01/2003
' Author : Jamie Czernik
' Purpose : Function returns the total size in pixels of menu/toolbars at the left of
' the Access window allowing the form to be positioned in the centre of the
' screen.
'---------------------------------------------------------------------------------------
Private Function getLeftOffset() As Long

Dim cmdBar As Object
Dim lngI As Long

On Error GoTo err

For Each cmdBar In Application.CommandBars
If ((cmdBar.Visible = True) And (cmdBar.Position = COMMANDBAR_LEFT)) Then
lngI = lngI + 1
End If
Next cmdBar
getLeftOffset = (lngI * COMMANDBAR_PIXELS)

exit_fun:
Exit Function

err:
'Assume no visible command bars:-
getLeftOffset = 0
Resume exit_fun

End Function

'---------------------------------------------------------------------------------------
' Procedure : adjustColumnWidths
' DateTime : 27/01/2003
' Author : Myke Myers [Split() replacement for Access 97 by Jamie Czernik]
' Purpose : Adjusts column widths for list boxes and combo boxes.
'---------------------------------------------------------------------------------------
Private Function adjustColumnWidths(strColumnWidths As String, sngFactor As Single) _
As String

Dim astrColumnWidths() As String
Dim strTemp As String
Dim lngI As Long
Dim lngJ As Long

'Get the column widths:-
'THIS CODE BY JAMIE CZERNIK------------------------------------------->
'Replace the Split() function as not available in Access 97:
ReDim astrColumnWidths(0)
For lngI = 1 To VBA.Len(strColumnWidths)
Select Case VBA.Mid(strColumnWidths, lngI, 1)
Case Is <> ";"
astrColumnWidths(lngJ) = astrColumnWidths(lngJ) & VBA.Mid( _
strColumnWidths, lngI, 1)
Case ";"
lngJ = lngJ + 1
ReDim Preserve astrColumnWidths(lngJ) 'Resize the array.
End Select
Next lngI
lngI = 0
'--------------------------------------------> END CODE BY JAMIE CZERNIK.
'Access 2000/2002 users can uncomment the line below and remove the split()
'replacement above.
'astrColumnWidths = Split(strColumnWidths, ";")'Available in Access 2000/2002 only
Do Until lngI > UBound(astrColumnWidths) 'Loop through all divisions
strTemp = strTemp & CSng(astrColumnWidths(lngI)) * sngFactor & ";"
lngI = lngI + 1
Loop
adjustColumnWidths = strTemp
Erase astrColumnWidths 'Destroy array.

End Function

'---------------------------------------------------------------------------------------
' Procedure : getOrigWindow
' DateTime : 27/01/2003
' Author : Jamie Czernik
' Purpose : Routine stores the original window dimensions before resizing call it
' when form loads. (before calling ResizeForm Me!).
' Call it: Form_Load()
' [More info in "Important Points" - point 5 - in help file.]
'---------------------------------------------------------------------------------------
Public Sub getOrigWindow(frm As Access.Form)

On Error Resume Next

OrigWindow.Height = frm.WindowHeight
OrigWindow.Width = frm.WindowWidth

End Sub

'---------------------------------------------------------------------------------------
' Procedure : RestoreWindow
' DateTime : 27/01/2003
' Author : Jamie Czernik
' Purpose : Routine restores the original window dimensions call it when form closes.
' Call it: Form_Close()
' [More info in "Important Points" - point 5 - in help file.]
'---------------------------------------------------------------------------------------
Public Sub RestoreWindow()

On Error Resume Next

Access.DoCmd.MoveSize , , OrigWindow.Width, OrigWindow.Height
Access.DoCmd.Save

End Sub



Na pocetku modula upisi rezoluciju u kojoj si kreirao forme.

Zatim u OnLoad forme dodaj slijedece:


Private Sub Form_Load()
ReSizeForm Me
End Sub

POZDRAV, OMER
[ Zidar @ 23.09.2004. 16:28 ] @
PROGRAMIRANJE: Status Bar

Ako se u programu neka neredba izvrsava dugo, treba korisniku staviti do znanja da se nesto desava i kako stvar napreduje. Najprostije resenje je da se kursor pretvori u pescani sat, komandom Docmd.HourGlass TRUE, i da je posle obavljenog posla iskljucimo sa DoCmd.Hourglass FALSE. Medjutim, to ne pokazuje progres i ako proces potraje, korisnik moze da pomisli da se racunar zaglavio.

Ako vrtimo neku petlju (Loop, For-Next, Do-While) obicno znamo gde smo, ocitavanjem brojaca. Na primer, za For i=1 to 50000 brojac i nam uvek kaze gde smo. To moze da se iskoristi i da se korisniku prikaze progress bar na dnu ekrana. To radi ovako:
Code:

Function ProgressMeter() '
'Namena: da se prikaze progres bar
Dim lngI As Long    'brojac
Dim lngMax As Long   'maximalna vrednost brojaca
lngMax = 1000000

'Moramo prvo da inicijalizujemo status bar
Call SysCmd(acSysCmdInitMeter, "Sacekajte, radim", lngMax)
'pa da ukljucimo pescani satic
DoCmd.Hourglass True 
'Ovde se nesto radi, sa brojacem
For lngI = 1 To lngMax
    'a svaku promenu brojaca moramo da UpdateMeter
    Call SysCmd(acSysCmdUpdateMeter, lngI)
    '
    'neki kod koji nesto radi
    '
Next lngI
'onda iskljucimo satic
DoCmd.Hourglass False
'pa onda bacimo poruku na ekran, da probudimo korisnika ako je zaspao
MsgBox "Gotovo!"
'i na kraju uklonimo poruku iz status bar
Call SysCmd(acSysCmdRemoveMeter)

End Function



A moze i ovako:
Code:

Function RecordsetStatusMeter()
'Namena: prikazuje progress bar dok se vrti Loop kroz rekrdset
Dim DB As DAO.Database
Dim rs As DAO.Recordset
Dim strSQl As String
Dim lngMax As Long
Dim i As Long
Dim j As Long

strSQl = "SELECT Database, Connect, Name FROM MSysObjects;"
Set DB = CurrentDb
Set rs = DB.OpenRecordset(strSQl)

DoCmd.Hourglass True

rs.MoveLast
lngMax = rs.RecordCount 'RecordCount moze da bude pogresan bez .MoveLast

rs.MoveFirst
i = 1
Call SysCmd(acSysCmdInitMeter, "Sacekajte trenutak, brojim objekte u bazi!", lngMax)

Do While Not rs.EOF
    i = i + 1 'brojac
    Call SysCmd(acSysCmdUpdateMeter, i)
    
    'kod koji nesto radi:
    Debug.Print rs!Name
    'Ovo je umetnuto da uspori malo rad
    For j = 1 To 10000000
    Next j
    rs.MoveNext
Loop

DoCmd.Hourglass False

MsgBox "Gotovo!"
Call SysCmd(acSysCmdRemoveMeter)

End Function



Obe funkcije se moraju izvrsiti iz Acces prozora, id debug se mozda ne vidi status bar. Zato je prilozen primer sa formom.
:-)
[ mika @ 28.10.2004. 14:11 ] @
VBA: Kako od tabele dobiti listu?

Ima slučajeva kada se od recordseta dobijenog upitom nad nekom tabelom zahteva da bude ispisan u obliku stringa, odvojen zarezima. Tipičan primer je BCC: polje u okviru email poruke.

Dakle, pretpostavimo da imamo tabelu sa email adresama:

Code:

+------+
|Emails|
+------+
|Email1|
|Email2|
|Email3|
|Email4|
+------+


Kada izvršimo sledeći kod:

Code:

   Dim rst As New ADODB.Recordset
   Dim Ispis As String
    
   rst.Open "SELECT * FROM Emails", CurrentProject.Connection, adOpenStatic, adLockReadOnly
    If rst.RecordCount > 0 Then    Ispis = rst.GetString(adClipString, , , ",")
    End If
    rst.close

    Ispis=Left(Ispis, len(Ispis)-1)

    MsgBox(Ispis)


...tada će promenljiva Ispis da ima sledeći sadržaj:

Email1, Email2, Email3, Email4


Sada ovaj string možemo postaviti u okviru Bcc polja, i proslediti email. Naravno, ovo se može generalizovati za bilo koju primenu.

[ Simke @ 04.11.2004. 04:59 ] @
Kako skloniti SQL server konekciju u adp fajlu

Ovo resenje je postavio darko79:

Code:

Function MakeADPConnectionless()
'------------------------------------------------------------
'This code removes the connection properties from the
'Access Project for troubleshooting purposes.
'The ADP opens in a disconnected state until new connection
'properties are supplied.
'------------------------------------------------------------
    Application.CurrentProject.OpenConnection ""
End Function
[ DarkMan @ 05.11.2004. 14:37 ] @
Zaštita programa od kopiranja:

U attachment-u imate dva primera kako zaštititi access program od kopiranja i pokretanja programa na drugom računaru. Jedan je MDB a drugi je ADP falj. Razlika je veoma mala i ogleda se jedino u radu sa propertijima.

Zaštita je izvedena vezivanjem programa za serijski broj primarnog hard diska računara. Pri svakom pokretanju programa vrši se provera da li je program registravan za rad na dotičnom računaru, ako jeste nastavlja se normalan rad a ako nije ili prekida se prekida rad programa ili se ostavlja mogućnost registracije.

Opis primera:
Programi po default pokreću Startup formu koja na početku izbacuje poruku da li je program registrovan ili ne a zatim imate opcije da registrujete/deregistrujete program i da uključite/isključite shift.
Za najveću mogucu zaštitu pored isključivanja shifta i registrovanja programa treba kreirati MDE odnosno ADE fajl kako ne bi bio moguć pristup kodu.

Jedan način kako iskoristiti ovaj kod:
1. Importujete dva modula iz primera (koji sadrže neophodne funkcije) u vaš program
2. Kreirajte novu formu koju će te postaviti u Startup i dodajte sledeći kod u nju:
Code:

Private Sub Form_Open(Cancel As Integer)
    If IsRegistered() Then
        DoCmd.OpenForm "Switchboard"
        Cancel = True
        Exit Sub
    End If
End Sub

Ako je program registrovan otvara se vaša kontrolna tabla (za nešto drugo napravite neophodne izmene) a ako nije registrovan nastavlja se prikazivanje ove startup forme.
3. Na formi kreirajte neki label sa porukom da program nije registrovan, zatim neko polje za unos šifre, dugme za proveru šifre i dugme za zatvaranje programa.
4. U On Click event dugmeta za proveru šifre izvršite proveru validnosti šifre i ako je šifra ispravna registrujete program a ako nije izbacite poruku da šifra nije ispravna:
Code:

Private Sub ButtonProveraSifra_Click()
    If EditSifra.Value = "vaša šifra" Then
        Call RegisterProgram
        DoCmd.Close
        DoCmd.OpenForm "Switchboard"
    Else
        MsgBox "Šifra nije ispravna!", vbCritical, "Greška"
    End If
End Sub

[ mika @ 08.11.2004. 08:28 ] @
Access i veći projekti

Prema zapažanjima iskusnijih ljudi-veoma naprednih korisnika Accessa sa foruma, preporučen način za rad na većem projektu (>2 računara, mrežno okruženje) u Access-u je sledeći: izabrati računar koji će da bude server, na taj računar staviti samo fajlove sa tabelama, a na računare-klijente staviti fajlove sa interfejsom-forme, VBA kod, reporte, query-je, i zatim tabele sa servera linkovati na svaki klijent.

Ovakav način rada je pouzdan, i omogućava konzistentnost tabela, tj. svi klijenti imaju ažurne podatke, jer ih "vuku" sa servera. Primećeno je čak da je moguće, uz dobro postavljenu bazu i podešenu mrežu, povezati i do dvadesetak klijenata na takvu bazu bez primetnijeg gubitka u performansama. Ovo takođe pobija neke predrasude da je Access alat samo za "manje baze" (uslovno rečeno) i da za svaki veći projekat treba koristiti MS SQL.
[ Simke @ 10.11.2004. 05:18 ] @
Problem sa list separator-om

Control Panel -> Regional and Language Pptions -> Customize -> Numbers tab, List Separatror polje.

Neke funkcije u Access-u (kao recimo Iif) koriste ovo umesto zareza - jedna od stvari koje bi trebalo proveriti kod neocekivanih problema.

Ovo je poslao filjo.
[ DarkMan @ 22.11.2004. 17:13 ] @
Promena jezika (Keyboard Input Language) iz accessa:

Iskopirati sledeći kod u novi modul:
Code:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Autor: Darko Matesic
' Datum: 20. Novembar 2004.
' Email: [email protected]
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Option Compare Database
Option Explicit

Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal flags As Long) As Long
Declare Function UnloadKeyboardLayout Lib "user32" (ByVal hkl As Long) As Long
Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long

Const HKL_ENGLISH_US = "00000409"
Const HKL_ENGLISH_UK = "00000809"
Const HKL_CROATIAN = "0000041A"
Const HKL_SERBIAN_CYRILIC = "00000C1A"
Const HKL_SERBIAN_LATIN = "0000081A"

Public Enum acKeyboardLanguage
    hklEnglishUS
    hklEnhlishUK
    hklCroatian
    hklSerbianCyrilic
    hklSerbianLatin
End Enum

Function SetKeyboardLanguage(KeyboardLanguage As acKeyboardLanguage) As Boolean
    Dim hkl As Long
    SetKeyboardLanguage = False
    Select Case KeyboardLanguage
        Case hklEnglishUS:
            hkl = LoadKeyboardLayout(HKL_ENGLISH_US, 0)
        Case hklEnhlishUK
            hkl = LoadKeyboardLayout(HKL_ENGLISH_UK, 0)
        Case hklCroatian
            hkl = LoadKeyboardLayout(HKL_CROATIAN, 0)
        Case hklSerbianCyrilic
            hkl = LoadKeyboardLayout(HKL_SERBIAN_CYRILIC, 0)
        Case hklSerbianLatin
            hkl = LoadKeyboardLayout(HKL_SERBIAN_LATIN, 0)
    End Select
    If hkl <> 0 Then SetKeyboardLanguage = (ActivateKeyboardLayout(hkl, 0) <> 0)
End Function


Kod se koristi tako što pozivate funkciju SetKeyboardLanguage (na primer po učitavanju forme):
Code:

Private Sub Form_Open(Cancel As Integer)
    Call SetKeyboardLanguage(hklSerbianLatin)
End Sub
[ Zidar @ 23.03.2005. 13:51 ] @
Konvertovanje Access u MySQL:
=============================


Pitanje:
Imam imenik Sapca u Access bazi pa mi je potrebno da prebacim podatke iz te baze u mysql bazu ili nekako da je konvertuje u mysql, zato sto na sajtu koji radim mi je potreban taj imenik. Pomozite mi kako to da uradim

Odgovori:

byTer:
Uzi MySQL Ways ili samo SQL Ways. Najnovija verzija odlicno obavlja posao.
Jos jedan dobar je i SQL Porter, ali ima ogranicenje.
Naravno mole se haker i da ga krekuju.

Mikis:
1) Eksportuj iz Accessa u CSV (ili Excell) pa preko phpMyAdmina uvezi u MySQL

2) instaliraj MyODBC, napravi ODBC konekciju prema MySQL bazi pa je ulinkuj iz samog Accessa i prebaci podatke.

Kusur:
Probaj DBManager

http://www.dbtools.com.br


Meni Tools / Data Management / Import, Export Wizards
pa onda odaberi MSDAO Import Data


[ Simke @ 27.03.2005. 00:07 ] @
Pozivanje .Net dll-a iz Access-a

http://support.microsoft.com/?kbid=817248

Pogledajte sekciju
Expose the Visual Basic .NET assembly to Visual Basic 6.0

Dat je jednostavan primer kako napraviti dll u VB.Net i koristiti ga u VB6, ali radi bez problema i u VBA (access).
[ bobiris @ 31.03.2005. 00:30 ] @
Postovanje i pozdrav svima.

Hteo bih da se vratim na kod za zastitu baze koji nam je poslao DarkMan.

Lepo je sve objasnjeno i sve funkcionise, ali...

Uradio sam sve kako je gore navedeno, prijavio da nisam registrovan, pa pri podizanju pokrenuo formu sa upitom za sifru, ukucao 555555, pritisnuo dugme za proveru sifre, i, otvorio mi se moj Swithboard. Kada sam izasao iz programa i ponovo ga pokrenuo, nije me vise pitao, vec se odmah otvorio Switchboard. Taman sam se lepo obradovao, kad...

Iskopiram taj mdb na moj drugi racunar i pokrenem ga, - pita za sifru. Odlicno! Znaci, primetio je da je drugi disk-racunar u pitanju. Ukucam opet 555555 i gle, otvori se Switchboard! Onda sam shvatio da mi sve to ne vredi, jer "Perica" ce dati program "Mikici" i reci ce mu: "Kada te pita za sifru, ti ukucaj 555555, i radice". I bice u pravu.

Pokusavao sam da nekako nadjem taj broj diska koji je funkcija izbacila, pa da da na dugme za proveru sifre, umesto:

Code:

Private Sub ButtonProveraSifra_Click()
    If EditSifra.Value = "vaša šifra" Then
        Call RegisterProgram
        DoCmd.Close
        DoCmd.OpenForm "Switchboard"
    Else
        MsgBox "Šifra nije ispravna!", vbCritical, "Greška"
    End If
End Sub


stavim sledece:

Code:

Private Sub ButtonProveraSifra_Click()
    If EditSifra.Value = "BROJ DISKA + 555555" Then
        Call RegisterProgram
        DoCmd.Close
        DoCmd.OpenForm "Switchboard"
    Else
        MsgBox "Šifra nije ispravna!", vbCritical, "Greška"
    End If
End Sub


Ali nisam nasao gde mu je ta vrednost za serijski broj diska, pa nisam uspeo ni da ostvarim ono sto sam hteo:

Da umesto obicne provere sifre, istu pomnozim (podelim, napravim koren ili sl.) sa vrednoscu koja proizilazi iz date funkcije za iscitavanje serijskog broja diska, pa da to onda bude sifra za ulaz u program. Znaci, "Perica" ne bi mogao "Mikici" da da probram i sifru 555555, jer "Mikica" ima drugi racunar-disk sa drugim serijskim brojem, pa nece moci da pogodi kako sam ja to izracunao.

Mislim da bi na ovaj nacin zastita bila mnogo sigurnija.

Bilo bi dobro (barem ja mislim) kada bi DarkMan dopunio ovako lepo objasnjenu zastitu sa mojom preporukom, pa sve to opet stavio na ovaj post, jer je ovo do sada zaista dobro, i sto je najvaznije, sve je tu, korak po korak, pa svako moze da razume, cak i onaj koji je, kao ja, pocetnik.

Eh, da! Onda jos samo ostaje pitanje sa vremenskom "trial" verzijom. Banem je sve ovo napisao na sajtu "praktikum", ali ja nisam uspeo to da primenim. A samo to jos fali, pa da ova zastita bude stvarno kompletna (barem ja tako mislim).

Hvala i pozdrav DarkMan-u i ostalim.
[ Gomatami @ 03.05.2005. 10:26 ] @
Prilikom izrada “user friendly” Access aplikacija, cesto se moze desiti da je odabir opcija ili nekih radnji sa cestim ponavljanjem “kliktanjem” na duze staze prespor. Tu stupaju na scenu programirani tasteri ili kombinacije tastera.

Znaci, pitanje glasi: Kako da se pritiskom na taster CTRL+N dodam novi zapis, a na kombinaciju SHIFT+D stampa dnevni izvestaj?

Prvi korak je pravljenje makroa pod nazivom AutoKeys.

U radnom Toolbaru ukljuciti opciju Macro Name.

U kolonu Macro Name upisati kombinaciju tastera ili sam taster koji treba da inicira dogadjaj. U nasem slucaju je to taster CTRL+N i CTRL+G:



Naravno, popunicete sve preostale trazene parametre u makrou.

Viticaste zagrade {} se koriste za obelezavanje SISTEMSKIH tastera (svi funkcijski F1 - F12, Insert, Delete, Home ...)
Znak "+" - plus, se koristi za kombinaciju SHIFT+NEKI_TASTER.
Znak "^" se koristi za kombinaciju CTRL+NEKI_TASTER.

Kada zavrsite sa pakovanjem AutoKeys makroa, snimiti ga i restartovati aplikaciju

P.S.
Moracemo da napisemo TOP temu "Slanje fajlova uz poruku"! Gojko, Gojko ... Ccccc...

Ovo je dodao Memfis:
----
Ja sam ovaj problem resio ovako:

Code:
Private Sub Form_Load()
Me.KeyPreview = True
End Sub


onda,

Code:
Private Sub Form_KeyDown(keycode As Integer, shift As Integer)
Select Case keycode
Case vbKeyF1
neki kod
Case vbKeyF2
neki kod
Case Else
End Select
End Sub


Postavio sam korisniku F1-F5 komande koje najcesce koristi, sto dosta ubrzava rad...

-----
[ adenis @ 25.05.2005. 09:02 ] @
napravite shortcut do vase baze. udite u properties shortcata. u target upisite:

"C:\Program Files\Microsoft office\Office\MSACCESS.EXE" "C:\Desktop\baza.mdb" /runtime

znaci prvi dio je target do vaseg msaccess.exe a drugi dio ce te dobiti kreiranjem shortcata i predstavalja naravno target do vase baze.

dodavanjem /runtime vasa baza ce se uvijek pokretati u runtime nacinu rada.
;-)
[ adenis @ 06.06.2005. 14:20 ] @
ko cita ne skita. ovo isto moram da podijelim sa nekim. radi provjereno, super fazon.

General: Replace the Access splash screen
Author(s) Dev Ashish
You can replace the default splash screen displayed when Access is starting up. Create a new bitmap (BMP) and save it in the same folder where your database resides. Name the bitmap the same as your database. For example

C:\MyApp\SuperApp.MDB
C:\MyApp\SuperApp.BMP

CAUTION:
I've seen this technique frequently result in a complete crash (Blue Screen Of Death) under Win NT 4.0. I haven't been able to duplicate the crash in Win 95 environment.Some folks suggest that this can be because of the Bitmap file size, however, I haven't seen any conclusive evidence. So, if you're using this method, make sure that you test your app rigorously in both NT and 95 environments.

treba li prevod?

[ Daks @ 01.10.2005. 12:21 ] @
Postavite sat na formu!
[ Zidar @ 04.10.2005. 13:38 ] @
Zeljko Raspudic, o stampanju na matricnim stampacima
Citat:

Svima nama koji se bavimo programiranjem je jasno da dolaskom Windows
orjentisanih programa dolazi do "tihe" sahrane matričnih štampača.
Kome ipak nije jasno neka oštampa neki izvještaj iz, recimo, Access-a i
poredi brzinu štampanja izvještaja slične dužine iz nekog DOS programa
(recimo Clipper-a). Posto su matrični štampači jako rasprostranjeni u
poslovima vezanim za knjigovodstvo nije tek tako preći na lasere.
Problem pogotovo dolazi do izražaja kod referata koji zbog obimnosti
podataka moraju da koriste A3 papir (recimo neke liste u Osnovnim
sredstvima). Tu nije lako preći na A3 laser koji je i dalje dosta skup
a takođe i toneri za njega.
Zbog toga sam prešao na "DOS" stampanje iz Access-a ali sam naišao
na problem kod prelaska na novu stranicu (Form Feed).
Koristeći zvaničnu ESC sekvencu za prelaz na novu stranu tj. Chr(12)
nalazio sam na problem da zavisno od situacije nekada nedostaje
jedan do dva reda a nekada doda red više. Kao posljedica toga je
pogrešno štampanje višestraničnih dokumenata i pogrešan rad
Tear Off-a (izvuče stranicu više).
Printer je hardverski dobro podesen jer njegovo dugme Form Feed i Tear Off
rade normalno.
Koristim "beskonačni" papir i probao sam na LQ-1170 i LX 300 sa identicnim
rezultatima
Logiku greške nisam uspio da dokučim.
Poslije dosta muke napustio sam Chr(12) i problem riješio na sljedeći
način:
Otvori se željeni recordset pa onda sljedi

Public inicijal as String
Public red As Integer
Public Ima_zag As Boolean
Public i As Integer ' za For Next

' 12" dužina strane, normalno rastojanje redova i normalni font
' moglo bi i bez ovog reda ako je štampač hardverski dobro podešen ali
' je ovako sigurnije
inicijal = Chr(27) + "C" + Chr(0) + Chr(12) + Chr(27) + Chr(1) + Chr(27) + "P"
Open "lpt1:" For Output As #1

red = 1
Print #1, inicijal

NoviRed ' pogledati šta radi ova funkcija
Print #1, "Ime firme, naslovi itd"

NoviRed
ZagInv

Ima_zag = True
rst.MoveFirst
Do While Not rst.EOF
NoviRed
Print #1, "štampati potrebne kolone iz otvorenog recordset-a"

rst.MoveNext
Loop

Ima_zag = False

NoviRed
Print #1, ' ovo je prazan red ali i njega treba prebrojati

NoviRed
Print #1, "tekst koji ide ispod do loop petlje"

For i = 1 To 72 - red ' ovo glumi FF pošto Chr(12) FF dodaje bez veze red
Print #1, ' prazni redovi , ovako treba a ne Chr(10) + Chr(13)
Next

Close #1


Private Sub ZagInv()

' primjer zaglavlja
Print #1, "---------------------------------------------------------------------------------------"

red = red + 1
Print #1, "Inv.broj Naziv osnovnog sredstva Količina"

red = red + 1
Print #1, "----------------------------------------------------------------------------------------"

End Sub


Private Sub NoviRed()
If red = 66

For i = 1 To 72 - red ' ovo glumi FF pošto Chr(12) FF dodaje bez veze red
Print #1, ' novi red
Next

red = 2 ' ZAŠTO 2 A NE 1, PITANJE JE SAD??? ALI OVAKO RADI!

If Ima_zag Then ' zaglavlje se dodaje ne na svakom 66 redu već samo
' gdje treba (može postojati duži ili kraći tekst ispod
' do loop petlje i tu ne treba zaglavlje.
ZagInv
Else
red = 1 ' treba za redove ispod Do Loop petlje
End If

Else
red = red + 1
End If

End Sub



Važi i za A4 i A3 a i Form Feed radi baš kako treba.

Pozdrav Željko
[ dakuri @ 17.10.2005. 15:54 ] @
Primer za to da current red u formi bude druge boje
http://www.mvps.org/access/forms/frm0047.htm
[ sbing @ 20.03.2006. 10:38 ] @
Sumiranje polja po stranicama unutar izveštaja, jednostavno objašnjenje za to ima na
http://www.personalmag.co.yu/access17.htm

[ Zidar @ 21.06.2006. 13:45 ] @
Kontrola otvaranja Access fajla pomocu SHIFT ENTERE tatsera, za Access Data Projects:

http://www.elitesecurity.org/tema/172270

Hvala Zeljku na korisnom savetu.

:-)
[ Zidar @ 28.06.2006. 16:12 ] @
Specijalini-znaci-superscript-Accessu, od BiloKoje:
http://www.elitesecurity.org/tema/184237

Vidi zakaceni fajl.
[ Zidar @ 13.09.2006. 14:36 ] @
Trtko je ostavio interesantan post - Import from outlook to Access
http://www.elitesecurity.org/t215332-Import-maila-iz-Outloka
[ Getsbi @ 12.06.2007. 19:03 ] @
Dodeljivanje proizvoljnih komandi funkcijskim tasterima
Osobinu Key Prevew forme postaviti na Yes, pa upotrebiti otprilike ovakvu proceduru na događaj On Key Down.
Code:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
        Select Case KeyCode
             Case vbKeyEscape:
                                 KeyCode = 0
                                 DoCmd.Close
             Case vbKeyTab:
                                 KeyCode = 0
             Case vbKeyF1:
                                 KeyCode = 0
                                 DoCmd.OpenForm "HelpPoruka"
              Case vbKeyF2
                                 KeyCode = 0
                                 NoviDok_Click
               Case vbKeyF3
                                 KeyCode = 0
                                 Pregled_Click
               Case vbKeyF5
                                 KeyCode = 0
                                 Knjizenje_Click
         End Select
End Sub


Naravno iza željenog KeyCode = 0 postaviti ono što treba da se izvrši.
[ Zidar @ 13.06.2007. 17:22 ] @
Problem: napraviti pop-up box, slicno kalendarima. kad korisnik zeli da unses nesto u neki text box, klikne neko dugmenxe i iskoci formica (pop-up) sa listom opcija. Kad izabere iz liste sta treba, ta se vrednost prenese na glavnu formu u zeljenu kontrolu, a pop-up nestane sa vidika.

Nije za absolutne pocetnike, ali nije mnogo ni tesko, mislim nema mnogo posla fizicki. Da se ovo razume, to je vec individualno i nije lako. Na srecu, nije potrebno da se razume, moze i da se prepise.

Ovako, potrebne su dve stvari:
1. pop up forma, sa nekim list boxom iz koga se nesto bira
2. standardni modul modPopUp, u kome se nlzi jedna ili dve funkcije

Na formi sa koje se poziva pop-up pozeljno je dugme za pozivanje pop-up formice.

Zakaceni primer PoUpSelector.mdb sadrzi formu sa koje se poziva pop-up, sam pop-up i sve potrebne funkcije.
Sav posao zavrsava funkcija funPopUpCall, koja se nalazi u modulu. Ona poziva funkciju koja proverava da li je enka forma otvorena, imate i to u modulu.

Za svaku pop-up formu, mora se napraviti modul i u njemu funkcija koja poziva bas taj pop up. Ovo je zato sto se u telu funkcije funPopUpCall ukazuje na list box kontrolu koja stoji na pop up formi.

U primeru imate kako se poziva pop up forma sa dugmeta, i kako se poziva recimo duplim klikom na sam text box koji zelimo da popunimo iz pop-up forme.

Za iskusnije programere, postoji i genericko resenje (donekle), koje ne zahteva modul i funkciju za svaki pop up u aplikaciji, vec jedna ista funkcija radi sve sto treba. Vidi drugi zakaceni fajl.
[ TomaParComp @ 21.10.2007. 20:13 ] @
Citat:
Zidar: Zeljko Raspudic, o stampanju na matricnim stampacima :-)


Citat:
Svima nama koji se bavimo programiranjem je jasno da dolaskom Windows
orjentisanih programa dolazi do "tihe" sahrane matričnih štampača.
Kome ipak nije jasno neka oštampa neki izvještaj iz, recimo, Access-a i
poredi brzinu štampanja izvještaja slične dužine iz nekog DOS programa
(recimo Clipper-a). Posto su matrični štampači jako rasprostranjeni u
poslovima vezanim za knjigovodstvo nije tek tako preći na lasere.
Problem pogotovo dolazi do izražaja kod referata koji zbog obimnosti
podataka moraju da koriste A3 papir (recimo neke liste u Osnovnim
sredstvima). Tu nije lako preći na A3 laser koji je i dalje dosta skup
a takođe i toneri za njega.
Zbog toga sam prešao na "DOS" stampanje iz Access-a ali sam naišao
na problem kod prelaska na novu stranicu (Form Feed).
Koristeći zvaničnu ESC sekvencu za prelaz na novu stranu tj. Chr(12)
nalazio sam na problem da zavisno od situacije nekada nedostaje
jedan do dva reda a nekada doda red više. Kao posljedica toga je
pogrešno štampanje višestraničnih dokumenata i pogrešan rad
Tear Off-a (izvuče stranicu više).
Printer je hardverski dobro podesen jer njegovo dugme Form Feed i Tear Off
rade normalno.
Koristim "beskonačni" papir i probao sam na LQ-1170 i LX 300 sa identicnim
rezultatima
Logiku greške nisam uspio da dokučim.
Poslije dosta muke napustio sam Chr(12) i problem riješio na sljedeći
način:


Imam primedbe na gore postovano uputstvo...

Meni se mnogo bolje pokazala kombinacija:

Code:

        cImeFajla = getTmpName()

        Set fs = CreateObject("Scripting.FileSystemObject")

        Set fileRacun = fs.CreateTextFile(cImeFajla, True)
        ...
        ...
        cRed = " << tekst koji ide na štampu >> "
        fileRacun.WriteLine (cRed)
        nRed = nRed + 1
        ...
        ...

        fileRacun.Write (Chr(12))
            
        fileRacun.Close

        cPort = "PRN"
        fs.CopyFile cImeFajla, cPort
        fs.DeleteFile cImeFajla


Obratiti pažnju na razliku izmedju Write i WriteLine, tu uvek nastaje problem sa FF kodom jer WriteLine kao i gornji Print #1, dodaje na kraju linije CRLF što pravi problem sa pozicioniranjem na strani jer printer prvo predje na drugu stranu(FF) pa onda napravi još jedan(CRLF) red što poremeti pozicioniranje.

Najbolje bi bilo da FF ide NA KRAJU ZADNJEG REDA i to:
Code:

        fileRacun.Write (" <<< zadnji red izveštaja >>> "  & Chr(12))

i to onda radi 1000%


[ bojan_mil @ 19.02.2008. 22:11 ] @
Resenja za blokiranje funkcija toolbar-a i file menu-a u access-u

I
Tools, Startup. Pogledaj opcije koje se nude. Kad isključiš te opcije, a želiš normalno da uđeš u aplikaciju pod standardnim uslovima, uradiš to uz držanje tastera Shift. To je jedne od opcija za sprečavanje mogućnosti namernog ili nenamernog ugrožavanja aplikacije i podataka. Reklo bi se da je dobra. Nije ijedina.


II
Public Sub UnlockDB()
CurrentDb.Properties("AllowFullMenus") = True
CurrentDb.Properties("AllowBuiltInToolbars") = True
CurrentDb.Properties("AllowShortcutMenus") = True
CurrentDb.Properties("AllowSpecialKeys") = True
End Sub

Public Sub LockDB()
CurrentDb.Properties("AllowShortcutMenus") = False
CurrentDb.Properties("AllowFullMenus") = False
CurrentDb.Properties("AllowBuiltInToolbars") = False
CurrentDb.Properties("AllowSpecialKeys") = False
End Sub

Efekti će biti vidljivi tek kada se baza ponovo otvori. Možeš ovo spakovati u jednu proceduru, koristeći argument tipa boolean.


III
DoCmd.ShowToolbar "Menu bar", acToolbarNo
DoCmd.ShowToolbar "Form Design", acToolbarNo
DoCmd.ShowToolbar "Form View", acToolbarNo
DoCmd.ShowToolbar "Database", acToolbarNo
DoCmd.ShowToolbar "Formatting (Form/Report)", acToolbarNo
DoCmd.ShowToolbar "Formatting (Datasheet)", acToolbarNo



DoCmd.ShowToolbar "Menu bar", acToolbarYes

....naravno da ga opet prikaže






IV
Public Sub RegEditDB (MakeVisible As Boolean)

' Instant zakljucavanje / otkljucavanje menija
Dim AST As AcShowToolbar
AST = IIf(MakeVisible, AcToolbarYes, AcToolbarNo)
DoCmd.ShowToolbar "Menu bar", AST
DoCmd.ShowToolbar "Form Design", AST
DoCmd.ShowToolbar "Form View", AST
DoCmd.ShowToolbar "Database", AST
DoCmd.ShowToolbar "Formatting (Form/Report)", AST
DoCmd.ShowToolbar "Formatting (Datasheet)", AST

' Zahteva restart
CurrentDb.Properties("AllowBuiltInToolbars") = MakeVisible
CurrentDb.Properties("AllowShortcutMenus") = MakeVisible
CurrentDb.Properties("AllowSpecialKeys") = MakeVisible

End Sub
[ Zidar @ 10.04.2008. 14:46 ] @
Zaokruzivanje Brojeva na proizvoljnu vrednost (ne samo na zadati broj decimala).

Na primer, zelite da zaokruzite nesto na najblizih 5 ili 25. Ili na najblizi Inch. Ili na nalblizih 15 minuta (0.25 od sata)
A mozete da zaokruzite na gore i na dole, na bilo koji inkrement.

Evo funkcija:

Code:

Public Function Round_Z(X As Variant, U As Variant) As Variant
'Namena: zaokruzuje brojeve na bilo koju jedinicu mere
'jedinica mere moze biti decimalna ali i 'najblizih 2 cm', najblizih 15 minuta,
'bilo sta
'Iz ove funkcije izvode se i druge dve RoundUp_Z i RoundDown_Z, koje
'zaokruzju na prvu vecu ili manju okruglu vrednost jedinice mere
'Primeri:
'Zaokruzi na jednu decimalu:
'Print Round_Z(0.12345, 0.1)
' 0.1
'Zaokruzi na 3 decimale:
'Print Round_Z(0.12355, 0.001)
' 0.124
'Zaokruzi an 5 decimala:
'Print Round_Z(0.12355, 0.00001)
' 0.12355
'Zaokruzi na ceo broj
'Print Round_Z(12355.6355, 1)
'12356
'Zaokruzi na najblizi paran broj (2)
'Print Round_Z(12355.12355, 2)
'12356
'Zaokruzi na najblizi broj deljiv sa 3:
'Print Round_Z(12355.12355, 3)
'12354
'Na najblizu stotinu:
'Print Round_Z(12355.12355, 100)
'12400
'Na najblizih 0.25:
'Print Round_Z(12355.12355, 0.25)
'12355
'Print Round_Z(12355.26355, 0.25)
' 12355.25

Round_Z = Int((X + U / 2) / U) * U


End Function

Function RoundUp_Z(X As Variant, U As Variant) As Variant
'Zaokruzuje zadati broj X na prvi umnozak od U koji je veci od X
'Primeri:
'Zaokruzi na prvi veci broj deljiv sa 5
'? RoundUp_Z(12.015,5)
'15
'
RoundUp_Z = Round_Z(X + U / 2, U)
End Function

Function RoundDown_Z(X As Variant, U As Variant) As Variant
'Zaokruzuje zadati broj X na prvu manju jedinicu U
'Primeri:
'Zaokruzi na prvi manji broj deljiv sa 5
'Print RoundDown_Z(37, 5)
'35
RoundDown_Z = Round_Z(X - U / 2, U)
End Function

[ Getsbi @ 29.07.2008. 20:15 ] @
Kolega domaci_a_nas je dao kod na temu, kako isčitati sve postojeće diskove u kompjuteru.
Code:
Public Sub ShowDrives()
    Dim fso As Object
    Set fso = CreateObject("scripting.FileSystemObject")
    Dim drv, d, strText
    
    Set drv = fso.Drives
    
    For Each d In drv
        Select Case d.DriveType
            Case 0: strText = "Nepoznato   - "
            Case 1: strText = "Floppy      - "
            Case 2: strText = "HDD         - "
            Case 3: strText = "Mrezni disk - "
            Case 4: strText = "CD-ROM      - "
            Case 5: strText = "RAM Disk    - "
        End Select
        strText = strText & d.DriveLetter & ": "
        If d.isready Then strText = strText & d.volumeName
        Debug.Print strText
    Next d
    
    Set fso = Nothing
End Sub
[ Getsbi @ 28.08.2008. 11:17 ] @
Još jedna funkcija za prikaz broja slovima. Autor je kolega goranvuc.
Code:
'****************************************************************************
'                 FUNKCIJA ZA PRETVARANJE BROJA U TEKST
'****************************************************************************
Private varCifreJedinice As Variant
Private varCifreDoDvadeset As Variant
Private varCifreDesetice As Variant
Private varCifreStotine As Variant

Public Function PretvoriBrojUTekst(ByVal dblUlazniBroj As Double) As String
   Dim strCifra As String
   Dim intDuzinaCifre As Integer
   Dim intBrojTrojki As Integer
   Dim intOstatak As Integer
   Dim intBrojac As Integer
   Dim strMINUS As String
   
   varCifreJedinice = Array("", "jedan", "dva", "tri", "èetiri", "pet", _
                             "šest", "sedam", "osam", "devet")
   
   varCifreDoDvadeset = Array("deset", "jedanaest", "dvanaest", "trinaest", _
                             "èetrnaest", "petnaest", "šesnaest", "sedamnaest", "osamnaest", "devetnaest")
   
   varCifreDesetice = Array("", "", "dvadeset", "trideset", "èetrdeset", _
                             "pedeset", "šezdeset", "sedamdeset", "osamdeset", "devedeset")
   
   varCifreStotine = Array("", "sto", "dvesto", "tristo", "èetirsto", "petsto", _
                            "šesto", "sedamsto", "osamsto", "devetsto")
   
   If dblUlazniBroj < 0 Then
      strMINUS = "-"
      dblUlazniBroj = Abs(dblUlazniBroj)
   End If
   
   PretvoriBrojUTekst = ""
   strCifra = Format(dblUlazniBroj, "###################.00")
   strCifra = Left(strCifra, Len(strCifra) - 3)
   intDuzinaCifre = Len(strCifra)
   intOstatak = intDuzinaCifre Mod 3
   intBrojTrojki = (intDuzinaCifre / 3) - ((intDuzinaCifre Mod 3) / 3)
   
   If dblUlazniBroj < 1000000000000# Then
       If intOstatak > 0 Then
           PretvoriBrojUTekst = OdrediTekstPodcifre(Left(strCifra, intOstatak), intBrojTrojki)
           strCifra = Right(strCifra, Len(strCifra) - intOstatak)
       End If
       For intBrojac = intBrojTrojki To 0 Step -1
           PretvoriBrojUTekst = PretvoriBrojUTekst & OdrediTekstPodcifre(Left(strCifra, 3), intBrojac - 1)
           If Len(strCifra) > 3 Then
               strCifra = Right(strCifra, Len(strCifra) - 3)
           End If
       Next
   Else
   End If
   
   strCifra = Format(dblUlazniBroj, "###################.00")
   strCifra = Right(strCifra, 2)
   
   If Len(PretvoriBrojUTekst) > 0 Then
       'PretvoriBrojUTekst = UCase(Left(PretvoriBrojUTekst, 1)) & Right(PretvoriBrojUTekst, Len(PretvoriBrojUTekst) - 1)
       If (Right(PretvoriBrojUTekst, 5) = "Jedan") Or (Right(PretvoriBrojUTekst, 5) = "jedan") Then
           PretvoriBrojUTekst = PretvoriBrojUTekst & " " & strCifra & "/100."
       Else
           PretvoriBrojUTekst = PretvoriBrojUTekst & " " & strCifra & "/100."
       End If
   End If
End Function

Private Function OdrediTekstPodcifre(ByVal strPodcifra As String, _
                                     intVelicina As Integer) As String
   
   Dim strTekst As String
   
   OdrediTekstPodcifre = ""
   
   If Val(strPodcifra) <> 0 Then
       strTekst = OdrediTekst(strPodcifra)
       
       Select Case intVelicina
           Case 0
           
               OdrediTekstPodcifre = strTekst
               
           Case 1
               
               'Slucaj za 11000,12000,13000,14000
               If strPodcifra = "11" Or strPodcifra = "12" Or strPodcifra = "13" Or strPodcifra = "14" Then
                  
                  OdrediTekstPodcifre = strTekst
                  OdrediTekstPodcifre = OdrediTekstPodcifre & "hiljada"
               
               Else
                  
                  'korekcija za slucaj za 2000, 22000, 32000 ....
                  If Right(strPodcifra, 1) = "2" Then
                     OdrediTekstPodcifre = Left(strTekst, Len(strTekst) - 1) & "e"
                  Else
                     OdrediTekstPodcifre = strTekst
                  End If
               
                  Select Case Right(strPodcifra, 1)
                     'Slucaj za 21000, 31000 ....
                     Case "1"
                        OdrediTekstPodcifre = Left(OdrediTekstPodcifre, Len(OdrediTekstPodcifre) - 2) & "nahiljada"
                     Case "2", "3", "4"
                        OdrediTekstPodcifre = OdrediTekstPodcifre & "hiljade"
                     Case Else
                        OdrediTekstPodcifre = OdrediTekstPodcifre & "hiljada"
                  End Select
               
                  'Slucaj za 1000
                  If Val(strPodcifra) = 1 Then
                     OdrediTekstPodcifre = "hiljadu"
                  End If
                  
               End If
           Case 2
               OdrediTekstPodcifre = strTekst & "miliona"
               If Val(strPodcifra) = 1 Then
                   OdrediTekstPodcifre = "milion"
               End If
           Case 3
               If Val(strPodcifra) = 1 Then
                   OdrediTekstPodcifre = "milijardu"
                   Exit Function
               End If
               If Val(Right(strPodcifra, 2)) > 5 And Val(Right(strPodcifra, 2)) < 21 Then
                   OdrediTekstPodcifre = strTekst & "milijardi"
                   Exit Function
               End If
               If Right(strPodcifra, 1) = "2" Then
                   OdrediTekstPodcifre = Left(strTekst, Len(strTekst) - 1) & "e"
               Else
                   OdrediTekstPodcifre = strTekst
               End If
               Select Case Right(strPodcifra, 1)
                   Case "1"
                       OdrediTekstPodcifre = Left(OdrediTekstPodcifre, Len(OdrediTekstPodcifre) - 2) & "namilijarda"
                   Case "2", "3", "4"
                       OdrediTekstPodcifre = OdrediTekstPodcifre & "milijarde"
                   Case Else
                       OdrediTekstPodcifre = OdrediTekstPodcifre & "milijardi"
               End Select
               If Val(strPodcifra) = 1 Then
                   OdrediTekstPodcifre = "milijardu"
               End If
       End Select
   End If
End Function

Private Function OdrediTekstDoSto(strPodcifra As String) As String
   OdrediTekstDoSto = ""
   
   Select Case Val(strPodcifra)
       Case 1 To 9
           OdrediTekstDoSto = varCifreJedinice(Val(strPodcifra))
       Case 10 To 19
           OdrediTekstDoSto = varCifreDoDvadeset(Val(strPodcifra) - 10)
       Case 20 To 99
           OdrediTekstDoSto = varCifreDesetice(Val(Left(strPodcifra, 1))) & varCifreJedinice(Val(Right(strPodcifra, 1)))
   End Select
End Function

Private Function OdrediTekst(strPodcifra As String) As String
   OdrediTekst = ""
   Select Case Val(strPodcifra)
       Case 1 To 99
           OdrediTekst = OdrediTekstDoSto(Val(strPodcifra))
       Case 100 To 999
           OdrediTekst = varCifreStotine(Val(Left(strPodcifra, 1))) & OdrediTekstDoSto(Val(Right(strPodcifra, 2)))
   End Select
   
End Function



link ka temi: http://www.elitesecurity.org/t334772-0#2037079
[ Catch 22 @ 28.08.2008. 12:43 ] @
Rešenje problema za ispis broja slovima postoji odavno, kod je proglašen za javno vlasništvo još davne 1991!!!!!

Preuzmite mdlSlovimaBroj

Isto to, samo malo drugačje imate ovde ili Excel macro za ispis broja ćirilicom



[Ovu poruku je menjao Catch 22 dana 29.08.2008. u 12:38 GMT+1]
[ Trtko @ 10.11.2008. 17:42 ] @
Kako prepisati formu u txt fajl

Code:


application.saveastext acForm,"Imeforme","c:\folder\nekitekst.txt"

kreiranje forme iz txt fajla

application.loadfromtext acForm,"Imeforme", "c:\folder\nekitekst.txt"


Kad ste u VB kodu uključite onaj Immediate prozor i u njemu ukucajte gornju komandu
naravno da mora postojat neka forma u bazi.
[ rstevic @ 13.11.2008. 15:22 ] @
ODBC Connection String na udaljeni SQL Server.

Najzanimljivije ovde je to da kada imate SQL Server u svojoj mrezi i u domenu samo linkovanje preko file.DSN.
Medjutim u pokusaju da se linkujete na udaljeni SQL Server, recimo neki koji se hostuje kod nekog provajdera takva konekcija jednostavno ne prolazi, svaki put kada pokusate da otvorite bazu cete, posle duzeg cekanja (pokusaj da se konekcija uspostavi) dobiti SQL prompt da ukucate Username I PASSWORD.
Niko od nas zaista ne zeli da mu svi korisnici znaju SQL Security pa je to prilicno neprihvatljivo, a i ne izgleda profesionalno.

SADA dolazi na red najzanimljiviji deo price i resenje do koga smo dosli Zidar i ja udruzenim snagama:

Najpre treba napraviti SELECT Query koji gadja tabelu direkno na SQL Serveru i to na sledeci nacin:

SELECT *
FROM Artikli "IN[ODBC;DRIVER=SQL Server;SERVER=xxx.xxx.xxx.xxx;DSN=imeDSNFile;APP = Microsoft Data Access Components;WSID=spiderman;DATABASE=mikimini;UID=patakdaca;PWD=SafetSusic;]
WHERE(((Artikli.sifra_proizvoda)=-1));

Dakle to je upit koji iz tabele Artikli na SQL Serveru ne treba nista da vrati (vidi kako je nelogican uslov), ali on je napravio konekciju i SQL Server dalje nista ne pita i nema ruznog prompta.

Na formu koja je postavljena u Database StartUp on Open staviti sledeci CODE:

DoCmd.SetWarnings False 'Iskljucuje ACCESS-ova upozorenja
DoCmd.OpenQuery "lnk" 'Startuje QUERY koji je gore naveden
DoCmd.Close 'Zatvara taj Query, jer je on aktivan u tom trenutku
DoCmd.SetWarnings True 'Vraca ACCESS-ova upozorenja

Zidar je u istoj temi dao i neki predlog sa PASS THRU QUERY ali ja to jos nisam uradio i necu nista sada da pisem o tome ali cu i to objasniti cim budem uspeo da ga nateram da radi.
[ Srbin do jaja @ 05.11.2009. 14:27 ] @
imam jedan mali dodatak za kod prebacivanja brojeva u slova.

u kodu gde se definisu brojevi od 10 do 19 nema opcije za broj 16. a po trenutnom kodu on ga ispisuje sestnaest a trebalo bi bez tog t.

znaci samo treba dodati
Code:

Case 6
rez = rez & "ses"
[ sule99 @ 11.11.2009. 10:44 ] @
RUNTIME 2007 i distribucija aplikacije u ACCESS 2007

Za ovaj postupak je potrebno Access 2007 Developer Extensions. On zapravo radi setup za aplikaciju, koji se kasnije lagano instalira na korisničkim računalima. Najbolje je raditi sa .accde fajlovima. Cijeli postupak korak po korak je najbolje objašnjen na

http://msdn.microsoft.com/en-us/library/bb501030.aspx.

Ako korisnici nemaju instaliran Access 2007, onda treba imati i Access 2007 Runtime koji se zajedno upakuje s aplikacijom u Package Solution Wizard ( - to je zapravo alat s kojim se ovo sve radi a dobije se instalacijom ranije spomenutog Access 2007 Developer Extensions). I Access 2007 Developer Extensions i Access 2007 Runtime su besplatni i mogu se skinuti sa spomenog linka. Postupak ja zapravo jako jednostavan i ne bi trebalo biti problema ni za pocetnike.

Jedina napomena je da kod odabira jezika pri kreiranju setup.exe fajla pomoću Package Solution Wizard odaberemo English, inače se postupak ne može završiti (bar je tako bilo kod mene, a vidio sam da se i drugima na forumu događalo).



[Ovu poruku je menjao Zidar dana 04.05.2010. u 23:24 GMT+1]
[ sule99 @ 16.11.2009. 11:15 ] @
FUNKCIJE ZA PRIKAZ TRENUTNOG KORISNIKA I RAČUNALA

Meni je trebalo pa sam našao na netu gotove funkcije, ako nekome zatreba da ne traži dalje.




modUserName

Option Compare Database


' This code was originally written by Dev Ashish.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of Dev Ashish at The Access Web

'VAŽNO! ovaj dio mora u zaglavlje da se stavi
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function fOSUserName() As String
' Returns the network login name
Dim lngLen As Long, lngX As Long
Dim strUserName As String
strUserName = String$(254, 0)
lngLen = 255
lngX = apiGetUserName(strUserName, lngLen)
If lngX <> 0 Then
fOSUserName = Left$(strUserName, lngLen - 1)
Else
fOSUserName = ""
End If
End Function

----------------------------------------------------------------------------



modComputerName

Option Compare Database


' This code was originally written by Dev Ashish.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of Dev Ashish


Private Declare Function apiGetComputerName Lib "kernel32" Alias _
"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Function fOSMachineName() As String

'Returns the computername
Dim lngLen As Long, lngX As Long
Dim strCompName As String
lngLen = 16
strCompName = String$(lngLen, 0)
lngX = apiGetComputerName(strCompName, lngLen)
If lngX <> 0 Then
fOSMachineName = Left$(strCompName, lngLen)
Else
fOSMachineName = ""
End If
End Function

[Ovu poruku je menjao Zidar dana 04.05.2010. u 23:23 GMT+1]
[ Zidar @ 18.01.2010. 17:58 ] @
Ovo je pripremio smal
Slobodan Maljković
Kragujevac, Srbija

u poruci http://www.elitesecurity.org/t388411-0#2496775

Ograničenje broja redova na strani izveštaja pre 1h 16min



Ukoliko želimo da ograničimo broj prikazanih redova koji se pojavljuju na jednoj strani strani izveštaja, to možemo uraditi na sledeći način:

Otvorimo report u dizajn modu, pa u Detail sekciji kreiramo novi Text Box. Naka sadrži sledeća setovanja:

Name: txtcounter
Control Source: =1
Running Sum: Over Group
Visible: No

Zatim ćemo u On Format event Detail sekcije uneti sledeći VBA kod:


Code:
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)

If [txtcounter] Mod 2 = 0 Then
Me.Detail.ForceNewPage = 2
Else
Me.Detail.ForceNewPage = 0
End If

End Sub


Tako smo dobili izveštaj koji će na svakoj strani imati samo po dve stavke. Naravno, broj redova možemo menjati po potrebi.

Preuzeto sa: http://www.databasedev.co.uk/report_printing.html

[Ovu poruku je menjao Zidar dana 04.05.2010. u 23:18 GMT+1]
[ Catch 22 @ 19.01.2010. 22:10 ] @
Originalna poruka postavljena u temi: Svojstvo Visible
==========================================

Access svoje objekte deli na "zbirke" (Collections). Objekti koji pripadaju nekoj kolekciji mogu biti referencirani iz VBA koda.
Kolekcija formi sadrži sve trenutno otvorene forme (vidljive i nevidljive). Forme koje nisu otvorene ne pripadaju nijednoj kolekciji.

Jedna vrlo korisna funkcija, kojom se utvrđuje da li je forma otvorena (učitana u kolekciju) sledi ispod:

Code:

'+------------------------------------
' Vraća vrednost 0 ako forma nije otvorena,
' odnosno -1 ako jeste otvorena
'+------------------------------------

Function fIsLoaded(ByVal strFormName As String) As Integer

    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> 0 Then
        If Forms(strFormName).CurrentView <> 0 Then
            fIsLoaded = True
        End If
    End If
End Function

Pored ovog očiglednog razloga, forme se ponekad sakrivaju i radi bržeg izvršavanja aplikacije. Mnogo brže se vrši promena iz "skriven" u "vidljiv", nasuprot "zatvoren" / "otvoren"


PS
Varijacija na istu temu:

Code:

'+------------------------------------
' PROVERAVA DA LI JE FORMA OTVORENA
' VRAĆA VREDNOST TRUE AKO JE OTVORENA U
' Form view ILI Datasheet view MODU
'+------------------------------------
Function IsLoaded(ByVal strFormName As String) As Integer
    
    Const conObjStateClosed = 0
    Const conDesignView = 0
    
    If SysCmd(acSysCmdGetObjectState, acForm, _
    strFormName) <> conObjStateClosed Then
        If Forms(strFormName).CurrentView <> conDesignView Then
            IsLoaded = True
    End If
    End If
End Function




[Ovu poruku je menjao Catch 22 dana 19.01.2010. u 23:22 GMT+1]

[Ovu poruku je menjao Zidar dana 04.05.2010. u 23:19 GMT+1]
[ Zidar @ 26.02.2010. 21:48 ] @
Kako iz Accesa startovati neki drugi program? I sta ako su imena foldera sastavljen aod vise reci?

Ovo je bilo originalno pitanje:
http://www.elitesecurity.org/t...ti-prezentaciju-pps-iz-Accessa

Trtko je dao briljantno resenje:

Citat:

Ovako radi 100%

kojiprogram = "C:\Program Files\Microsoft Office\Office10\POWERPNT.EXE"
stopokrenut = "C:\Documents and Settings\Trtko\My Documents\Preuzimanja\Program\odmor.pps"
Shell Chr(34) & kojiprogram & Chr(34) & " " & Chr(34) & stopokrenut & Chr(34), 1

Pozdrav


Majstor je majstor

[Ovu poruku je menjao Zidar dana 04.05.2010. u 23:17 GMT+1]
[ smal @ 28.04.2010. 16:20 ] @
Evo ga jedan jednostavan a efikasan skriptić koji omogućava da korisnici u lokalnoj mreži, na svojim računarima uvek imaju aktuelnu verziju FrontEnd aplikacije.

Code:
Const OverwriteExisting = TRUE

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objLocalFile = objFSO.GetFile("D:\FOLDER\Program_FE.mde")
dtmLocalDate = objLocalFile.DateLastModified

Set objServerFile = objFSO.GetFile("\\Server\Share\Program_FE.mde")
dtmServerDate = objServerFile.DateLastModified

If dtmLocalDate < dtmServerDate Then
    objFSO.CopyFile objServerFile.Path, objLocalFile.Path, OverwriteExisting
End If

Sub Run(ByVal sFile)
Dim shell

    Set shell = CreateObject("WScript.Shell")
    shell.Run Chr(34) & sFile & Chr(34), 1, false
    Set shell = Nothing
End Sub
Run "D:\FOLDER\Program_FE.mde"

Dakle, skript pri startovanju proverava da li je datum FE fajla na lokalnom disku noviji od onoga na deljenom folderu u mreži (serveru), na kome je aktuelna verzija, i ukoliko to nije slučaj, kopira fajl sa servera na lokal, pa zatim startuje lokalnu verziju...

Skript snimite sa .vbs ekstenzijom i postavite ga kao shortcut na klijentskim računarima.


[Jos opcija imate u temi http://www.elitesecurity.org/t398557-1-Uvek-taze-FrontEnd



[Ovu poruku je menjao Zidar dana 28.11.2011. u 16:05 GMT+1]
[ Zidar @ 04.05.2010. 22:20 ] @
Interesantna tema http://www.elitesecurity.org/t398638-Pracenje-cijene-kroz-vrijeme

Pokazano je kako se moze izbeci preisivanje cene u tabelu tipa STavkeNaRacunu. Umseto toga, u Cenovnik se upisuju cen za artikle sa razlicitim datumima vazenja. jedan artikl ima vis erekorda u Cenovniku, kad god es promenic ena upise se novi rekord. Onda se Cenovnik i STavkeRacuna povezu kverijem , tako da za svaku stavku (artikl) kveri cita iz cenovnika odgovarajucu cenu, na osnovu datuma racuna u tabeli Racuni.



[Ovu poruku je menjao Getsbi dana 10.05.2010. u 04:55 GMT+1]
[ Zidar @ 24.06.2010. 13:40 ] @
Mnogo puta postavljeno je pitanje: "Iskazati razliku izmedju dva datuma u obliku 4 godine 2 meseca i 3 dana". To nije lak zadatak i vecian resenja sirom interneta su glomazna, komplikovana i vecina ima i poneku gresku, koju nije lako otkriti.

NA ovom sajtu http://www.accessmvp.com/djsteele/Diff2Dates.html data je funkcija koja radi to sve. U slucaju da se sajt ugasi u buducnosti, evo funkcije i kako se koristi.

Primeri koriscenja funkcije:
Code:

?Diff2Dates("y", #06/01/1998#, #06/26/2002#)
4 years
?Diff2Dates("ymd", #06/01/1998#, #06/26/2002#)
4 years 25 days
?Diff2Dates("ymd", #06/01/1998#, #06/26/2002#, True)
4 years 0 months 25 days
?Diff2Dates("d", #06/01/1998#, #06/26/2002#)
1486 days

?Diff2Dates("h", #01/25/2002 01:23:01#, #01/26/2002 20:10:34#)
42 hours
?Diff2Dates("hns", #01/25/2002 01:23:01#, #01/26/2002 20:10:34#)
42 hours 47 minutes 33 seconds
?Diff2Dates("dhns", #01/25/2002 01:23:01#, #01/26/2002 20:10:34#)
1 day 18 hours 47 minutes 33 seconds

?Diff2Dates("ymd",#12/31/1999#,#1/1/2000#)
1 day
?Diff2Dates("ymd",#1/1/2000#,#12/31/1999#)
-1 day
?Diff2Dates("ymd",#1/1/2000#,#1/2/2000#)
1 day




Sama funkcija je data ovde. REzultat koji se vraca je na engleskom, a ko hoce moze da napise funkciju za prevodjenje rezultata na lokalni jezik (vodite racuna o padezima :-))
Code:

'***************** Code Start **************
Public Function Diff2Dates(Interval As String, Date1 As Variant, Date2 As Variant, _
Optional ShowZero As Boolean = False) As Variant
'Author:    ) Copyright 2001 Pacific Database Pty Limited
'           Graham R Seach MCP MVP [email protected]
'           Phone: +61 2 9872 9594  Fax: +61 2 9872 9593
'           This code is freeware. Enjoy...
'           (*) Amendments suggested by Douglas J. Steele MVP
'
'Description:   This function calculates the number of years,
'               months, days, hours, minutes and seconds between
'               two dates, as elapsed time.
'
'Inputs:    Interval:   Intervals to be displayed (a string)
'           Date1:      The lower date (see below)
'           Date2:      The higher date (see below)
'           ShowZero:   Boolean to select showing zero elements
'
'Outputs:   On error: Null
'           On no error: Variant containing the number of years,
'               months, days, hours, minutes & seconds between
'               the two dates, depending on the display interval
'               selected.
'           If Date1 is greater than Date2, the result will
'               be a negative value.
'           The function compensates for the lack of any intervals
'               not listed. For example, if Interval lists "m", but
'               not "y", the function adds the value of the year
'               component to the month component.
'           If ShowZero is True, and an output element is zero, it
'               is displayed. However, if ShowZero is False or
'               omitted, no zero-value elements are displayed.
'               For example, with ShowZero = False, Interval = "ym",
'               elements = 0 & 1 respectively, the output string
'               will be "1 month" - not "0 years 1 month".

On Error GoTo Err_Diff2Dates

   Dim booCalcYears As Boolean
   Dim booCalcMonths As Boolean
   Dim booCalcDays As Boolean
   Dim booCalcHours As Boolean
   Dim booCalcMinutes As Boolean
   Dim booCalcSeconds As Boolean
   Dim booSwapped As Boolean
   Dim dtTemp As Date
   Dim intCounter As Integer
   Dim lngDiffYears As Long
   Dim lngDiffMonths As Long
   Dim lngDiffDays As Long
   Dim lngDiffHours As Long
   Dim lngDiffMinutes As Long
   Dim lngDiffSeconds As Long
   Dim varTemp As Variant

   Const INTERVALS As String = "dmyhns"

'Check that Interval contains only valid characters
   Interval = LCase$(Interval)
   For intCounter = 1 To Len(Interval)
      If InStr(1, INTERVALS, Mid$(Interval, intCounter, 1)) = 0 Then
         Exit Function
      End If
   Next intCounter

'Check that valid dates have been entered
   If IsNull(Date1) Then Exit Function
   If IsNull(Date2) Then Exit Function
   If Not (IsDate(Date1)) Then Exit Function
   If Not (IsDate(Date2)) Then Exit Function

'If necessary, swap the dates, to ensure that
'Date1 is lower than Date2
   If Date1 > Date2 Then
      dtTemp = Date1
      Date1 = Date2
      Date2 = dtTemp
      booSwapped = True
   End If

   Diff2Dates = Null
   varTemp = Null

'What intervals are supplied
   booCalcYears = (InStr(1, Interval, "y") > 0)
   booCalcMonths = (InStr(1, Interval, "m") > 0)
   booCalcDays = (InStr(1, Interval, "d") > 0)
   booCalcHours = (InStr(1, Interval, "h") > 0)
   booCalcMinutes = (InStr(1, Interval, "n") > 0)
   booCalcSeconds = (InStr(1, Interval, "s") > 0)

'Get the cumulative differences
   If booCalcYears Then
      lngDiffYears = Abs(DateDiff("yyyy", Date1, Date2)) - _
              IIf(Format$(Date1, "mmddhhnnss") <= Format$(Date2, "mmddhhnnss"), 0, 1)
      Date1 = DateAdd("yyyy", lngDiffYears, Date1)
   End If

   If booCalcMonths Then
      lngDiffMonths = Abs(DateDiff("m", Date1, Date2)) - _
              IIf(Format$(Date1, "ddhhnnss") <= Format$(Date2, "ddhhnnss"), 0, 1)
      Date1 = DateAdd("m", lngDiffMonths, Date1)
   End If

   If booCalcDays Then
      lngDiffDays = Abs(DateDiff("d", Date1, Date2)) - _
              IIf(Format$(Date1, "hhnnss") <= Format$(Date2, "hhnnss"), 0, 1)
      Date1 = DateAdd("d", lngDiffDays, Date1)
   End If

   If booCalcHours Then
      lngDiffHours = Abs(DateDiff("h", Date1, Date2)) - _
              IIf(Format$(Date1, "nnss") <= Format$(Date2, "nnss"), 0, 1)
      Date1 = DateAdd("h", lngDiffHours, Date1)
   End If

   If booCalcMinutes Then
      lngDiffMinutes = Abs(DateDiff("n", Date1, Date2)) - _
              IIf(Format$(Date1, "ss") <= Format$(Date2, "ss"), 0, 1)
      Date1 = DateAdd("n", lngDiffMinutes, Date1)
   End If

   If booCalcSeconds Then
      lngDiffSeconds = Abs(DateDiff("s", Date1, Date2))
      Date1 = DateAdd("s", lngDiffSeconds, Date1)
   End If

   If booCalcYears And (lngDiffYears > 0 Or ShowZero) Then
      varTemp = lngDiffYears & IIf(lngDiffYears <> 1, " years", " year")
   End If

   If booCalcMonths And (lngDiffMonths > 0 Or ShowZero) Then
      If booCalcMonths Then
         varTemp = varTemp & IIf(IsNull(varTemp), Null, " ") & _
                   lngDiffMonths & IIf(lngDiffMonths <> 1, " months", " month")
      End If
   End If

   If booCalcDays And (lngDiffDays > 0 Or ShowZero) Then
      If booCalcDays Then
         varTemp = varTemp & IIf(IsNull(varTemp), Null, " ") & _
                   lngDiffDays & IIf(lngDiffDays <> 1, " days", " day")
      End If
   End If

   If booCalcHours And (lngDiffHours > 0 Or ShowZero) Then
      If booCalcHours Then
         varTemp = varTemp & IIf(IsNull(varTemp), Null, " ") & _
                   lngDiffHours & IIf(lngDiffHours <> 1, " hours", " hour")
      End If
   End If

   If booCalcMinutes And (lngDiffMinutes > 0 Or ShowZero) Then
      If booCalcMinutes Then
         varTemp = varTemp & IIf(IsNull(varTemp), Null, " ") & _
                   lngDiffMinutes & IIf(lngDiffMinutes <> 1, " minutes", " minute")
      End If
   End If

   If booCalcSeconds And (lngDiffSeconds > 0 Or ShowZero) Then
      If booCalcSeconds Then
         varTemp = varTemp & IIf(IsNull(varTemp), Null, " ") & _
                   lngDiffSeconds & IIf(lngDiffSeconds <> 1, " seconds", " second")
      End If
   End If

   If booSwapped Then
      varTemp = "-" & varTemp
   End If

   Diff2Dates = Trim$(varTemp)

End_Diff2Dates:
   Exit Function

Err_Diff2Dates:
   Resume End_Diff2Dates

End Function
'************** Code End *****************



[ Zidar @ 27.07.2010. 13:58 ] @
http://www.elitesecurity.org/t370932-Google-maps-access

[ Zidar @ 28.07.2010. 13:45 ] @
Kako da otvorim izvestaj tako da se ispisu samo oni rekordi koji su trenutno filtrirani na formi Iili subformi)

http://www.elitesecurity.org/t405909-Stampanje-filtriranog-queria
[ smal @ 02.09.2010. 15:39 ] @
Nekima od nas ne odgovara ClearType font efekat u Accessu 2007. Evo rešenja kako ga sključiti:

Za punu verziju Accessa, dovoljno je u Access Options\Popular, dečekirati Alwaus use ClearType opciju.
U slučaju Runtime varijante, pošto tada ne postoji takav meni, potreban je sledeći Registry čač:

U grani [HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Common], napraviti novi DWORD Value, pod imenom "RespectSystemFontSmooth", i dodati mu vrednost 1

Code:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Common]
"RespectSystemFontSmooth"=dword:00000001
[ Zidar @ 08.02.2011. 14:22 ] @
Access 2007 podrzava Access security, ali ne postoji ikonica za pozivanje Security Wizarda. Evo kako moze da se pozove security wizard:

Subject: How to use the Workgroup Administrator utility in Access 2007
http://support.microsoft.com/kb/918583
• Press CTRL + G to open the Immediate window.
• Type the following line of code, and then press ENTER.
DoCmd.RunCommand acCmdWorkgroupAdministrator


[ Zidar @ 15.03.2011. 14:53 ] @
U temihttp://www.elitesecurity.org/t424953-0#2833075 SLOJ.1973 dao je lepe funkcije koje omogucuju da se zasticeni Excel fajl importuje ili linkuje na Access. Ima zanimljivih detalja u ovom problemu.

Funkcije su ovde:
Ako ti je potrebno samo da otvoriš zaštićeni excel fajl uradi sledeće:Napravi novi modul i u njega ubaci ovaj kod:
Code:
Public Sub OtvaraZasticeniFajl(strFile As String, _
strPassword As String)
Dim oExcel As Object, oWb As Object
Set oExcel = CreateObject("Excel.Application")
Set oWb = oExcel.Workbooks.Open(FileName:=strFile, _
Password:=strPassword)
oExcel.Visible = True
Set oExcel = Nothing
End Sub

.Zatim na click nekog komandnog dugmeta pozivaš proceduru:
Code:
OtvaraZasticeniFajl "C:\TvojZasticeniExcelFile.xls", "sifra"

Za linkovanje, ide ovo:
Code:
Public Sub OtvaraZasticeniFajl(strFile As String, _
strPassword As String)
Dim oExcel As Object, oWb As Object
Set oExcel = CreateObject("Excel.Application")
Set oWb = oExcel.Workbooks.Open(FileName:=strFile, _
Password:=strPassword)
DoCmd.TransferSpreadsheet acLink, _
acSpreadsheetTypeExcel9, "LinkTabela", strFile, -1
oWb.Close SaveChanges:=False
oExcel.Quit
Set oExcel = Nothing
End Sub






[ banem @ 28.10.2011. 18:38 ] @
Novi format ACCDB dozvoljava formatiranje u okviru jednog polja. Tip polja postavite na Memo, a zatim u listi osobina tog polja Text Format prebacite sa Plain Text na Rich Text:



Međutim, reč je osiromašenom RTF formatu koji npr. ne dozvoljava formatiranje karaktera kao eskponent (superscript), a RTF osobina polja postoji tek u verziji Accessa i baze 2007. Problem u potpunosti rešava Lebanova ActiveX RTF kontrola koja "u letu" konvertuje unos u RTF format (kako se zapisuje u bazu) i nazad iz RTF formata u formatiran prikaz teksta. Ujedno se takav tekst može sačuvati kao standardni, samostalni RFT fajl. Kontrolu preuzmite sa http://www.lebans.com/richtext.htm instalirajte je, a zatim pogledajte primer kako se implementira. Ona izgleda ovako:

[ Getsbi @ 23.12.2011. 06:12 ] @
Član FOX028 obradio je funkciju za pretvaranje arapskih brojeva u rimske preko VBA. Originalna tema se nalazi ovde: http://www.elitesecurity.org/t442831-Jedan-moj-mali-doprinos
Code:
Option Explicit
Function RimskiBrojevi(Broj As Integer)

If Broj > 3999 Then
    RimskiBrojevi = "Morate uneti broj manji od 4000!"
    Exit Function
End If

Dim RB As String
Dim i As Integer
Dim jd As Integer, de As Integer, st As Integer, hi As Integer
Dim rjd As String, rde As String, rst As String, rhi As String

Broj = Round(Broj, 0)
RB = ""

Select Case Broj
    Case 1 To 9
        jd = Broj
    Case 10 To 99
        jd = Val(Mid(Str(Broj), 3, 1))
        de = Val(Mid(Str(Broj), 2, 1))
    Case 100 To 999
        jd = Val(Mid(Str(Broj), 4, 1))
        de = Val(Mid(Str(Broj), 3, 1))
        st = Val(Mid(Str(Broj), 2, 1))
    Case 1000 To 3999
        jd = Val(Mid(Str(Broj), 5, 1))
        de = Val(Mid(Str(Broj), 4, 1))
        st = Val(Mid(Str(Broj), 3, 1))
        hi = Val(Mid(Str(Broj), 2, 1))
End Select
       
'hiljade
If hi > 0 And hi < 4 Then
    For i = 1 To hi
        RB = RB & "M"
    Next i
End If

rhi = RB
RB = ""

'stotine
Select Case st
    Case 1 To 3
        For i = 1 To st
            RB = RB & "C"
        Next i
    Case 4
        RB = "CD"
    Case 5
        RB = "D"
    Case 6 To 8
        RB = "D"
        For i = 6 To st
            RB = RB & "C"
        Next i
    Case 9
        RB = "CM"
End Select

rst = RB
RB = ""

'desetice
Select Case de
    Case 1 To 3
        For i = 1 To de
            RB = RB & "X"
        Next i
    Case 4
        RB = "XL"
    Case 5
        RB = "L"
    Case 6 To 8
        RB = "L"
        For i = 6 To de
            RB = RB & "X"
        Next i
    Case 9
        RB = "XC"
End Select

rde = RB
RB = ""

'jedinice
Select Case jd
    Case 1 To 3
        For i = 1 To jd
            RB = RB & "I"
        Next i
    Case 4
        RB = "IV"
    Case 5
        RB = "V"
    Case 6 To 8
        RB = "V"
        For i = 6 To jd
            RB = RB & "I"
        Next i
    Case 9
        RB = "IX"
End Select

rjd = RB
RB = ""

RimskiBrojevi = rhi & rst & rde & rjd
End Function

[ Zidar @ 03.01.2012. 18:12 ] @
http://www.elitesecurity.org/t...ritickim-slovima-na-kraju-reda

Nadam se da će nekome pomoći moje negativno iskustvo kada Access 2003 u izvještajima na kraju reda sam rastavlja riječi sa slovima koja imaju dijakritičke znake.

U mojim izvještajima (koji predstavljaju zapisnike o tehničkim ispitivanjima) se dešavalo da se na kraju reda nađe riječ sa dijakritičkim slovom i koja ne može cijela stati u red. Tada ju je Access automatski rastavljao tako da je u redu zadržavao sva slova uključujući i dijakritičko, a u slijedeći red prenosio ostatak riječi, naprimjer: optereć-enje, proizvođ-ača, podeš-avanje, itd.

Naravno da je ovo neprihvatljivo za gramatički korektan zapisnik, pa sam se pomučio da pronađem rješenje i na kraju sam uspio. Rješenje je da se u regionalnim postavkama (Regional and language options), u Tab - "Languages", u odjeljku "Text services and input languages" klikne na gumb "Details". U novom prozoru u Tab - "Settings", u odjeljku "Installed services" treba ukloniti "Handwriting recognition". Nakon ovoga Acces više neće rastavljati riječi, nego će ih cijele prenositi u slijedeći red.

U ovih par mjeseci sam ovdje toliko naučio o Access-u, da mi je samo žao što sam prije toga godine utrošio na mukotrpno samostalno učenje. Još jednom hvala ljudima koji znaju i hoće pomoći onima koji ne znaju: @Zidar, @Zoran.Eremija, @Getsbi, @SLOJ.1973 i ostali ...
[ Zidar @ 20.01.2012. 13:48 ] @
Visekorisnicki sistemi u Accesu se konfigurisu na sledeci nacin:
Uvek imas dva Access fajla.
U jednom cuvas samo tabele - to je 'back end'.
U drugom fajlu cuvas aplikaciju (forme, kveriji, reporti) - to je 'front end'.
Tabele iz back end fajla su povezane (linked, attached) na aplikaciju.
Back end se cuva negde na mrzi, na file serveru.
Front ned ima svaki korisnik na svojoj masini.

Na ovaj nacin, svako ima sopstvenu kopiju aplikacija, a svi su zakaceni na istu bazu podataka.

U praksi, front end se cesto menja, prave se nove verzije. Razloga za promenu je mnogo - popravljaju se bagovi ili se dodaju nove mogucnosti, koje donose nove bagove i tako stalno. Tako dolazimo do problema instaliranja nove verzije front enda na korisnicke masine kad god napravimo novu verziju. Na forumu se nekoliko puta razgovaralo o ovom problemu, verovatno i u bazi znanja postoji vec nesto o tome.

Pre nekoliko nedelja, TiestoX je dao veoma lep prilog teoriji i praksi automatskog osvezavanja front enda. To je sve lapo opisano u temi http://www.elitesecurity.org/t398557-1-Uvek-taze-FrontEnd

Zamolili smo da se tema detaljno obradi i prilozi detaljno uputstvo, sto je TiestoX zaista i uradio. U poruci od 20 januara 2012 dato je detljno uputstvo kako i sta treba da se radi.

Sjajan prilog.

Zahvaljujemo!

http://www.elitesecurity.org/t398557-1-Uvek-taze-FrontEnd



[ Zidar @ 09.02.2012. 16:03 ] @
Slanje E-maila iz Accessa, izvoz tabela u XLS formatu:

http://www.elitesecurity.org/t443468-0#3051370

Zakceni fajl se otvara sa SHIFT ENTER.

Hvala na lepom primeru



[Ovu poruku je menjao Zidar dana 10.02.2012. u 15:00 GMT+1]
[ Zidar @ 30.04.2012. 13:55 ] @
Zanimljivo pitanje o kontrolisanju korisnickog men-bar, i briljantno resenje imaet u ovoij temi: http://www.elitesecurity.org/t...Problem-sa-Menu-Bar-om-accessu
[ Zidar @ 18.07.2012. 21:42 ] @
mozete naci ovde http://www.elitesecurity.org/t453203-0#3140016
[ Zidar @ 04.10.2012. 17:49 ] @
Konrolisano otvaranje PDF fajlova iz VBA programa mozete naci ovde:

http://www.elitesecurity.org/t...i-PDF-iz-koda-na-zadatom-mestu
[ Zidar @ 12.11.2013. 18:24 ] @
http://www.elitesecurity.org/t...-Kako-bekup-baze-jednom-na-dan
[ Zidar @ 13.11.2013. 14:44 ] @
http://www.elitesecurity.org/t...-na-NBS-provera-blokade-kupaca
[ SLOJ.1973 @ 14.12.2013. 16:12 ] @
Pošto me je @Zidar zamolio,evo ubacujem primer:
1.Kako putem koda napraviti novi folder,sa podfolderom i u njega izvesti izvestaj u formatu SNP (moze i XLS ili TXT) sa datumom u nazivu.
To je u ovoj temi
[ Zidar @ 03.01.2014. 17:23 ] @
Access 2007 poceo je da gnjavi u design modu za forme i reporte. Potrazio sam malo po webu i nasao ovo:

http://www.utteraccess.com/for...2010-Slower-2000-t1959800.html

U resenju se kaze da postoje dva glavna razloga koji mogu da dovedu do sporosti u design modu:

1. default printer je neki network printer
2. postoje linkovane tabele, koje nisu otvorene (!!!???), resenje - otvori sev tabele dok radis u design modu, cak i one koje nisu u nikakvoj vezi sa formom ili reportom na kome radis

Izgleda da je 2. pravi problem, bar kakao ljudi pricaju, i da prilikom rada treba u startu otvoriti sve tabele koje su linkovane. Evo koda koji to radi (kod preuzet iz poslednjeg posta u prilozenom linku):
Code:

'Open all tables:
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
For Each obj In dbs.AllTables
If Left(obj.Name, 4) <> "MSys" Then
DoCmd.OpenTable obj.Name
DoCmd.Minimize
End If
Next obj

'if needed use this code to close all tables

Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
For Each obj In dbs.AllTables
If Left(obj.Name, 4) <> "MSys" Then
If obj.IsLoaded = True Then
DoCmd.Close acTable, obj.Name
End If
End If
Next obj

[ cl3v3r @ 02.03.2014. 12:23 ] @
Ponekad je potrebno korisniku skrenuti pažnju na događaj u programu (promjena stanja, pristizanje neke poruke ili sl) onda kada je Access minimizovan, ili kada se korisnik prosto bavi nekom drugom aplikacijom i ne prati dešavanja u Access bazi. Naravno, za tu svrhu može se upotrijebiti MsgBox, ali on je za moj ukus previše agresivan. Zato ja volim da samo \"zatreperim\" Taskbar dugme aplikacije (kao, recimo, neke čet aplikacije kada Vam stigne nova poruka) i tako skrenem korisniku pažnju, a da ga ne uplašim. Evo koda:

Code:

'Windows API poziv
Private Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

'Procedura koja pokrece blinkanje
Public Sub FlashAppWindow()
    FlashWindow Application.hWndAccessApp, 1
End Sub
[ cl3v3r @ 02.03.2014. 12:25 ] @
Skoro sam pravio Help Desk aplikaciju u Access-u (koju, nažalost ne mogu podijeliti sa vama) i tražio sam način kako da obavijestim Help Desk tehničara da mu je pristigao novi nalog onda kada je aplikacija minimizovana ili kada tehničar radi nešto drugo u nekom drugom programu. Rješenje je dobro poznato i široko se koristi. Zablinkaj taskbar (prethodna poruka) i promijeni tekst u taskbaru, tako da oslikava broj novopristiglih naloga. Evo koda:
Code:

'Windows API
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

'Procedura koja mijenja tekst
Public Sub SetAppTitle(TitleText As String)
    SetWindowText Application.hWndAccessApp, TitleText
End Sub


Evo kako kombinacija blinkanja i promjene teksta izgleda u praksi:


Broj u zagradi je broj novopristiglih naloga. Ovako korisnik može da radi druge stvari i ne brine da će propustiti važan događaj u aplikaciji.
[ SLOJ.1973 @ 22.01.2015. 17:20 ] @
Direktna štampa nekog fajla pomoću VBA koda
Evo fantasticnog koda koji stampa odmah fajl,bez obzira kojeg je tipa:excel.word,pdf...Treba samo na kraju posle tacke naznaciti koji je tip datoteke.

Code:
CreateObject("Shell.Application").Namespace(0).ParseName("C:\putanja do trazenog fajla\nazivfajla.pdf").InvokeVerb ("Print")

Preuzeto sa linka
[ Getsbi @ 14.05.2015. 12:54 ] @
Posredstvom kolege BiloKoje imamo rešenje za skeniranje dokumenta.
Tema je na linku:http://www.elitesecurity.org/t484346-Access-skeniranje-dokumenata

"Ovaj kod sam našao, probao samo da li pokreće skener, radi. U Accessu 2010.
Potrebno je u Referencama uključiti Microsoft Windows Image Acquisition Library v2.0"


Code:

Private Sub slika_DblClick(Cancel As Integer)


   Dim oWIA_DeviceManager As WIA.DeviceManager
   Dim oWIA_Device As WIA.Device
   Dim oWIA_ComDlg As WIA.CommonDialog
   Dim oImageFile As WIA.ImageFile
   Dim i As Long

   Set oWIA_DeviceManager = New WIA.DeviceManager
   
   If oWIA_DeviceManager.DeviceInfos.Count > 0 Then
       Set oWIA_ComDlg = New WIA.CommonDialog
       
       ' Index the Devices property starting here at 1, not 0 .
       For i = 1 To oWIA_DeviceManager.DeviceInfos.Count
           Set oWIA_Device = oWIA_DeviceManager.DeviceInfos.Item(i).Connect
       
           ' Use this to show Acquisition CommonDialog
           Set oImageFile = oWIA_ComDlg.ShowAcquireImage
           
           ' Use this to show Acquisition Wizard
           Set oImageFile = oWIA_ComDlg.ShowAcquisitionWizard(oWIA_Device)

       Next i
   Else
       MsgBox "No WIA compatible device attached!"
   End If
   


 End Sub



"Proverio sam, radi i u AccessXP."

BiloKoje

[ SLOJ.1973 @ 15.07.2015. 16:14 ] @
@Zidar: Zelja ispunjena. "Hvatanje IP adrese,user-a i name-a racunara,koji pristupaju bazi.Pozdrav.
[ Zidar @ 12.12.2015. 02:50 ] @
Original post: http://www.elitesecurity.org/t...-za-bilo-koji-query-ili-report

Rdai se ovako:

Pitanje:
Citat:
a prikažem sve izveštaje u postojećem programu koritim :

SELECT MSysObjects.Name FROM MSysObjects WHERE (((MSysObjects.Name) Not Like "*Subreport*") AND ((MSysObjects.Type)=-32764)) ORDER BY MSysObjects.Name;

Kako da prikažem u ovoj listi pored MSysObjects.Name i sadržaj svakog pojedinog "ImeReporstsa.description" odnosno nešto kao MSysObjects.Description ?


Odgovor (velemajstor IZonic):
Code:

Code:
Function Objekti()
'*******************************************
'*Ime:Objekti (Function)
'*Sadržaj: Iscitava imena reporta i opis
'*Autor:     ZXZ
'*Datum:      12 08, 2015, 06:45:57
'*Adresa: Tuzla BiH
'*Email:     [email protected]
'*Ulazni parametri:
'*Izlazni parametri:
'*Vraća vrijednost:
'*******************************************

Dim Db As Database
Dim ImeR As String
Dim Des As String
Dim Ctr As Container
Dim Doc As Document

Set Db = CurrentDb
Set Ctr = Db.Containers!Reports
For Each Doc In Ctr.Documents
    ImeR = Doc.Name
    On Error Resume Next
    Des = Db.Containers("Reports").Documents(ImeR).Properties(8)
        If Err.Number = 3265 Then
        Err.Clear
        On Error GoTo 0
        Des = ""
        End If
    MsgBox ImeR & " : " & Des
Next Doc
End Function
[ Zidar @ 18.12.2015. 19:40 ] @
Na sajtu devhut.net nasao sam interesantan artikl

http://www.devhut.net/2014/01/...-in-office-365-azure-database/

Nadam se da ce nekome pomoci.

[ banem @ 18.12.2015. 21:22 ] @
Bravo za link! Mučim se ovih dana sa SQL Serverom čiji odziv je spor. U lokalu radi brzo, ali čim mu se prilazi sa interneta (preko porta), radi jaaako sporo. Zna li neko zašto? Možda prebacim bazu na ovaj azure vrag, pa probam s tim.
[ Zidar @ 25.01.2016. 21:54 ] @
Sama tema je stara, postavljena u Decembru 2013 i nema cini mi se mnogo veze sa izradom backup-a. Nema potrebe da citate pocetak, nego samo drugu stranicu, poslednje 3 poruke, datumi 19-20 Januar 2016.

http://www.elitesecurity.org/t471636-1-kako-dodati-datum

Backup kopije se prave iz DOS-a, tako sto napravite Batch fajl i pozivate ga sa nekog dugmeta. Evo kako je to u temi napisano,clan foruma Blingaro, zahvaljujem :-)

Code:

ECHO *Batch datoteka za bekap baze.
@echo off
echo Radi se bekap baze. Molimo sacekajte...
echo ==================================================================
(
echo C:\Users\pera\Desktop\PopisAkata2015 '(mesto gde se nalazi folder koji se raruje)
)>list.txt

"%programfiles%\winrar\rar" a "C:\Users\pera\Desktop\PopisAkata2015\%date:/=-%_PopisAkata2015.rar" @list.txt
del "C:\Users\pera\Documents\list.txt" 
move /-y "C:\Users\pera\Desktop\PopisAkata2015\*.*.rar" "D:\POPIS AKATA 15\Backup\"
set Folder=C:\Users\pera\Desktop\PopisAkata2015
rd /s /q "%Folder%"

ECHO *
ECHO *RAR je uspesno zavrsen.

ECHO *
ECHO *
ECHO *

exit


VBA kod za pozivanje .bat datoteke, koja ce da odradi ceo posao:

Code:

Private Sub Command0_Click()
If Shell("c:\program files\winrar\rar a d:\Backup.rar d:\opomene.accdb", vbHide) <> 0 Then
MsgBox ("Uspješan backup!")
Else
MsgBox ("Greška pri izvršavanju backupa!")
End If
End Sub