PDA

Vollständige Version anzeigen : Routenplaner mit VBA?


Gast
25.09.2003, 13:20
Hallo,

Habe hier glaube ich, ein sehr komplexes Problem!
Ich will ein Formular erstellen. Dieses Formular ist mit der Tabelle Kunden verbunden. Wähle ich im Feld "frmKunde" den Kunden aus kommt sofort in den angelegten Textfeldern Adresse und Telefonnummer des Kunden.

Was ich jetz aber brauche ist die Entfernung zwischen den Kunden.
Muss jeden Tag zu einer bestimmten Anzahl von Kunden. Die Entfernung muss ich jeden Tag wieder neu auskilometern.

Jetzt muss es doch eine Lösung mit VBA geben, mit der man jedem Kunden einen fixen Punkt zuweist und das Formular braucht dann nur mehr die Entfernung zu berechnen und das in ein Textfeld übertragen!

Ist so etwas möglich und wenn ja wie? Habe ehrlich gesagt nicht mal eine Grundstzliche Idee wie das funken könnte. Ist so etwas realisierbar?

Mfg
Mario

jadatcoder
25.09.2003, 14:33
Hallo,

Arne Dieckmann hat ein Beispiel zur Entfernungsberechnung auf seiner Homepage.
guckst Du hier (http://home.arcor.de/ar/arne.d/datenbanken/access2000/index005.html)

Sascha Trowitzsch
25.09.2003, 14:52
Ich schätze, die geographische Entfernung zwischen zwei Punkten auf dem Erdball entspricht in den seltensten Fällen der Strecke auf der Straße.

Deshalb ist es wohl mit den Koordinaten allein nicht getan. (Dafür hätte ich z.B. eine DB, die deutsche Städte und deren Koordinaten enthält.)

Die Daten für die Routenplanung wirst du wohl nirgends umsonst herbekommen. Die, die auf entspr. Routenplaner-CDs drauf sind, sind entweder verschlüsselt oder in proprietärem Format.
Das ist also der erste unüberwindbare Punkt.

Zweitens müsstest du dann einen Algorithmus haben, der diese Routenplanung berechnet. Zu diesem Problem gibt es zahlreiche Lösungen, die allesamt aber ziemlich akademischer Natur sind, weil das wohl alle Informatik-Studenten einmal lösen dürfen. Jedenfalls ist es ziemlich kompliziert und glaube eher nicht, dass du das hinkriegst.

Ich würde das also vergessen.

Ciao, Sascha

Arne Dieckmann
25.09.2003, 15:02
Ich denke auch, dass (z.B. auch innerhalb meiner Beispieldatenbank) nur Näherungen möglich sind. Wenn Du die optimale Route herausfinden willst, ist das Verkehrsaufkommen zu einer bestimmten Zeit sicherlich auch in Betracht zu ziehen. ;)

Gast
25.09.2003, 19:15
Hallo,

Also Verkehrsaufkommen etc. ist gar nicht wichtig. Ich brauche nur die Entfernung zwischen Punkt A und Punkt B. Er soll mir auch nicht sagen wie ich dort hinkommen. Ich brauche ausschließlich nur die Kilometerzahl! Aber ich habe es schon befürchtet. Wenn es füär diese Anforderung doch etwas geben sollte, wäre ich für jeden Tipp dankbar!

Mfg
Thomas

Thomas2705
16.07.2009, 08:51
Ich will das Thema nocheinmal aufgreifen.

Ich bin viel im Außendienst unterwegs und habe das Problem von Kunde A (bei dem ich mich gerade befinde) den am nahe liegendsten Kunden B zu finden.
Jetzt möchte ich allen in der DB erfassten Kunden einen Wert zuordnen damit auf einer Karte der Kunde mit seinen Koordinaten rot leuchtend erscheint.
Gibt es Landkarten oder Städtekarten für Access; wenn ja wo?

Thomas

Atrus2711
16.07.2009, 09:01
Hi,

angesichts der Komplexität der Routenplanung und der relativen einfachen und wenigen Kundeninfos würde ich da den Spieß eher umdrehen:

Die meisten Navis können benutzerdefinierte POIs aufnehmen. Oftmals sind das csv- oder XML-Dateien. Du könntest versuchen, die Kundendaten als POIs auf das Navi zu spielen. Das Navi kann dann (je nach Art) den nächsten POI-Kunden anzeigen und dich gleich dahin führen.

Zu den POI-Daten könnte man z.B. neben dem Namen auch die wichtigtsen Kundeninfos (Umsatz, ...) ablegen. Das Navi müsste dann halt regeömäßig auf die neuesten Kunde-POIs aktualisiert werden.

Sascha Trowitzsch
16.07.2009, 11:05
Als dieser Thread seinerzeit erstellt wurde, gab es noch kein Google Maps oder MS V. Earth etc.
Inzwischen kann man das doch alles im Web bekommen? Wozu da Access?

Google Maps etwa kann man auch von Access aus Anfragen schicken und die Kundenorte als Parameter übergeben, um eine Strecke zu routen.
Mit der Aufgabe für die nahegelegenen Orte allerdings wird es überfordert sein.

Dafür kann sowas aber Microsoft Mappoint, das eine direkt Schnittstelle zu Access-MDBs integriert hat. Bevor man also tagelang in die Entwicklung von entspr. Routinen in Access investiert, würde ich eher mal ein paar Groschen für dieses Programm ausgeben. (http://www.microsoft.com/MapPoint/en-us/default.aspx , http://msdn.microsoft.com/en-us/library/aa562234.aspx)

Ciao, Sascha

Petersen78
24.07.2009, 13:09
Da Hab' ich aber auch noch eine Frage:
Ich habe in Access ein Programm zur Produktionssteuerung in einer Druckerei gebaut. Das nächste Projekt, das direkt an das bisherige angedockt werden soll, ist für den Versand eine Routenplanung zu genreieren - gespeist mit den Daten sortiert nach Liefertermin: Kundenname/.../LieferAdrStraße/...

Mir reicht eine Kartenübersicht mit markierten Punkten der Lieferadressen vom jeweils ausgewählten Datum.

Wie übergebe ich aus einer AccessAbfrage mehere Zielorte an GoogleMaps und lasse zu diesen Zielorten zugeordnet noch ein paar weitere Variabelen aus der Abfrage anzeigen (Kundenname/Gewicht der Lieferung/...)??

Sascha Trowitzsch
24.07.2009, 13:23
Wie übergebe ich aus einer AccessAbfrage mehere Zielorte an GoogleMaps und lasse zu diesen Zielorten zugeordnet noch ein paar weitere Variabelen aus der Abfrage anzeigen
Na, wenn du das Standard-Interface von GoogleMaps verwenden willst, dann geht das schonmal gar nicht.
Für den Zweck müsstest du schon eine eigene Webseite erstellen und mit dem GoogleMaps-API programmieren (http://code.google.com/intl/de/apis/maps/documentation/introduction.html).

Dann allerdings stellt sich die Frage, wie man die Access-Daten an diese Seite schickt? Für einfache Routenplanung über die Standardseite gibt es ja eine Syntax für den Request, den man aus Access zusammenbastelt kann. Aber die eigene Webseite müsste das dann auch können. Also muss sie Parameter entgegen nehmen, wie etwa die Adressen. Das könnte mit Javascript gehen, sinnvoll IMHO aber nur mit PHP.
> Und deshallb ist das eigentlich nun auch kein Access-Thema mehr...

Ciao, Sascha

Louisleon
24.07.2009, 13:44
Na, wenn du das Standard-Interface von GoogleMaps verwenden willst, dann geht das schonmal gar nicht.

Wie meinst Du das?
Ich bin mir nicht sicher, denke aber schon dass das machbar sein könnte.
Ich habe zumindest bereits eine kleine Testversion entworfen bei welcher ich Start- und Zieladresse eingebe und die Route extrahiere (inkl. Längenangaben). Da auf der Webseite die Route auch mit "Zwischenadressen" ermittelt werden kann, sollte dies imo auch per VBA machbar sein.
Das Problem welches ich sehe, ist eher die "optimale" Route zu ermitteln.
Hierzu fehlen sicherlich noch einige Informationen.

Gruß

LL

Atrus2711
24.07.2009, 13:48
Hi,
die Sache mit der Routenoptimierung sprengt schon seit Jahrhunderten Mathematikerhirne :)
http://de.wikipedia.org/wiki/Problem_des_Handlungsreisenden

Aber scheinbar steht das Lieferdatum ja von vornherein fest. Dann brauch ich nicht die Route optimieren, sondern muss das geeignete Verkehrsmittel wählen ("hm, in 3,5 h von Paris nach New York, schade, die Concorde fliegt nicht mehr...") :)

Louisleon
03.08.2009, 10:43
Hallo,

anbei eine Beispiel-MDB zur Routenauswertung mit Google-Maps.
Eine Erweiterung mit Zwischenstationen wäre grundsätzlich möglich, wurde aber in diesem Beispiel noch nicht implementiert.
Code ist nicht optimiert und sicherlich an der einen oder anderen Stelle verbesserungswürdig.
In diesem Beispiel verwende ich noch eine Zwischendatei zum auslesen, dies könnte jedoch auch direkt über das Web-Control erfolgen!
Die Script-Fehler des WebControl einfach mit "Ja" bestätigen (Seite weiter ausführen!). Dieses Problem habe ich noch nicht weiter verfolgt, tritt übrigens auch beim direkt laden auf!
Das Beispiel soll als Arbeitsbeispiel dienen, Verbesserungen und Erweiterungen werden auch gerne im Forum gesehen ;)

Ach ja und falls es gefällt und euch etwas bringt, würde ich mich um eine Bewertung freuen! :)

Viel Spaß damit!

Gruß

LL

Update:
Interaktive Funktionen mit dem WebControl habe ich auch schon realisiert (Routenanpassung im WebControl etc.)

Sascha Trowitzsch
03.08.2009, 16:44
Hi Louis,

Das ist schon ganz hübsch!

Aber: Ich würde als output-Parameter nicht html nehmen, sondern kml, um diese langwierige (und fehleranfällige) Analyse des Rückgabedokuments zu umgehen.

Dieses KML kann dann direkt in eine MSXML-Dokumentvariable geladen und anschließend mit XPath gefiltert werden. Mit den entspr. Abfrageparametern kommt man dann ohne längeren Code an die Directions und - Bonbon! - an die Koordinaten aller Streckenpixel.

Gruß, Sascha

Louisleon
03.08.2009, 17:19
@Sascha

Da hast Du recht, habe es gerade versucht und tatsächlich alles drin!
Obwohl KML in diesem Umfeld am naheliegendsten ist, habe ich das noch gar nicht versucht.:confused:

Das war es, was mir zum "Google-Glück" noch gefehlt hat!:grins:

Bei Gelegenheit werde ich die DB mal umbauen und auch noch mit den anderen Features beglücken (falls mir nicht einer zuvor kommt!;) )

Danke für den Tip, manchmal ist man einfach betriebsblind aber dafür gibt es ja dann das Forum!

Gruß

LL

Sascha Trowitzsch
04.08.2009, 09:43
Zuvorkommen will ich dir nicht, aber doch ein Codeschnipsel anbieten, damit der Rest leichter fällt: ;)

Statt AnalyzeHTML dann (oder zusätzlich) AnalyzeXMLFile einsetzen:


Sub AnalyzeKMLFile()
Dim strKML As String

Open CurrentProject.Path & "\result.htm" For Binary As #1
strKML = String(LOF(1), 0)
Get #1, , strKML
Close #1

AnalyzeKML strKML

End Sub

'Verweis auf "Microsoft XML, v. xx " nötig! (xx: je höher, desto besser)
Sub AnalyzeKML(strKML As String)
Dim oDoc As New MSXML2.DOMDocument40
Dim oNodes As MSXML2.IXMLDOMNodeList
Dim oNodePM As MSXML2.IXMLDOMNode
oDoc.setProperty "SelectionNamespaces", "xmlns:kml='http://earth.google.com/kml/2.0'"
If oDoc.loadXML(strKML) Then
Set oNodes = oDoc.selectNodes(".//kml:Placemark/kml:name")
If oNodes.length > 0 Then
For Each oNodePM In oNodes
Debug.Print oNodePM.Text
Next oNodePM
End If
Else
Debug.Print oDoc.parseError.filepos & ": " & oDoc.parseError.reason
End If
Set oDoc = Nothing
End Sub


Ciao, Sascha

Louisleon
04.08.2009, 11:26
gelöscht!
Man sollte immer die Augen zweimal aufmachen!! ;)
Alles gefunden!
Danke, damit bin ich auch diese blöde WebBrowser-Problem mit dem Skriptfehler los!

Gruß

LL

fadass
04.08.2009, 13:35
Klasse Teil. Vielleicht kannst du die aktuelle Version dann auch hochladen??

Louisleon
06.08.2009, 14:29
Hallo,

anbei eine überarbeitete "Arbeitsversion"!
Die Umsetzung für KML wurde in "frm_GetRoute_KML" realisiert.
In "frm_GetRoute4" werden beide Varianten per Auswahlbox unterstützt.
Weiterhin wird hier z.T. auf Änderungsereignisse im WebControl reagiert (z.B. Routenänderung im WebControl).

Wie bereits gesagt, es handelt sich um eine Arbeitsversion (also stört euch nicht an überflüssigen oder falschen Code)!
Fehler gibt es hier sicherlich noch hin und wieder und es ist auch bei weitem noch nicht so wie ich es mir vorstelle (quickn'dirty:))
Ich würde mich auch freuen wenn mehr Leute sich hier beteiligen würden.
Vielleicht kann man ja auch einen kleinen Workshop daraus machen. ;)

Viel Spaß damit!

Gruß

LL

fadass
10.08.2009, 07:13
Kannst du vielleicht noch ein Startformular einbinden? Leider hab ich im Moment nur eine Runtime zur Verfügung:(

Louisleon
10.08.2009, 12:22
Hallo,

klar, allerdings jetzt auch als "mde".:p
Die Grundzüge sind in den MDB's.
Dieses Beispiel sollte voll funktionsfähig sein.
Mei mehrfachem Vorkommen eines Ortes oder wenn der Ort nicht eindeutig gefunden werden kann (z.B falsch geschrieben) kommt ein Auswahlformular hoch. Mit Doppelklick kann der gewünschte Ort übernommen werden.
Bei Doppelklick in den Routendetails werden die Ortskoordinaten in einer MessageBox ausgegeben.
Meine Entwicklungen mache ich jetzt mal für mich allein, sollte Interesse vorhanden sein meldet euch hier!

Gruß

LL

Update:
Ich verwende jetzt nur noch die "KML" Version! Das XML-Handling überzeugt hier!

' zum auslesen der Wegbeschreibung und Entfernung
Set oNodes = oDoc.selectNodes(".//kml:Placemark/kml:name")
' zum Auslesen der Koordinaten
Set oNodesPNT = oDoc.selectNodes(".//kml:Point/kml:coordinates")

Großer Meister
10.08.2009, 13:19
funtioniert ganz wunderbar, danke.
Aber was hat es mit dem Formular frm_GetRoute4 auf sich?
Die Webseite wird geladen und dann gibt es bei mir eine Endlosschleife und die Webseite verschwindet wieder.

Louisleon
10.08.2009, 13:32
Hallo,

das Formular wollte ich eigentlich rausnehmen, da die Änderungen hier noch nicht abgeschlossen sind.:entsetzt:
Das Formular sollte in der alten MDB-Version allerdings funktionieren!
Ich nehm das Form nochmal raus und stell dieses mit einer eigenen DB später nochmal rein.
In der MDE wurde konsequent mit XML-Auswertung gearbeitet. Im "form4" geht das nicht, da hier Interaktion vom WebControl gefordert ist. Leider habe ich noch das Problem die Frames zu lokalisieren und diese "frei" zu stellen.
Ich würde mir nur das Karten-Frame wünschen!:rolleyes:
Vielleicht hat ja jemand eine Idee?

Gruß

LL

Louisleon
14.08.2009, 15:45
So jetzt mal wieder einen Nachschlag! ;)
Irgendwann werde ich doch wohl das Interesse hier wecken können.
Solange ich kein Feedback bekomme gibts auch nur MDE's!:p

Im Anhang noch eine Erweiterung für alle Urlauber in Deutschland!
Zu jedem Routenpunkt können nun alle im Umkreis von 50Km befindlichen Tankstellen inkl. Preise ermittelt werden.
Das gibts natürlich nicht mehr von Google, aber es gibt ja noch andere Webdienste welche man anzapfen kann. Das ganze beruht mitunter auf dem Beitrag "HTML Quellcode - Tabelle einlesen und weiterverarbeiten (http://www.ms-office-forum.net/forum/showthread.php?t=254187)"!
Hierzu einfach einen Routenpunkt in den Routendetails anklicken und Button drücken!:)


Viel Spaß

Gruß

LL

BTW: Es versteht sich von selbst das im Code keine Schweinereien laufen!!

harvey186
16.10.2010, 10:03
Moin,

das ist echt super, was ihr hier gebastelt habt. Ich würde die Entfernungsberechnung gerne in meiner Access Datenbank Anwendung benutzen, hab aber leider keine Erfahrungen (Ahnung) mit VBA.

Ich habe eine Tabelle mit festen Stationen (Anlage Ziele1). In meinem Eingabe Formular für die Tagesfahrten habe ich zwei Felder Von und Nach. In diesen Feldern wird per DropDown Auswahl eine der Stationen ausgewählt. Nun möchte ich die Entfernung berechen lassen und in einem Feld "KM" anzeigen/abspeichern lassen. Abhängig von den Kilometern wird dann noch der Fahrpreis errechnet werden.
Das müßte doch machbar sein, oder ??

Alternativ habe ich eine Matrix mit allen Kombination erstellt (Anhang Matrix). Vielleicht kann man ja auch die benutzen, denn dann hat man gleich die beiden Adressen, für die die Entfernung benötigt wird.

Wäre echt super, wenn ihr mir helfen könntet, denn dann brauch ich nicht alles mit der Hand am Arm über Google Maps heraussuchen und eintragen.

Danke schon mal,
Harvey

Lanz Rudolf
16.10.2010, 13:48
Hallo
@LL
leider kann kch keine adressen in der schweiz als Start oder Ziel angeben

Louisleon
16.10.2010, 16:12
Hallo,

@Harvey186
Sollte eigentlich kein Problem sein,
...hab aber leider keine Erfahrungen (Ahnung) mit VBA.
und wie sieht es mit dem Rest aus? ;)

@Ruedi
ich schon, hab auch damit kein Problem ;)
Wie gibst Du den diese ein? (eigentlich schon fast egal, es sollte immer was kommen auch wenn keine Route gefunden werden kann!!?)
Und was geht wie nicht?

Gruß

LL

harvey186
17.10.2010, 08:48
Hallo,

@Harvey186
Sollte eigentlich kein Problem sein,
und wie sieht es mit dem Rest aus? ;)

@

Naja, ich kann den PC an-und abmelden :)

Ich hatte gehofft, dass das kein Problem sein sollte, für Euch Profi's, aber für mich ist es das totale Problem :(

Gruß
Harvey

Louisleon
17.10.2010, 09:18
Hallo Harvey,

dann lad doch mal ein kleines Beispiel deiner DB hoch, dann schau ich mal was man machen kann. Du willst also nur die KM-Ermittlung gem Google-Fahrroute eingetragen haben.
Die Berechung dieser bassiert auf der schnellsten Route und kann natürlich von der tatsächlich gefahrenen Route abweichen.

Gruß

LL

harvey186
17.10.2010, 09:25
Moin Louisleon,

die DB ist 13 MB groß !!!! Ich müsste Sie dann erstmal "abspecken".
Ja, das mit der schnellsten Route ist OK, da danach die Preise kalkuliert werden unabhängig von den tatsächlich gefahrenen KM.

Kannst Du vielleicht was mit meinen angehängten Excel-Dateien "basteln" ?

Danke schon mal
Harvey

harvey186
17.10.2010, 09:32
Ich habe übrigens Access2007 und habe gerade versucht die DB als 2003 zu speichern. Das geht leider nicht, weil da wohl Sachen drin sind, die 2003 nicht kann.
Hast Du 2007 ??

Gruß,
Harvey

Louisleon
17.10.2010, 09:36
Hallo Harvey,

nein, 2007 kommt mir nicht auf die Kiste ;)!
Kannst Du vielleicht was mit meinen angehängten Excel-Dateien "basteln" ?
Nun das ist nicht das Problem, aber mit fehlenden Programmierkenntnissen hast vmtl. Du ein Problem das entsprechend einzubauen.

Schau mal das Du das Formular, in welchem Du die Infos benötigst "funktionsfähig" in einer Beispiel-DB bringst (mit anonymisierten Daten). Speichere diese als 2003 und lad mal hoch, dann schauen wir mal.

Update:
Die 2007'er DB kannst Du wieder runternehmen, die hilft nicht.
Kopie der alten DB, alles rausschmeißen was nicht mit dem Form zu tun hat, komprimieren als 2003 speichern und gezipped hochladen.
Dann kannst Du nach Anpassung alles in deiner DB importieren und es sollte funktionieren.

Gruß

LL

harvey186
17.10.2010, 10:32
So, hier als 2003 Version. Ich mußte eine "alte Version" meiner DB benutzen und viel weglöschen.
Zur Erklärung:
die Felder "von" und "zu" greifen auf die Tabelle "Matrix" zu. In der Tabelle stehen die ganzen Kombinationen. Man könnte das auch umbauen und auf die Tabelle "Ziele" zugreifen. Dort stehen nur die diversen Stationen drin. Das kannst Du entscheiden.
In dem Feld "KM Plan" soll dann die Entfernung zwischen Von und Zu stehen (von dem Routenplaner).
Gemäß der Kilometer soll dann im Feld "Preis" ein errechneter Euro Wert stehen. Also bis 30 KM 20 Euro, bis 50 KM 40 Euro und alles andere 100 Euro.

So, nun bin ioch ja mal gespannt :)

Gruß
Harvey

Louisleon
17.10.2010, 10:41
Hallo Harvey,

ist wohl gerade am entstehen ;)
Auf die schnelle mal ein für Dich angepasstes Beispiel.
Ziele und Routen wurden im Datenmodell normalisiert.
Schau es Dir mal an und versuch es zu verstehen, dann reden wir weiter.

Gruß

LL

harvey186
17.10.2010, 10:51
OK, ich schau mal

harvey186
17.10.2010, 11:30
das sieht ja schon mal gut aus.
Aber so richtig verstehen, das wird nix :(
Du arbeitest irgendwie mit "Untertabellen" und da hab ich schonmal keine Ahnung
von.
Auch wenn ich mir das frm_GetRoute_KML anschaue, versteh ich nur Bahnhof ?!?!?!?

Geht das auch so, dass ich in das frm_GetRoute_KML die Stationsnamen, also die Ort_ID eingebe ?? Weil, wie in meiner DB, die Ort_ID per DropDown ausgewählt werden soll.

Gruß,
Harvey

Louisleon
17.10.2010, 11:36
Du arbeitest irgendwie mit "Untertabellen" und da hab ich schonmal keine Ahnung von.
Das ist die angesprochene "Normalisierung"!

Auch wenn ich mir das frm_GetRoute_KML anschaue, versteh ich nur Bahnhof ?!?!?!?

Das kriegen wir schon hin, bin jetzt nur mal kurz weg.
Melde mich nachmittags wieder.

Gruß

LL

harvey186
17.10.2010, 11:40
Ok, danke,

Ich habe gerade versucht alles in meine DB zu importieren. Beim Aufruf vom frm_GetRoute_KML
bekomme ich jetzt die Meldung Fehler beim Kompilieren -- Benutzerdefinierter Typ nicht definiert und der Cursor steht bei Sub GoogleAnalyzer(HTMLDoc As HTMLDocument

bis dann,
Harvey

harvey186
17.10.2010, 12:56
Das mit der Fehlermeldung hat sich erledigt. Ich hatte den Verweis auf die Microsoft HTML Object Library nicht angekreuzt.

Gruß
Harvey

Louisleon
17.10.2010, 15:13
So, da bin ich wieder ;)
Wunderbar, jetzt solltest Du noch die Tabellen entsprechend anpassen (Normalisieren!), Es reicht wenn Du deinen, ich nenn ihn jetzt mal "Ort_ID"-Schlüssel, zusammen mit den Adressen in einer Tabelle hast und die Routentabelle nur mit den "Ort_ID"-Schlüssel als Fremdschlüssel bestückst.
Damit findest Du immer die korrespondierende Adresse über diesen "Schlüssel" (siehe meine Abfrage "qry_Matrix").

Ich würde die Entfernung nicht in der Tabelle speichern, da sie ja jederzeit über Google ermittelbar ist. Sollte sich die Streckenführung irgendwann mal ändern, so wird immer die aktuelle Fahrstrecke ermittelt.
In Dokumenten (Lieferscheine, Rechnungen etc.) kann/sollte/muß die Strecke ja sowieso redundant gespeichert werden.

So soviel mal dazu, wie weit bist du vorangekommen?

Gruß

LL

harvey186
17.10.2010, 15:28
eigentlich garnicht.

das mit der tbl_Ziele. verstehe ich nicht. Wie macht man das mit diesen "versteckten" Feldern ??

harvey186
17.10.2010, 15:37
Könnten wir nicht erstmal damit anfangen, das die Eingabe über die Ort_ID erfolgt ??

Louisleon
17.10.2010, 16:25
Könnten wir nicht erstmal damit anfangen, das die Eingabe über die Ort_ID erfolgt ??

Klar, wie Du willst.
Wie stellst Du Dir das vor?
Ein Auswahlfeld, Ein Textfeld mit Button, ohne Button nach Focusverlust ??

Gruß

LL

harvey186
17.10.2010, 16:28
eigentlich ganz einfach.

Es gibt zwei Felder -->"Von" und "Nach" per DropDown werden die Stationen (Ort_ID) ausgewählt und dann wird die Entfernung angezeigt.

By the way, hast DU dir mein Eingabe Formular mal angesehen ??

Gruß
Harvey

harvey186
17.10.2010, 17:19
@LL

So, nu muß ich weg. Ich schau Morgenmittag aber gleich wieder rein, ob Du was neues für mich hast :)

Schönen Abend noch
Harvey

Louisleon
17.10.2010, 17:29
By the way, hast DU dir mein Eingabe Formular mal angesehen ??

Welches meinst Du da "Europcar" ?
Die Kürzel (Ort_ID) reichen Dir?
Allerdings kann und werde ich nicht Deine Arbeit machen, du mußt dich da schon durchbeißen!
Im Anhang ein Beispiel, siehe "Frm_Harvey"!

Gruß

LL

harvey186
17.10.2010, 19:01
Moin LL,

das sieht echt super aus. Ich werd Morgen mal versuchen, dass in mein Eingabeformular (Europcar) einzubauen.

Und keine Sorge, ich werd versuchen, mich da durch zu beißen. Aber Du mußt damit rechnen, dass ich noch ein paar blöde Fragen stellen werde :)

Wie z.B.: Wie geht das mit dieser "verdeckten" Tabelle "tbl_Ziele" ???

Dann noch einen schönen Abend,
Harvey

Louisleon
17.10.2010, 21:02
Wie geht das mit dieser "verdeckten" Tabelle "tbl_Ziele" ???
Was meinst Du damit?
Die Tabelle Ziele beinhaltet die Orts_ID und die Adressen, in der Tabelle Routen sind die Orts_ID's des Start und Zielpunkts korrespondierend zu den Adressen der Orts_ID's von der Tabelle Ziele.
Das ist alles, schau mal unter dem Stichwort "Normalisierung" (http://lmgtfy.com/?q=Normalisierung) nach!

Gruß

LL

harvey186
18.10.2010, 17:22
Moin LL,

also, ich habe mit der "Normalisierung" so meine Probleme. Erstens habe ich nirgends was gefunden, wie ich das mache und zweitens verstehe ich das nicht.

Ich habe meine Tabelle "Matrix" wo ALLE möglichen Kombinationen drin stehen. Diese Matrix muß ich auch jedesmal ergänzen, wenn eine neue Station dazu kommt. Das heißt, wenn 1 neue Station dazu kommt, muß die Matrix mit (n) Datensätzen ergänzt werden (Beispiel, wenn ich schon 38 Stationen habe, muß ich 38 neue Datensätze anlegen.
Ich verstehe nun nicht, wozu ich noch die Tabelle "Ziele" brauche. Ich kann/müsste doch auch direkt auf die "Matrix" zugreifen können, oder ??

Außerdem will/muß ich die KM und den Preis wegen der Nachverfolgbarkeit in meiner Haupttabelle mit abspeichern. Der errechnete Preis, ist nicht fix. Das heißt, er kann überschrieben werden (auf und abrunden zum Beispiel).

Ich habe nun versucht, die Tabelle "Matrix" für das frm_Harvey zu benutzen. Das klappt aber nur, solange es deine tbl_Ziele gibt. Nenne ich die tbl_Ziele um, hat der Call GetRoute mit dem SELECT ein Problem
'Me!lst_Routedetail.RowSource = "SELECT tbl_Routedetails.Position, tbl_Routedetails.Wegbeschreibung, tbl_Routedetails.Entfernung, tbl_Routedetails.Mass FROM tbl_Routedetails ORDER BY tbl_Routedetails.Position;"

Wenn ich das richtig sehe, hat mein frm_Harvey nur das Feld tbl_Routedetails.Entfernung, oder ??
Kann ich das nicht mit in die "Matrix" mit einbauen ?

So, ich hoffe, die vielen Fragen "erschlagen" dich nicht.

Gruß
Harvey

Louisleon
18.10.2010, 17:31
Hallo Harvey,

im Prinzip brauchst Du nur die Tabelle "Ziele"!
Die "Matrix" bildest Du im Prinzip ja schon über das Formular ab!
Damit kannst Du ja jede Entfernung der in der Tabelle Ziele beinhalteten Stationen zueinander ermitteln!
Die "Matrix" als Tabelle könnte somit mittels einer selbtsreferenzierenden Abfrage der tbl_Ziele erfolgen! Alle mit allen!
z.B. so:
SELECT ZStart.Ort_ID, ZEnde.Ort_ID
FROM tbl_Ziele AS ZStart, tbl_Ziele AS ZEnde;
Damit brauichst Du nicht immer die Matrix neu erstellen, Sie erstellt sich anhand der Ziel-Tabelle!
Verstanden?
'Me!lst_Routedetail.RowSource = "SELECT tbl_Routedetails.Position, tbl_Routedetails.Wegbeschreibung, tbl_Routedetails.Entfernung, tbl_Routedetails.Mass FROM tbl_Routedetails ORDER BY tbl_Routedetails.Position;"

Wenn ich das richtig sehe, hat mein frm_Harvey nur das Feld tbl_Routedetails.Entfernung, oder ??

Richtig, die Routenausgabe im Listenfeld ist für dieses Form überflüssig (auskommentieren!)

Gruß

LL

harvey186
18.10.2010, 17:40
Das hört sich gut an, aber hab's nicht verstanden.
Ich habe gerade in der tbl_Ziele eine neue Station eingerichtet, aber nun fehlt mir dafür die Verbindung mit den anderen Stationen.

Die Matrix habe ich erstellt, in dem ich in einer Abfrage 2 x die Tabelle Ziele genommen, aber die Dateien nicht verknüpft habe.
Ist das das was du mit selbtsreferenzierenden Abfrage meinst ??

Gruß Harvey

Louisleon
18.10.2010, 17:46
Genau!
Und wenn Du die DS bei denen Start und Ziel identisch sind nicht haben willst, sieht die Abfrage wie folgt aus:
("qry_Matrix"):
SELECT ZStart.Adresse, ZEnde.Adresse
FROM tbl_Ziele AS ZStart, tbl_Ziele AS ZEnde
WHERE ((Not (ZStart.Adresse)=[ZEnde].[Adresse]) AND (Not (ZEnde.Adresse)=[ZStart].[Adresse]));

Gruß

LL

harvey186
18.10.2010, 18:09
Nagut, dann werd ich mal weiter probieren, das frm_Harvey auf die Matrix umzubauen.

Gruß,
Harvey

Louisleon
18.10.2010, 18:16
Nagut, dann werd ich mal weiter probieren, das frm_Harvey auf die Matrix umzubauen.

Ich versteh Dich nicht (oder Du mich nicht!)
Was willst Du denn Umbauen?
In deiner Form "Europcar" hast Du zwei Combos, welche Ihre werte aus tbl_Ziele bekommen, Richtig?! (siehe Frm_Harvey!)
Also brauchst Du nur analog frm_Harvey die Km-Ermittlung anpassen und gut ist es!
Keine Ahnung was Du mit Deiner Matrix hast? Willst Du die ganzen Strecken noch drucken, erstellst Du Dir die Matrix mit den Entfernungen, indem Du die Prozedur zur Function umbaust und Dir die Entfernung zurücklieferst. Diese Funktion rufst Du dann in der Abfrage auf und ermittelst zu den DS die Entfernungen!

Gruß

LL

harvey186
18.10.2010, 18:26
Stümmt eigentlich. Da hab ich mir wohl selbst auf dem Schlauch gestanden :cool:
Das war wohl von mir ein Denkfehler, weil ich, bevor ich deinen Routenplanerzugriff gefunden hatte, die Matrix einbauen wollte.

Dann werd ich mich mal den einfacheren Weg gehen.

Danke,
Harvey
PS. Entweder ich sag Bescheid, ob es geklappt hat, oder ich komm noch mal mit ner Frage auf dich zu.

raist10
19.10.2010, 11:27
Das mit der Fehlermeldung hat sich erledigt. Ich hatte den Verweis auf die Microsoft HTML Object Library nicht angekreuzt

Nachdem ich gerade massivste Probleme mit dieser Lib habe, würde ich hier dringendst empfehlen den Verweis nicht anzukreuzen und auf Late-Binding umzuswitchen.

Zumindest wenn man plant das die DB auch auf fremden Zielrechner in complilierter Form (also als mde/accde) laufen soll.

Durfte gerade feststellen das auch wirklich vielen Rechnern die User so besitzen der MSHTML-Verweis zu massiven Problemen führen kann. Oftmals ist dieser Verweis intern beschädigt (tlb und dll sind unterschiedliche Versionen was eigentlich nicht sein darf) und wenn das nicht ist, machen die vielen im Umlauf befindlichen unterschiedlichen IE-Versionen Probleme weil man mit hoher Treffsicherheit nicht die auf dem Zielrechner vorhandene Version als Verweis gesetzt hat.

Die Probleme treten natürlich nur auf wenn der Verweis durch die Erstellung einer mde/accde fest kodiert wurde.

Gruß

Rainer

harvey186
19.10.2010, 15:41
Moin LL,

so, ich bin am Verzweifeln !!! Ich habe nun seit Stunden versucht, das frm_Harvey in meine Datenbank zu integrieren, aber es hagelt nur Fehlermeldungen.

Ich werd wohl auf dieses tolle Feature verzichten müssen und mir die Entfernungen mit der Hand am Arm heraus suchen und in der Matrix hinterlegen :(

Gruß,
Harvey

raist10
19.10.2010, 15:48
@ Harvey


... das frm_Harvey in meine Datenbank zu integrieren, aber es hagelt nur Fehlermeldungen

Lies mal meinen Beitrag #56 durch, ich habe den nicht ganz umsonst geschrieben. ;)

Vielleicht liegen Deine Probleme genau dort. Wenn ja, wären die Probleme durch eine Umstellung auf Late-Binding behebbar ... sofern Du nicht die Events die die MSHTML feuert benötigst.

Gruß

Rainer

harvey186
19.10.2010, 16:14
@Rainer,

sorry, ich bin da der absolute Laie. Ich glaube aber nicht, dass meine Probleme damit zu tun haben. Es ist einfach so, dass meine Tabellen, Felder etc. alle anders sind, als in der DB von LL und ich einfach nicht verstehe, wie ich das Formular und so von LL in mein Formular integrieren kann.

Aber trotzdem Danke für den Hinweis.

Grüße,
Harvey

raist10
19.10.2010, 16:22
Es ist einfach so, dass meine Tabellen, Felder etc. alle anders sind, als in der DB von LL und ich einfach nicht verstehe, wie ich das Formular und so von LL in mein Formular integrieren kann.

Oki, das ist was anderes. ;)

Gruß

Rainer

Louisleon
20.10.2010, 10:07
Es ist einfach so, dass meine Tabellen, Felder etc. alle anders sind, als in der DB von LL und ich einfach nicht verstehe, wie ich das Formular und so von LL in mein Formular integrieren kann.

Im Prinzip wäre es das schon, da ich wenig Berührungspunkte mit deinem Datenmodell habe. Da ich deine DB wieder gefunden habe, habe ich mir das mal angeschaut.
Bevor Du Dich mit meiner Lösung beschäftigst, solltest Du erst mal das Datenmodell in Ordnung bringen und die DB besser strukturieren.
Man sollte beim "Hausbau" halt nicht mit dem Dach anfangen!

Gruß

LL

harvey186
20.10.2010, 16:04
Moin LL,

ich hab es nun doch noch geschafft, aber ....
ich schaffe es (noch) nicht, dass die Kilometer in meiner Tabelle mit den anderen Daten zusammen abgespeichert werden.
Das Speichern widerspricht wahrscheinlich wieder gegen eine "saubere"DB Struktur", aber wie schon mal geschrieben, muß ich die KM speichern, bzw. den Feldinhalt, da man auch manuell auf, bzw. abrunden kann und somit ist die KM-Zahl eine feste abzuspeichernde zahl.

Für nen Tip wäre ich dankbar ;)

Gruß,
Harvey

harvey186
20.10.2010, 20:21
So, das mit dem Speichern hab ich nun auch geschafft. Jetzt noch ein wenig Feintuning und das warst dann.


Vielen Dank,
Harvey

ernibert
15.06.2011, 09:17
Hallo an alle

erstmal Danke für die vielen Tipps und Beispiele:)

Bin ein kompletter Neuling sowohl in diesem Forum als auch im Umgang mit Access und VBA, dementsprechend sind auch meine Kenntnisse (nicht vorhanden;)

Mein Ausbilder hat mich vor die Aufgabe gestellt eine Anwendung zu entwickeln mit welcher ich die Adressdaten unserer Kunden auf einen Knopfdruck mit einer KM-Anzahl versehen kann. Ich habe also 2 Tabellen (Start/Ziel) und muss mir da bei mehreren Tausend Datensätzen einen Kilometer wert ausgeben lassen.
Habe mir auch schon das Beispiel von Harvey angesehen, welches mich zwar weiter bringt aber ich bin dennoch weit vom Ziel entfernt.
Im Grunde genommen müsste ich das nur an Unsere Daten anpassen und einen Weg finden alle Datensätze durchzurechnen statt jeden seperat über ein Formular ausgeben zu lassen.

Würde mich freuen wenn mir da jemand in möglichst einfachen Worten und am besten Schritt für Schritt weiter helfen kann da ich auch gerne verstehen würde was genau ich da mache.

Gruß Erni

Louisleon
20.06.2011, 19:44
Hallo Erni,

...einen Weg finden alle Datensätze durchzurechnen statt jeden seperat über ein Formular ausgeben zu lassen.

Google-Maps verhindert einen automatisierten Zugriff mehrere "tausende Datensätze"!
Sinvoll wäre hier eine Online-Ermittlung bei Bedarf, was mit der DB auch funktioniert. (Ist übrigens nicht von Harvey ;) )
Mit "nicht vorhandenen" Kenntnissen kann ich Dir derzeit aber leider nicht weiter helfen, da ich massiv unter Druck bin.
Die Beschreibung im Thread ist m.E. verständlich, falls nicht sag woran es happert.

Gruß

LL

No Name
11.07.2012, 15:07
Hallo LouisLeon,

kannst du deine DB auch als MDB zur Verfügung stellen?
Die Datenbanken welche als MDe zur Verfügung gestellt sind bringen bei mir Fehlermeldungen.
Aber die als MDB funtkionieren. Ich wäre froh wenn ich deinen Code benutzen könnte.

Nachtrag: Sorry, hatte mich vertan. Habe oben MDB und MDE vertauscht

Mattes2
17.03.2014, 12:34
Hallo zusammen,

die Beispiele von Louisleon laufen leider
mittlerweile alle in Fehlermeldungen.

Hat jemand ein aktuelles lauffähiges Beispiel
um den derzeitigen Google-Maps Routenplaner für
einen Start- und einen Zielpunkt (ohne Zwischenstationen)
aus Access anzuwerfen?

LG
Mattes2

Mattes2
17.03.2014, 15:39
ERLEDIGT:

Habs selbst gefunden:

Schaltfläche basteln: z. B. btnRoute und folgenden Code reinsemmeln:

Private Sub btnRoute_Click()
On Error GoTo Err_f

Dim strHyperlink As String, Startadresse As String, Zieladresse As String

'Hier die werte für Start- und Zieladresse belegen
Startadresse = Me!Startort
Zieladresse = Me!Zielort
strHyperlink = "http://maps.google.de/maps?f=d&hl=de&saddr=" _
& Startadresse & "&daddr=" & Zieladresse
Application.FollowHyperlink strHyperlink

Exit_f:
Exit Sub

Err_f:
Call ErrorLog("Rechnung", "Private Function btnRoute_Click")
MsgBox Error$ & Err, 48, "Anwendungsfehler..."
DoCmd.Beep
If MsgBox("Es ist ein Fehler aufgetreten. Soll ein Ticket an den Systemhersteller gesendet werden?" & Chr(10) & Chr(13) & "Je nach Sicherheitseinstellungen müssen Sie danach ggf. Ihr Emailprogramm öffnen" & Chr(10) & Chr(13) & "und die Ticket-Email manuell aus dem Postausgang absetzen!", vbQuestion + vbYesNo, "Systemanfrage...") = vbYes Then
Call Ticketerstellen
End If
Resume Exit_f
End Sub

Start- und Zielort sind zusammengesetzt aus:

Firma Testmann, Teststraße 3, 78901 Teststadt

Läuft super!

LG
Mattes2

Tanja1999
07.04.2016, 14:41
GoogleMaps hat die Nutzung mittlerweile abgeschnitten bei mir... Gibt es ein Update?

Mattes2
09.04.2016, 09:26
GoogleMaps hat die Nutzung mittlerweile abgeschnitten bei mir... Gibt es ein Update?

Was heißt abgeschnitten?

Der Code läuft nach wie vor ohne Probs...

LG
Mattes2