Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > Έλεγχος πρόσβασης στο Internet μέσω κώδικα

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 04-08-09, 16:57
ChryssaV
Guest
 
Μηνύματα: n/a
Προεπιλογή Έλεγχος πρόσβασης στο Internet μέσω κώδικα

Καλησπέρα σε όλους...
Μήπως κάποιος μπορεί να με βοηθήσει στο εξής:
Προσπαθώ να βρω τρόπο να ελέγξω με κώδικα αν ο Η/Υ που τρέχει το πρόγραμμά μου είναι συνδεδεμένος στο net. Υπάρχουν δείγματα κώδικα στο net που παίζουν κατά περίπτωση (αν είσαι σε LAN και δεν έχεις πρόσβαση στο NET, δεν υπάρχει κάτι που να σου δίνει σωστή πληροφορία)...
Δοκίμασα και το QOCINFO αλλά ο κώδικας "κολάει"...

Μήπως έχει κανείς καμιά ιδέα??? Ευχαριστώ εκ των προτέρων
Απάντηση με παράθεση
  #2  
Παλιά 05-08-09, 10:43
Όνομα: Ηλιάδης Κωνσταντίνος
Έκδοση λογισμικού Office: Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 13-12-2008
Περιοχή: Chicago
Μηνύματα: 119
Προεπιλογή Re: Έλεγχος πρόσβασης στο Internet μέσω κώδικα

Αγαπητή φίλη ChryssaV,

Σε ένα Module τις Access βάλε τον παρακάτω κώδικα
Κώδικας:
Option Compare Database
Option Explicit
Public Enum Flags
   'Local system uses a modem to connect to the Internet.
   INTERNET_CONNECTION_MODEM = &H1
   'Local system uses a proxy server to connect to the Internet.
   INTERNET_CONNECTION_PROXY = &H4
   'Local system has RAS installed.
   INTERNET_RAS_INSTALLED = &H10
   'No Internet
   INTERNET_CONNECTION_OFFLINE = &H20
   'Internet connection Configured
   INTERNET_CONNECTION_CONFIGURED = &H40
End Enum

Declare Function InternetGetConnectedState Lib "wininet.dll" (lpdwFlags As Long, ByVal dwReserved As Long) As Long
Public Function Online() As Boolean
Dim lngFlags As Long
If InternetGetConnectedState(lngFlags, 0) Then
        'Not Connected
    If lngFlags And Flags.INTERNET_CONNECTION_OFFLINE Then
        MsgBox ("Not connected, no Internet.")
    ElseIf lngFlags And Flags.INTERNET_CONNECTION_MODEM Then
        'Modem connection.
         MsgBox ("Modem connection.")
    ElseIf lngFlags And Flags.INTERNET_CONNECTION_PROXY Then
        'Proxy connection.
         MsgBox ("Internet Thru Proxy connection.")
    Else
        MsgBox ("Not connected, no Internet.")
    End If
Else
    'not connected.
     MsgBox ("Not connected no Internet.")
End If
End Function
Απλά καλούμε την συνάρτηση OnLine και μας εμφανίζει σχετικό μήνυμα.

Για περισσότερες πληροφορίες δες http://msdn.microsoft.com/en-us/libr...28(VS.85).aspx

Να αναφέρω ότι δοκιμάστηκε σε LAN και μάλιστα με Proxy και όταν δεν είχε Internet και όταν είχε. Εύχομαι να σου δουλέψει και φυσικά να σου φανεί χρήσιμο.

Φιλικά

kon73 / iliadisk
Απάντηση με παράθεση
  #3  
Παλιά 05-08-09, 11:38
Tassos
Guest
 
Μηνύματα: n/a
Προεπιλογή Re: Έλεγχος πρόσβασης στο Internet μέσω κώδικα

Καλημέρα σε όλους!

Επιτρέπστε μου μια μικρή διευκρίνιση.

H συνάρτηση InternetGetConnectedState() ελέγχει αν ο υπολογιστής είναι απλά συνδεμένος
με κάποιο τρόπο σε κάποια συσκευή αλλά δεν ελέγχει αν υπάρχει πρόσβαση στο Internet.
Αν υποτεθεί ότι μπλοκάρουμε την πρόσβαση στο δίκτυο μέσω κάποιου Firewall,
η συνάρτηση θα συνεχίσει να επιστρέφει True παρόλο που η κυκλοφορία έχει διακοπεί!

Η συνάρτηση αυτή θα επιστρέψει False μόνο αν ο υπολογιστής δεν είναι καν
συνδεμένος με Modem ή οποιαδήποτε άλλη (αν πχ. αποσυνδέσουμε το καλώδιο του δικτύου).

Θα πρέπει λοιπόν να ελέγξουμε αν υπάρχει πρόσβαση σε κάποιον Server της επιλογής μας πχ. Google.gr.

Γι αυτή τη διαδικασία προτείνω τον παρακάτω κώδικα:

Κώδικας:
Option Compare Database
Option Explicit

Const xFlags = -2076180480
Const TestURL = "http://www.google.gr"
Declare Function InternetOpen _
                  Lib "wininet.dll" Alias "InternetOpenA" _
                      (ByVal lpszAgent As String, _
                       ByVal dwAccessType As Long, _
                       ByVal lpszProxyName As String, _
                       ByVal lpszProxyBypass As String, _
                       ByVal lngFlag As Long) As Long

Declare Function InternetOpenUrl _
                  Lib "wininet.dll" Alias "InternetOpenUrlA" _
                      (ByVal lngI_Net As Long, _
                       ByVal lpszUrl As String, _
                       ByVal lpszHeaders As String, _
                       ByVal dwHeadersLength As Long, _
                       ByVal lngFlag As Long, _
                       ByVal dwContext As Long) As Long

Declare Function InternetCloseHandle _
                  Lib "wininet.dll" _
                      (ByVal lngI_Net As Long) As Long

Public Sub TestINetConnection()
    Dim I_Net&, MyUrl&
    I_Net = InternetOpen(vbNullString, 0&, vbNullString, vbNullString, 0&)
    If I_Net Then
        MyUrl = InternetOpenUrl(I_Net, TestURL, vbNullString, 0&, xFlags, 0&)
        If MyUrl Then
            MsgBox "You have Internet access."
            InternetCloseHandle MyUrl
        Else
            MsgBox "You do NOT have Internet access."
        End If
    End If
    InternetCloseHandle I_Net
End Sub
Φιλικά
Απάντηση με παράθεση
  #4  
Παλιά 05-08-09, 11:55
Όνομα: Ηλιάδης Κωνσταντίνος
Έκδοση λογισμικού Office: Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 13-12-2008
Περιοχή: Chicago
Μηνύματα: 119
Προεπιλογή Re: Έλεγχος πρόσβασης στο Internet μέσω κώδικα

Αγαπητέ φίλε Τάσσο,

Σχετικά με την συνάρτηση InternetGetConnectedState η οποία επιστρέφει true η False μελετώντας λίγο το πρόβλημα των Flags 0χ2 και 0χ12 που εκεί δείχνει να είναι το πρόβλημα τις έχω αλλάξει λίγο στο παραπάνω προηγούμενο topic μου και δοκιμάζοντας το από την πρωινή μου εργασία σε Η/Υ που έχει Proxy Internet και σε έναν που δεν έχει Internet δουλεύει σωστά.

Για πιο πλήρη όμως έλεγχο θα το δω και με Lan Internet μέσω Router το απόγευμα και θα επανέλθω.

Θα ήθελα να το δοκιμάσεις και εσύ ώστε να μπορέσουμε να δώσουμε και αυτήν την εναλλακτική λύση.

Φιλικά

iliadisk / kon73
Απάντηση με παράθεση
  #5  
Παλιά 05-08-09, 12:12
ChryssaV
Guest
 
Μηνύματα: n/a
Προεπιλογή Re: Έλεγχος πρόσβασης στο Internet μέσω κώδικα

Guys, σας ευχαριστώ πολύ...ο κώδικας του Τάσου έπαιξε μια χαρά με όλα τα λειτουργικά, χωρίς ή με proxy σε LAN...
Σας είμαι υπόχρεη...
Απάντηση με παράθεση
  #6  
Παλιά 05-08-09, 12:32
Όνομα: Ηλιάδης Κωνσταντίνος
Έκδοση λογισμικού Office: Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 13-12-2008
Περιοχή: Chicago
Μηνύματα: 119
Προεπιλογή Re: Έλεγχος πρόσβασης στο Internet μέσω κώδικα

Αγαπητή ChryssaV,

χαίρομαι που εξυπηρετήθηκες, ωστόσο θα ήθελα να δω τι γίνεται με την Function InternetGetConnectedState η οποία ενώ δίνει τώσα Flags δεν έχω δοκιμάσει σε τοπικό Router αν λειτουργεί ο έλεγχος της ύπαρξης Internet.

Tasso θα ήθελα όπως προανέφερα να δούμε την εναλλακτική λύση μαζί. Περιμένω το λοιπόν σε κάποιο chat ή και εδώ να δούμε τις παραμέτρους της συνάρτησης καθώς και τα Flags.

Φιλικά

iliadisk / kon73
Απάντηση με παράθεση
  #7  
Παλιά 05-08-09, 15:37
ChryssaV
Guest
 
Μηνύματα: n/a
Προεπιλογή Re: Έλεγχος πρόσβασης στο Internet μέσω κώδικα

Αγαπητέ iliadisk / kon73 το τεστ το έκανα σε LAN της εταιρείας μου με router και η InternetGetConnectedState δεν έπαιξε...
Μάλλον για να είμαι πιο σαφής, σε τερματικό Win98 δεν έπαιξε, σε τερματικό WinXP έπαιξε...
Πάντως έχεις δίκιο, καλό θα ήταν να δείτε και τις λεπτομέρειες... Αν μπορώ να φανώ χρήσιμη, στη διάθεσή σας...
Απάντηση με παράθεση
  #8  
Παλιά 05-08-09, 16:12
Tassos
Guest
 
Μηνύματα: n/a
Προεπιλογή Re: Έλεγχος πρόσβασης στο Internet μέσω κώδικα

Κώστα μου, η συνάρτηση αυτή μπορεί να μας επιστρέψει πληροφορίες για τον τρόπο
και για την κατάσταση της σύνδεσης του υπολογιστή με το Ιντερνέτ (δηλ. τιμές από το RAS Configuration) ,
αλλά όχι αν ο υπολογιστής έχει πραγματικά πρόσβαση στο Internet.

Το τελευταίο για να μπορεί να επιτευχθεί με τη IsDestinationReachable() (παρόμοια με το ping)
η οποία όμως, δεν λειτουργεί σε ΗTTP proxies ή σε firewalls που δεν επιτρέπουν
τα πακέτα ping ICMP (Αυτό για τη φίλη μας Χρύσσα). Άρα.. το ξεχνάμε.

Μας μένουν λοιπόν 2 σίγουρες λύσεις:

1) Λύση με API που ήδη αναφέραμε (InternetOpenUrl...)

2) Λύση με τη χρήση του Internet explorer δηλ.:

Κώδικας:
Option Explicit

Public Function InetIsAvailable() As Boolean
    Dim ie As Object
    Set ie = CreateObject("InternetExplorer.Application")
    ie.navigate "http://www.google.gr"
    While ie.readystate <> 4: DoEvents: Wend
    On Error GoTo ExitHere
    InetIsAvailable = Not IsError(ie.document.domain)
ExitHere:
    ie.ExecWB 45, 2
    Set ie = Nothing
End Function

Public Sub test()
    MsgBox "Internet is " & IIf(InetIsAvailable, "accessible!", "unaccessible!")
End Sub
Φιλικά
Απάντηση με παράθεση
  #9  
Παλιά 06-08-09, 09:20
Όνομα: Ηλιάδης Κωνσταντίνος
Έκδοση λογισμικού Office: Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 13-12-2008
Περιοχή: Chicago
Μηνύματα: 119
Προεπιλογή Re: Έλεγχος πρόσβασης στο Internet μέσω κώδικα

Φίλε Tassos, ομολογουμένος η συνάρτηση InternetGetConnectedState δεν μπορεί να ελένξει αν υπάρχει όντως πρόσβαση στο Internet και επομένως ακολουθώντας την τακτική του ελέγχου URL προτείνω με την σειρά μου αυτόν τον σύντομο κώδικα που κάνει χρήση της συνάρτησης InternetCheckConnection.
Τον παρακάτω κώδικα τον έλενξα σε Lan με Proxy οπότε και θα ήθελα να δοκιμαστεί και με άλλους συνδυασμούς λειτουργικών συστημάτων και τρόπων συνδέσεων στο Inet οπότε και έτσι θα έχουμε μια πλήρη κάλυψη του όλου θέματος.

Κώδικας:
Private Const FLAG_ICC_FORCE_CONNECTION = &H1
Declare Function InternetCheckConnection Lib "wininet" Alias "InternetCheckConnectionA" _
 (ByVal lpszUrl As String, ByVal dwFlags As Long,  _
ByVal dwReserved As Long) As Long
Public Sub CheckInet()
    If InternetCheckConnection("http://www.google.com", FLAG_ICC_FORCE_CONNECTION, 0&) = 0 Then
        MsgBox "No Internet connection", vbOKOnly + vbInformation, "INFO"
    Else
        MsgBox "There is Internet connection", vbOKOnly + vbInformation, "INFO"
    End If
End Sub

Φιλικά

iliadisk / kon73

Τελευταία επεξεργασία από το χρήστη Tasos : 25-11-09 στις 09:33.
Απάντηση με παράθεση
  #10  
Παλιά 06-08-09, 16:49
Tassos
Guest
 
Μηνύματα: n/a
Προεπιλογή Re: Έλεγχος πρόσβασης στο Internet μέσω κώδικα

Απλά να αναφέρω ότι οποιαδήποτε συνάρτηση χρησιμοποιεί
έμμεσα ping (συμπεριλαμβανομένης και της InternetCheckConnection )
δεν μπορεί να θεωρηθεί αξιόπιστη λύση αφού το αν θα επιστραφούν αποτελέσματα εξαρτάται:

• από τις ρυθμίσεις του εκάστοτε υπολογιστή
• από τις ρυθμίσεις του Server(Host) που καλείται μέσω της ping
• από τις ρυθμίσεις του Firewall ή του Router
• από τα δικαιώματα που έχει ο ίδιος ο χρήστης
• Από τις ρυθμίσεις του εταιρικού δικτύου που πιθανόν να είναι συνδεμένος ο υπολογιστής.

Για παράδειγμα, κάνω το πείραμα και εκτελώ την InternetCheckConnection από υπολογιστή που όντως
έχει πρόσβαση στο Internet, άρα η αναμενόμενη τιμή της θα πρέπει να είναι <>0.

Aν λόγω κάποιας από τις προαναφερόμενες ρυθμίσεις ή για κάποιο άλλο λόγο δεν της επιστραφούν αποτελέσματα του ping,
τότε θα επιστρέψει 0 (μηδέν) οπότε... πρέπει να χρησιμοποιήσουμε συναρτήσεις που να μας δίνουν την
πληροφορία πχ. “Μπήκα στην Google και μπορώ να την κάνω Download“

Φιλικά

ΥΓ. Το όνομα μου είναι Τάσος εδώ και 43 χρόνια..Όχι Tassos!! :D
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[ Ασφάλεια] Update εφαρμογής ACCESS μέσω Internet vraxnakisg Access - Ερωτήσεις / Απαντήσεις 7 18-06-15 03:29
[Μορφοποίηση] Περιορισμός πρόσβασης σε στήλες και γραμμές Skakinen Excel - Ερωτήσεις / Απαντήσεις 4 09-01-14 20:50
Κωδικός Πρόσβασης passarella Access - Ερωτήσεις / Απαντήσεις 4 29-08-12 15:40
[ Φόρμες ] Διαχείριση βάσης μέσω internet και 2 χρήστες tzvangel Access - Ερωτήσεις / Απαντήσεις 3 03-03-12 02:13
Έλεγχος διπλοεγγραφής με κώδικα VBA pdhmos Access - Ερωτήσεις / Απαντήσεις 6 01-05-11 10:09


Η ώρα είναι 21:01.