Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   [ Πίνακες ] Αυτόματη Ανανέωση Πινάκων (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/4597-aytomati-ananeosi-pinakon.html)

ggreg75 06-06-17 14:55

Αυτόματη Ανανέωση Πινάκων
 
Καλησπέρα σας,

Υπάρχει κάποιος τρόπος να γίνεται αυτόματη ανανέωση πινάκων (με κώδικα εννοείται) βάσει του φακέλου που βρίσκεται το βασικό αρχείο access;

Επειδή χρειάζεται να μεταφέρω συνεχώς τους φακέλους εντός των οποίων βρίσκονται, το βασικό αρχείο access αλλά και τα συνδεδεμένα αρχεία access, excel ή txt θα ήταν εξαιρετικά χρήσιμο αν θα μπορούσα να αποφεύγω συνέχεια την εκ νέου σύνδεση των εξωτερικών αρχείων (ένα - ένα) από την "διαχείριση συνδεδεμένων πινάκων" (λόγω αλλαγής τοποθεσίας του φακέλου).

Ευχαριστώ εκ των προτέρων

Γρηγόρης

pctechdr 07-06-17 22:12

1 Συνημμένο(α)
Για δοκίμασε αυτό!
Συνημμένο Αρχείο 8828

Ελπίζω να ξέρεις να το κάνεις εισαγωγή στην εφαρμογή σου!
Αν χρειαστείς κάτι εδώ είμαστε!

γιώργοςΚ 07-06-17 23:02

καλησπέρα,

Χρίστο αν έχεις την καλοσύνη μας εξηγείς λίγο περι τίνως πρόκυται και πως μπορεί να χρησιμοποιειθεί?

Ευχαριστώ εκ προτέρων

pctechdr 07-06-17 23:07

Κάνεις εισαγωγή το module απο μέσα απο την access (vba)
Το καλείς με fRefreshLinks()
Εδώ ορίζεις τον συνδεμένο πίνακα Set rst = dbs.OpenRecordset("Όνομα πινακα")
Εδώ το password αν έχει Set dbLink = DBEngine(0).OpenDatabase(strDBPath, False, False, "MS Access;PWD=το pasword σου")

ggreg75 08-06-17 18:29

Χρήστο,

Καταρχήν ευχαριστώ για την απάντησή σου.
Ο κώδικας που μου έχεις στείλει είναι πολύ σύνθετος, βγάζει σφάλμα και δεν μπορώ να βγάλω άκρη.
Θα ήθελα να απλοποιήσω λίγο την διαδικασία ως εξής :
Αν υποθέσουμε ότι έχουμε έναν πίνακα με την ονομασία "LinksTables" ο οποίος περιέχει 3 πεδία :

Table_Name
Old_Path
New_Path

Μπορεί να δημιουργηθεί ένας κώδικας σε VBA που να ενημερώσει για την νέα τοποθεσία των αρχείων;

Επίσης, με τον παραπάνω τρόπο μπορώ να έχω μεγαλύτερη ευελιξία καθώς μπορώ να επιλέξω ποιοι πίνακες θέλω να ανανεωθούν (μέσω του παραπάνω πίνακα) χωρίς να επεμβαίνω στον κώδικα.
Το πώς θα ενημερώνεται ο πίνακας «LinksTables» πριν γίνει η ανανέωση των πινάκων είναι κάτι που μπορώ να το κάνω.
*
Ευχαριστώ εκ των προτέρων
*
Γρηγόρης

pctechdr 08-06-17 23:02

http://www.ms-office.gr/forum/access...in-access.html

ggreg75 09-06-17 09:13

Καλημέρα. Το εν λόγω θέμα που μου έστειλες, δεν υποστηρίζει ανανέωση πινάκων με τον τρόπο που χρειάζομαι. Υποστηρίζει ανανέωση μόνο από ένα αρχείο mdb.

ggreg75 10-06-17 17:39

Βρήκα στο διαδίκτυο τον κάτωθι κώδικα και λειτουργεί μία χαρά για αρχεία mdb. Όχι όμως για αρχεία xls ή txt.
Μήπως θα μπορούσε κάποιος να με βοηθήσει για τα αρχεία xls ή txt;

Function SetTableLinkPath(strTableName As String, strTablePath As String)

If Nz(strTableName, "") <> "" And Nz(strTablePath, "") <> "" Then
Dim cdb As DAO.Database

Set cdb = CurrentDb

cdb.TableDefs(strTableName).Connect = ";DATABASE=" & strTablePath
cdb.TableDefs(strTableName).RefreshLink

MsgBox "Ο πίνακας " & strTableName & " ανανεώθηκε με την νέα τοποθεσία : " & strTablePath & "."
Else
MsgBox "You must enter a valid Table path and name!"
End If

End Function

kapetang 11-06-17 08:42

Καλημέρα

Γρηγόρη, αν όλα τα αρχεία σου (της ΒΔ, *.txt, Excel και των πινάκων) βρίσκονται στον ίδιο φάκελο, δοκίμασε τον κώδικα:
Κώδικας:

Public Sub UpdateLinks()
    'Ο κώδικας ισχύει για την περίπτωση που το αρχείο της ΒΔ
    'και τα αρχεία των συνδεδεμένων πινάκων, excel και *.txt
    'βρίσκονται στον ίδιο φάκελο
    '------------------------------------------------------------
    Dim db As DAO.Database, newPath As String, oldPath As String
    Dim m As Long, sFile As String, tbl As DAO.TableDef
   
    On Error GoTo errHandler
   
    Set db = CurrentDb
     
    For Each tbl In db.TableDefs
        If tbl.Connect <> "" Then
            oldPath = tbl.Connect
            If Left(oldPath, 4) = "Text" Then
                sFile = ""
            Else
                m = InStrRev(oldPath, "\")
                sFile = Mid(oldPath, m + 1)
            End If
           
            m = InStr(oldPath, "DATABASE")
            oldPath = Left(oldPath, m - 1) & "DATABASE="
           
            newPath = CurrentProject.FullName
            m = InStrRev(newPath, "\")
            newPath = Left(newPath, m)
           
            tbl.Connect = oldPath & newPath & sFile
            tbl.RefreshLink
        End If
    Next
    Exit Sub
errHandler:
    MsgBox Err.Description, vbCritical, "Error #" & Err.Number
End Sub


ggreg75 11-06-17 10:55

Γιώργο καλημέρα,
Δουλεύει μία χαρά!

Ευχαριστώ πάρα πολύ για την πολύτιμη βοήθειά σου!

ggreg75 13-06-17 10:20

Γιώργο καλημέρα,

Βάζοντας τον κώδικα σε κάποιο υπάρχον αρχείο mdb που χρησιμοποιώ, μετά την εκτέλεση μου βγάζει το το μήνυμα "The connection string is too long".

Επίσης, μετακινώντας όλο τον φάκελο στον C:\TEST μου βγάζει μήνυμα για να ανανεώσω πίνακες οι όποιοι είναι συνδεδεμένοι με ODBC Connections. Αυτούς τους πίνακες δεν θα ήθελα να τους λαμβάνει υπόψιν.

Θα μπορούσες να με βοηθήσεις στην 2 παραπάνω προβλημάτων;

Ευχαριστώ εκ των προτέρων

Γρηγόρης

kapetang 13-06-17 13:56

1 Συνημμένο(α)
Καλησπέρα

Γρηγόρη, το συνημμένο αποτελεί μια προσομοίωση του ζητούμενου.

1) Αντίγραψε το συμπιεσμένο αρχείο στο φάκελο C:\TEST και αποσυμπίεσέ το.

2) Στο φάκελο C:\TEST\mdb, που θα δημιουργηθεί, θα υπάρχουν 4 αρχεία.

Το DB.mdb αποτελεί την κύρια ΒΔ και τα υπόλοιπα 3 τις συνδέσεις (ένα για κάθε τύπο *.txt, Excel, Access)

3) Κάνε διπλό κλικ στο αρχείο DB.mdb. Κανονικά θα πρέπει να ενημερωθούν αυτόματα οι σύνδεσμοι και να εμφανιστεί και σχετικό μήνυμα.

Αυτό γίνεται στο δικό μου υπολογιστή και πιστεύω και στο δικό σου.

Τις συνδέσεις ODBC πρώτη φορά τις αναφέρεις.

Για να βρω τρόπο να τις εξαιρέσω πρέπει να είναι γνωστή η συμβολοσειρά σύνδεσης ή να ανεβάσεις ένα αρχείο *.zip παρόμοιο με το συνημμένο, που θα περιλαμβάνει και τις συνδέσεις ODBC.

Γιαννης Βολος 16-06-17 12:02

Καλημέρα στο Forum και συγχαρητήρια σ' όλους τους συντελεστές για την προσφορά τους. Σκέφτηκα πολλές φορές να ζητήσω κάτι σχετικό με την Access, αλλά ψάχνοντας στο αρχείο ερωτήσεων πάντα κατάφερνα να βρω λύση για το πρόβλημα μου. Μου έχουν προκύψει όμως τρεις ερωτήσεις που δεν βρήκα απάντηση..
1η Ερώτηση. Όταν ήμουν φοιτητής δούλευα DBase 3 Plus και Clipper Summer 87. Σε αναζήτηση ενός ατόμου μπορούσα να δώσω ABτικούς (ΓΙΑΝΝΗΣ) ή αριθμητικούς (12345) χαρακτήρες και έφτανε ένα " if not found() set index to.... " για να ψάξει όνομα ή κωδικό σε διαφορετικό πεδίο. Στην Access υπάρχει κάτι αντίστοιχο;
2η Ερώτηση.Φόρμα Α, Δευτερεύουσα Φόρμα Β και Πίνακας Γ. Στην Δευτερεύουσα Φόρμα προκύπτει ένα Άθροισμα (ΠΟΣΟΤΗΤΑ). Πώς μπορώ να το έχω στην φόρμα (και από κει στον πίνακα Γ που είναι το ζητούμενο) και φυσικά να μεταβάλλεται όταν διαφοροποιείται το Άθροισμα, ή να οριστικοποιείται με εντολή.
3η Ερώτηση Πως μπορώ μέσω εντολής στην Access να παίρνω (εκεί που θέλω πχ φλασάκι) backup τους πίνακες.
Ευχαριστώ, υπάρχουν δεν υπάρχουν απαντήσεις στις ερωτήσεις μου και πάλι συγχαρητήρια στους συντελεστές του Forum.

ggreg75 16-06-17 12:11

Αγαπητέ Γιάννη καλησπέρα,

Καλό θα ήταν για τα ερωτήματά σου να δημιουργήσεις ένα νέο θέμα ή 3 διαφορετικά θέματα (αν δεν είναι σχετικά μεταξύ τους)

Αυτό θα βοηθούσε για να λάβεις τις απαντήσεις σου πιο άμεσα αλλά θα διευκολυνθούν και τα υπόλοιπα μέλη προκειμένου τα θέματα και οι απαντήσεις να είναι σχετικά.

Ανέβασε λοιπόν τα θέματά σου και είμαι σίγουρος ότι οι λύσεις θα βρεθούν

Φιλικά

Γρηγόρης

kapetang 23-06-17 09:54

Καλημέρα

Γιάννη κάπου μπερδεύτηκες.

Τι σχέση έχει το ζητούμενο (ενημέρωση ενός πεδίου πίνακα) με την αυτόματη ενημέρωση των συνδέσμων των πινάκων μιας ΒΔ;

Θα πρέπει να διαγράψεις το μήνυμα και να το καταχωρήσεις σε νέο θέμα.

Για να δημιουργήσεις νέο θέμα για την Access, αφού συνδεθείς στο φόρουμ, κάνε κλικ στο σύνδεσμο «Access – Ερωτήσεις / Απαντήσεις» και στη σελίδα που θα εμφανιστεί κάνε κλικ στο κουμπί «Νέο Θέμα».

Συμπλήρωσε το πεδίο «Τίτλος» και στο πεδίο «Μήνυμα» περιέγραψε το ζητούμενο.

Καλό είναι να επισυνάψεις και ένα δείγμα της ΒΔ (τους 2 πίνακες και τις σχετικές φόρμες)

nasos23 24-06-17 10:25

1 Συνημμένο(α)
Καλημέρα σε όλους.
Γιάννη (Γιαννης Βολος)
Δες μια πρόταση του ζητούμενου

Γιαννης Βολος 01-07-17 17:52

Εμφάνιση αθροίσματος δευτερεύουσας φόρμας σε πεδίο στην κύρια φόρμα
 
Καλησπέρα στο Φόρουμ.

Αγαπητέ nasos23 είναι αυτό που ήθελα ακριβώς . Μόλις μπορέσω, γιατί υπήρξε λίγος φόρτος τελευταία, θα προσπαθήσω να μελετήσω την λογική του και τις εντολές του.
Σ' ευχαριστώ πάρα πολύ.


Η ώρα είναι 18:26.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2