1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Tabellenzelle in Access automatisch ausfüllen

Discussion in 'Office-Programme' started by KennyRie, May 12, 2009.

Thread Status:
Not open for further replies.
  1. KennyRie

    KennyRie Byte

    Hallo zusammen,

    ich möchte in einer Access Datenbank folgendes machen, ich habe 2 Orte von denen ich die GPS Koordinate kenne.
    Gebe ich in deiner Tabelle den Start- und den Zielort ein (referenziert per Primärschlüssel) soll in einer weiteren Tabellen Zelle automatisch die Entfernung berechnet werden.

    Ich habs schon mit einer SQL Abfrage probiert, allerdings ist das Problem das dann die ganze Tabelle und nicht nur der diskrete Datensatz (sprich die Zeile in dem ich Start- und Endpunkt eingegeben habe) durchsucht wird und somit mehre Optionen geliefert werden. Ich möchte dieser aber garnicht erst auswählen müssen sonder quasi sobald ich Start- und Endpunkt eingegeben habe soll automatisch die Berechnung in der Zelle stattfinden und der Wert dort eingetragen werden.

    Habe ich eine Chance das in Access zu realisieren? Geht das per SQL oder nur per Makro / VBA?

    Vielen Dank!
    KennyRie
     
  2. Urs2

    Urs2 Megabyte

    ...und wer soll das Berechnen?
    Ich kenne Access nicht, aber das ist doch eine Datenbank und keine Tabellenkalkulation.
    Excel kann das von sich aus auch nicht berechnen, aber VBA kann die Formel bereitstellen... und dann wird berechnet.

    Für die Ellipsoid-Erde ist die Formel kompliziert (etwa 50 Zeilen), aber für die Kugel-Erde wäre sie einfach (ein langer Einzeiler).
    GPS gibt die Ellipsoid-Koordinaten an, wie man dann damit weiter rechnet, bestimmt die Genauigkeit des Ergebnisses.

    Im Prinzip brauchst Du >
    - Die beiden GPS-Koordinaten für Start und Ziel im Format 51.23652 Grad
    - diese vier Gradwerte müssen ins Bogenmass (Radiant) gewandelt und an die Formel übergeben werden
    - das Resultat der Formel muss dann noch in KM gewandelt werden.

    Ob die Datenbasis in Access oder in Excel liegt, spielt keine Rolle. Aber irgend jemand muss die Umwandlungen und die Berechnung ausführen. Excel-VBA kann das, ob es Access-VBA auch könnte, weiss ich nicht.

    Gruss Urs
     
  3. Hascheff

    Hascheff Moderator

    Hallo,
    ich wage mal die Behauptung, dass in solchen Berechnungen Access-VBA und Excel-VBA gleich leistungsfähig sind.
    Was SQL betrifft, ich weiß ja nicht, welche Version du hast, aber ich schätze, mindestens Access 2011 ;) sollte es schon sein.
     
  4. Urs2

    Urs2 Megabyte

    Wenn dem so ist, dann...

    @KennyRie >>> Hier die Formel, die Excel als "Benutzerdefinierte Funktion" akzeptiert >>>

    Da die Kugel-Erde mit einem Durchschnittsradius, und die Ellipsoid-Erde (=GPS) mit einem theoretischen Ellipsoid rechnet (was auch nicht ganz richtig ist >>> die Erde ist eher birnenförmig) >>>

    Der Unterschied bei halbem Erdumfang beträgt >
    - auf dem Aequator >>> 20'002km zu 20'038km
    - NordSüd >>> 20'002km zu 19'970km
    ...d.h. auf kurze Strecken vernachlässigbar, also hier >>> mit Kugel-Erde

    Aber >>>
    - die Eingaben müssen im Format ±16.123456 Grad sein.
    - bei anderen Grad-Angaben könnte man eine ganze Seite mit Fehlerabfangen schreiben, also wandle das selbst um...
    - die Umwandlung geschieht mit >>> AbsolutGrad + Minuten/60 + Sekunden/3600... und dann das Vorzeichen setzen...
    ... da wird wohl Access auch eine "umgewandelte Spalte" vorhalten können.

    - Lat1 und Lon1 sind die Start-Koordinaten, Lat2/Lon2 die Ziel-Koordinaten
    - Westlängen sind positiv, Ostlängen negativ + Nordbreiten sind positiv, Südbreiten negativ
    >>> also > Berlin = Lat 52.5164 und Lon -13.3808
    >>> oder > Rio de Janeiro = Lat -22.9106 und Lon 43.1628


    Ich habe diese Function entzerrt, damit sie allgemein verständlicher wird >>>
    Code:
    Function Distanz(ByVal Lat1, ByVal Lon1, ByVal Lat2, ByVal Lon2) As Double
    
    Dim DegToRad, Lat10, Lon10, Lat20, Lon20
    
                            'wenn Lon >90 oder <-90 >> rechnet Unsinn
    If Lat1 < -90 Or Lat1 > 90 Or Lat2 < -90 Or Lat2 > 90 Then
        q = MsgBox("Ein Breitengrad ist >90 oder <-90 Grad", vbOKOnly)
        Distanz = 0
        Exit Function
    End If
                        'umwandeln: Grad > Radiant
    DegToRadx = 3.14159265358979 / 180
    Lat10 = Lat1 * DegToRadx
    Lon10 = -Lon1 * DegToRadx
    Lat20 = Lat2 * DegToRadx
    Lon20 = -Lon2 * DegToRadx
                        'Distanzformeln
    Distanz = Sqr((Sin((Lat10 - Lat20) / 2)) ^ 2 + Cos(Lat10) * Cos(Lat20) * (Sin((Lon10 - Lon20) / 2)) ^ 2)
    Distanz = Application.WorksheetFunction.Asin(Distanz) * 2
                        '6366.70202 = mittlerer Erdradius
    Distanz = Distanz * 6366.70702
    
    End Function
    
    In Excel funktioniert das perfekt, wie man das in Access verwendet...
    ...könnte Dir vielleicht Hascheff verraten.

    Gruss Urs
     
  5. Hascheff

    Hascheff Moderator

    Ich warte erst mal ab, ob es der TO allein schafft.
     
  6. KennyRie

    KennyRie Byte

    Hallo,

    und vielen Dank für die ganze HIlfe schonmal :)

    Ich werd mich heute mal dransetzen das Problem zu lösen, hatte die letzten Tage leider nicht so viel Zeit.
    Ich sag euch bescheid wie es geklappt hat!

    Grüße!
    KennyRie
     
  7. KennyRie

    KennyRie Byte

    So ich habs geschafft :D, und es funktioniert wunderbar, ein bisschen Code kam natürlich noch dazu zu der reinen Entfernungsberechnung. (Die Worksheet-Function wird anscheinend nicht von Access unterstützt, habs aber gelöst bekommen)

    Und jetzt läufts =)

    Eine Frage noch, wenn ich das Makro ausführen möchte muss ich dafür immer in den VBA-Editor rein, gibts ne möglichkeit das Modul (es wird ja auch links aufgelistet) auszuführen ohne dafür in den Editor zu müssen?

    Beste Grüße und vielen Dank nochmal =)
    KennyRie
     
  8. Hascheff

    Hascheff Moderator

    Du hast doch sicher ein Formular, in dem du per Auswahlliste die Orte bestimmst. Der Code muss in dem Ereignis "Bei Änderung" untergebracht werden. Eventuell musst du noch den Fall, dass der andere Ort noch unbestimmt ist, mit "If Not IsNull(<Ort2>) Then <Code>" abfangen.
    Natürlich kannst du auch einen Button ins Formular stellen.

    Gruß, Hascheff
     
Thread Status:
Not open for further replies.

Share This Page