Keresés

Új hozzászólás Aktív témák

  • Mutt

    senior tag

    válasz gyga #908 üzenetére

    Hello,

    A számlaazonosítod egy számláló legyen aminek a formátuma: "PT/"0000000

    Ha már van egy egyedi számsorod (Szám mező a Számla táblában), akkor ez a függvény működik lekérdezésekben:
    "PT/" & String(7-Len([Számla]![Szám]);"0") & [Számla]![Szám]

    üdv

  • Mutt

    senior tag

    válasz tb007 #885 üzenetére

    Hello,

    Ezen az oldalon megtalálod az infót ehhez.

    Röviden.
    1. A report-nak a láblécében felveszel egy új mezőt. pl. tOldalOsszege
    2. Berakod ezt a makrót.
    Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
    If PrintCount = 1 Then
    tOldalOsszege= tOldalOsszege+ Br_ár
    End If
    End Sub

    Private Sub PageHeaderSection_Print(Cancel As Integer, PrintCount As Integer)
    tOldalOsszege= 0
    End Sub

    üdv.

  • Mutt

    senior tag

    válasz stigma #871 üzenetére

    Hello,

    ...1 mezőjéhez olyan tulajdonság kellene, hogy ha létezik már akkor az általam írt üzenettel térjen vissza, mondjuk úgy mint ahogy az érvényességi szabálynál szokott...

    VBA-val megoldható, pl. a mező Exit eseményére kell tenni a DCOUNT függvényt, vhogy így:

    If DCount("[ShipName]", "Orders", "ShipName = '" & Input & "'") > 0 then
    Msgbox "Saját üzi"
    Input.Value = ""
    End If

    A példában az Orders táblában a ShipName -ek között keressük meg az űrlapon az Input mezőben található értéket.

    üdv.

  • Mutt

    senior tag

    válasz Mutt #833 üzenetére

    Hogy teljes legyen a kép és profibb legyen a megoldás esetleg hozz létre egy táblát az adatbázisban amelyben a UserID-k és a jogosultságok vannak felsorolva.

    Íme egy példa, a tábla neve legyen tblUsers és legyenek benne a UserID és Role mezők.
    A Role mezőben pl. számokkal jelölöd a különböző jogosultsági szinteket.

    UserID Role
    Zoli 1
    Pista 99
    Admin 99

    Ezek után a Form_Load()-ba ha ezt teszed:

    Select Case DLookup("Role", "tblUsers", "UserID = '" & Environ("UserName") & "'")
    Case 1
    --alapfelhasználók beállításai
    Case 99
    --adminok beállításai, célszerűen csak nekik legyen a tblUsers-hez hozzáférése.
    Case Else
    --mindent letiltasz
    End Select

    Akkor elég csak a táblán keresztül megadni a felhasználónak a jogosultságot és már azonnal tudja is használni, nem kell a kódot minden egyes új felhasználó esetén módosítani, elég csak új csoportoknál javítani.

    üdv.

  • Mutt

    senior tag

    válasz Mr.Csizmás #832 üzenetére

    Hello,

    ...adott a cégnél ~40 ember, akinek a különféle dolgait...

    Személyes adatokra a Address book database sablon egész jónak tűnik.

    Az Asset tracking database sablonból is tudsz meríteni, vagy kiegészíteni a kívánalmaknak.

    üdv.

  • Mutt

    senior tag

    válasz Kobe #830 üzenetére

    Hello,

    ...a backup copyt ne ugyanabba a mappába mentse, ahol az adatbázis van, hanem mondjuk egy azon belüli "Backup" almappába...

    Ezzel menni fog, ha más mappa nevet akarsz akkor az ArchivePath konstanst változtasd meg.

    Private Sub bImport_Click()
    Dim dbPath As String
    Dim CurrentFile
    Dim CurrentName As String
    Dim CurrentExtension As String
    Dim BackupName As String
    Dim fs As Object

    'alkönyvtár neve
    Const ArchivePath As String = "\Backup"

    'aktuális könyvtár
    dbPath = CurrentProject.Path

    CurrentFile = Split(CurrentProject.Name, ".")

    'aktuális fájlkiterjesztés
    CurrentExtension = CurrentFile(UBound(CurrentFile))

    'aktuális fájlnév
    CurrentName = Left(CurrentProject.Name, Len(CurrentProject.Name) - Len(CurrentExtension) - 1)

    'új fájlnév
    BackupName = "Backup_" & CurrentName & "_" & Format(Date, "YYYYMMDD") & "." & CurrentExtension

    'másolat készítése
    If MsgBox("Do you want to make a compacted back-up copy of this database named " & vbCrLf & "'" & BackupName & "'", vbYesNo, "Continue") = vbYes Then
    'ha nem létezik a célkönyvtár akkor létrehozzuk
    If Dir(dbPath & ArchivePath, vbDirectory) = Empty Then MkDir (dbPath & ArchivePath)
    'ha még nem létezik a célkönyvtárban azonos névvel fájl létrehozzuk
    If Dir(dbPath & ArchivePath & "\" & BackupName) = Empty Then
    Set fs = CreateObject("Scripting.FileSystemObject")
    fs.CopyFile dbPath & "\" & CurrentProject.Name, dbPath & ArchivePath & "\" & BackupName
    Set fs = Nothing
    Else
    MsgBox "File already exists!", vbOKOnly, "Error"
    End If
    End If
    End Sub

    ...nem debug.txt alapján szeretném kiosztani a jogokat, hanem mondjuk userid alapján...

    Az Environ("UserName") visszaadja az aktuális felhasználó nevét Windowsban.
    A név alapján pedig már tudod befolyásolni, hogy ki mely gombokat láthassa.

    Érdemes a Form_Load() eventbe tenni vmi ilyet:
    Select Case Environ("UserName")
    Case "Zoli"
    --lista hogy mely elemeket láthatók neki, pl. bUnLock.Visible = True
    Case "Tibi"
    --másik felhasználó listája
    Case Else
    bUnLock.Visible = False
    End Select

    üdv.

  • Mutt

    senior tag

    válasz klambi #826 üzenetére

    Hello,

    bocs az még hozzá lenne, hogy azt hol állítom be ha törlök akkor a hozzá kapcsolódó adatok is törlődjenek...
    1. Ha a két táblát úgy kötöd össze, hogy a kulcsmezőt bal klikkel ráhúzod a külső kulcsra a másik táblában Query Design-ban. A létrejött kapcsolatra duplán kattintva kapsz egy menüt (Edit relationship), ahol alul be tudod állítani ezt. Angolban "Cascade Delete Related Records" opció.
    2. Ha már korábban definiálva lettek a kapcsolatok, akkor a Database Tools menűben kell a kapcsolaton az "Edit relationship"-et használni.

    Youtube video.

    "Kapcsolja össze a két adattáblát úgy, hogy a táblák összes rekordja részt vegyen a kapcsolatban!"
    Ezen adatok alapján nekem egy sima UNION-nak tűnik, ami pont úgy műkődik mint a SQL-ben, vagyis

    select1
    UNION
    select2;

    A feltételek ugyanazok itt is, vagyis az oszlopok száma és a típusa meg kell hogy egyezzen.
    Access-ben UNION-t úgy tudsz egyszerűen írni, hogy létrehozod külön-külön a lekérdezéseket, majd átmész SQL nézetbe és az első lekérdezésben kitörlöd a lekérdezés végéről a pontosvesszöt, majd beírod hogy UNION és bemásolod a második lekérdezést.

    Ha a két táblában van közös mező, amelyekkel tudsz kapcsolatot létrehozni, akkor:
    - inner join esetén mindkét táblából csak azok az értékek fognak megjelenni, ahol a mezők egyeznek
    - outer join esetén választhatsz hogy a bal vagy jobb oldali tábla összes eleme és a másik táblából csak az egyező elemek jelenjenek meg.
    Ezen opciók valamelyikét a kapcsolatra kattintva tudod beállítani.
    Ez esetben azonban az összes rekord nem fog résztvenni, csak azon rekordok amelyekre a kapcsolati beállítások igazak.

    üdv.

  • Mutt

    senior tag

    válasz Kobe #820 üzenetére

    Hello,

    - azt szeretném hogy ha vki megnyitja ezt az adatbázist, akkor pl csak az űrlap jelenjen meg, egyéb gombok, vagy az oldalsáv menű le legyen tiltva, ne lehessen szerkeszteni. Ezt hogy tudom beállítani ? Akár a struktúra jelszavas védelmére is gondoltam, admin jogok beállítása pl

    Ezen a linken van egy jó cikk arról, hogy hogyan lehet lekorlátozni a hozzáférést.

    A lényeg, hogy az adatbázis tulajdonságait lehet módosítani VBA-ban:
    StartupShowDBWindow - ki/be lehet kapcsolni a navigation pane-t
    AllowBuiltinToolbars - el lehet rejteni az alap eszköztárat
    AllowBypassKey - letiltja hogy az automatikusan induló makrókat nem lehet SHIFT-el megkerülni
    AllowBreakIntoCode - progamkód hiba esetén nem nyitja meg a VB szerkesztőt
    AllowFullMenus - nem jelenik meg a menű tábla, lekérdezés stb. módosításához
    AllowToolbarChanges - le lehet tiltani az eszköztár testreszabását
    AllowSpecialKeys - fontos gyors billentyűket tilt le

    Fontos, hogy legyen mentésed az adatbázisrül mert kizárhatod magad!

    Én úgy használom, hogy létrehozok egy formot (többnyire Start Page), amire kirakom a gombokat amikkel
    lehet a lekérdezéseket, űrlapokat, táblákat stb. elindítani. A File -> Options -> Current Database alatt
    beállítom, hogy a "Start Page" form nyíljon meg automatikusan.

    Ezen a formon van egy "Lock Database" és egy "Unlock Database" gomb, mindkettő alapból el van rejtve.
    És csak adott feltételek (pl. ha egy adott felhasználó vagy fájl - debug.txt - létezésekor) lesznek láthatók.

    pl. debug.txt fájl esetén így

    Private Sub Form_Open(Cancel As Integer)

    If Dir(CurrentProject.Path & "\debug.txt") = "debug.txt" Then
    bLock.Visible = True
    bUnLock.Visible = True
    End If

    End Sub

    A gombokra pedig ezen kódok vannak:

    Private Sub bLock_Click()

    ChangeProperty "StartupShowDBWindow", dbBoolean, False
    ChangeProperty "AllowBuiltinToolbars", dbBoolean, False
    ChangeProperty "AllowFullMenus", dbBoolean, False
    ChangeProperty "AllowToolbarChanges", dbBoolean, False
    ChangeProperty "AllowBreakIntoCode", dbBoolean, False
    ChangeProperty "AllowSpecialKeys", dbBoolean, False
    ChangeProperty "AllowBypassKey", dbBoolean, False
    Application.SetOption "Show Hidden Objects", False

    End Sub

    Private Sub bUnLock_Click()

    ChangeProperty "StartupMenuBar", dbText, "(default)"
    ChangeProperty "StartupShowDBWindow", dbBoolean, True
    ChangeProperty "StartupShowStatusBar", dbBoolean, True
    ChangeProperty "AllowBuiltinToolbars", dbBoolean, True
    ChangeProperty "AllowFullMenus", dbBoolean, True
    ChangeProperty "AllowToolbarChanges", dbBoolean, True
    ChangeProperty "AllowBreakIntoCode", dbBoolean, True
    ChangeProperty "AllowSpecialKeys", dbBoolean, True
    ChangeProperty "AllowBypassKey", dbBoolean, True
    ChangeProperty "NavPane Closed", dbBoolean, True

    End Sub

    A fentiek az alábbi függvényt hívják meg:

    Function ChangeProperty(strPropName As String, varPropType As Variant, varPropValue As Variant) As Integer
    Dim dbs As Database, prp As Property
    Dim CurrentPropVal As Variant
    Const conPropNotFoundError = 3270

    Set dbs = CurrentDb
    On Error GoTo Change_Err

    CurrentPropVal = dbs.Properties(strPropName)
    If CurrentPropVal <> varPropValue Then
    dbs.Properties(strPropName) = varPropValue
    End If
    ChangeProperty = True
    Change_Bye:
    Exit Function

    Change_Err:
    If Err = conPropNotFoundError Then 'Property not found.
    Set prp = dbs.CreateProperty(strPropName, varPropType, varPropValue)
    dbs.Properties.Append prp
    Resume Next
    Else
    ' Unknown error.
    ChangeProperty = False
    Resume Change_Bye
    End If
    End Function

    - mennyire bonyolult egy olyan makrót írni egy adott vezérlőgombra, ami az előző havi adatokat beimportálja excelbe, és automatikusan elkészíti rá a pivot táblát ?

    Ha importálni akarsz Excel fájlból Access-be, akkor a TransferSpreadhseet-et használd:

    pl.
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Imported", CurrentProject.Path & "\adatok.xls", True

    Ha exportálni akarsz Excel-be akkor hasonló a fentihez csak acExport változatban, azonban miért nem linkeled be Excel-be (Data fül -> Connections) az adatbázis tábláját, készíted el a Pivot-ot és állítod be mindkettőt automatikus frissítésre megnyitáskor?

    -jó lenne, ha mondjuk ennek a makrünak futtatása előtt a progi automatikusan készítene egy biztonsági másolatot az adatbázisról egy emgadott hálózati mappába

    Ezen a linken van egy tökéletes megoldás.

    üdv

  • Mutt

    senior tag

    válasz gyga #822 üzenetére

    Hello,

    Feltételezem hogy van egy tábla (tblData), ahova kell mentened az űrlapon lévő dolgokat (amelyek legyen vInput1, vInput2, stb.). A gomb neve meg bAdd. A lekérdezés pedig "Lekérdezés"

    VBA kódban vmi hasonló kell neked, de ezen még finomítanod kell:

    Private Sub bAdd_Click()
    Dim uSQL As String

    DoCmd.SetWarnings False

    'adatok mentése kezdet
    If Me.vInput1 <> "" and Me.vInput2 <> "" Then
    uSQL = "INSERT INTO tblData VALUES ("
    uSQL = uSQL & Me.vInput1 & ",'"
    uSQL = uSQL & Me.vInput2 & "')"
    CurrentDb.Execute uSQL
    Else
    Msgbox "Nincs adat megadva"
    End If
    'adatok mentése vég

    'adatok kiürítése kezdet
    Me.vInput1 = ""
    Me.vInput2 = ""
    DoCmd.GoToControl Me.vInput1 'első beviteli mezőre ugrás
    'adatok kiürítése vég

    'lekérdezés futtatása kezdet
    DoCmd.OpenQuery "Lekérdezés" 'ha látni akarod az eredményét
    CurrentDB.Execute "Lekérdezés" 'ha nem akarod látni, csak lefuttatni
    'lekérdezés futtatása vég

    DoCmd.SetWarnings True

    End Sub

    üdv

Új hozzászólás Aktív témák