Hallo Forum,
folgendes Problem:
In einem Formular mit einer Karte im Hintergrund befinden sich 3 unsichtbare Punkte. 2 dieser Punkte dienen zur Errechung der Koordinaten des 3. Punktes anhand von in einer Tabelle vorliegenden Koordinaten. Das Ganze funktioniert prima, aber leider nur mit einen Fundort.
Ich möchte aber alle in der Tabelle befindlichen Orte darstellen.
Möglichkeit 1: ich generiere ca. 50 Punkte, die ich von R0 bis R49 benenne. Aber wie muss ich dann die Procedur erweitern, damit alle Zeilen durchlaufen werden und jedesmal der nächstfolgende Punkt angesprochen wird?
Möglichkeit 2:
Ich bereite keinen Punkte vor, sondern lasse das von Access machen! Aber wie??????
So sieht die Procedur bisher aus:
Private Sub GeoListe1_Click()
Const BCal1 = 49.4667 'Perl
Const LCal1 = 6.38333
Const BCal2 = 54.3333 'Kiel
Const LCal2 = 10.1333
Me!R0.Left = Me!Cal1.Left + ((Me!GeoListe1.Column(3) - LCal1) / (LCal2 - LCal1)) * (Me!Cal2.Left - Me!Cal1.Left)
Me!R0.Top = Me!Cal1.Top + ((Me!GeoListe1.Column(2) - BCal1) / (BCal2 - BCal1)) * (Me!Cal2.Top - Me!Cal1.Top)
Me!R0.Visible = True
End Sub
Es wäre sehr schön, wenn mir jemand einen Tipp geben könnte
Hallo,
dazu nimmt man eine For-Schleife:
Dim i As Integer
For i = 0 to 49
Me("R" & i).Left = Me!Cal1.Left + ((Me!GeoListe1.Column(3) - LCal1) / (LCal2 - LCal1)) * (Me!Cal2.Left - Me!Cal1.Left)
Me("R" & i).Top = Me!Cal1.Top + ((Me!GeoListe1.Column(2) - BCal1) / (BCal2 - BCal1)) * (Me!Cal2.Top - Me!Cal1.Top)
Me("R" & i).visible = true
Next i
ABER Cal1, Cal2 etc. sind doch die Punkte 0-49 oder? diese sollten in einer Tabelle vorliegen, dann kann man das für jeden einzelnen Punkt automatisch ausführen.
Andreas
Herzlichen Dank,
habe das gleich ausprobiert.
Leider bekomme ich die Fehlermeldung für die erste Zeile nach For i = 0 to 49
Dim i As Integer
For i = 0 To 29
Me("R" & i).Left = Me!Cal1.Left + ((Me!GeoListe1.Column(3) - LCal1) / (LCal2 - LCal1)) * (Me!Cal2.Left - Me!Cal1.Left) "Typen unverträglich"
Me("R" & i).Top = Me!Cal1.Top + ((Me!GeoListe1.Column(2) - BCal1) / (BCal2 - BCal1)) * (Me!Cal2.Top - Me!Cal1.Top)
Me("R" & i).Visible = True
Next i
Was läuft da falsch?
Jorg
Hallo,
1. existiert das Textfeld R0 bis R29 überhaupt?
2. Oder sind es Bezeichnungsfelder
3. Was steht in Me!GeoListe1.Column(3)?
4. Const BCal1 = 49.4667 'Perl
Const LCal1 = 6.38333
Const BCal2 = 54.3333 'Kiel
Const LCal2 = 10.1333
Verwende Komma als Dezimaltrenner!
Gruß Andreas
Hallo Andreas,
Die Textfelder R0 bis R49 gibt es.
In den Spalten der Tabelle Column(2) + 3 stehen die Koordinaten.
Komma als Dezimaltrenner hab ich auch schon versucht. Hilft nicht. Die Einzelberechnung funktioniert ja auch bereit ohne Probleme.
Die Fehlermeldung muss also mit den Zuweisungen Me("R"& i) zu tun haben.
Es kann auch nicht sein, dass die Felder nicht richtig formatiert sind. Mit dem "Ursprungsfeld" Ro funktiniert es ja...
Gruß
Jorg
Hallo,
wenn du dich hier registrierst kannst du deine DB hochladen.
Andreas
Hi,
mach ich.
Muss die DB nur noch vorbereiten.
Wird aber etwas dauern, viel zu tun...
Gruß
Hallo Jorg,
ZitatDie Fehlermeldung muss also mit den Zuweisungen Me("R"& i) zu tun haben.
Versuch's mal so:
Me.Controls("R" & i).Lefthth
gruss ekkehard
Hallo Ekkehard,
Vielen Dank, aber es bleibt leider auch bei "Me.Control...." bei der o. g. Fehlermeldung
Gruß
Jorg
Hallo Jorg,
Zitataber es bleibt leider auch bei "Me.Control...." bei der o. g. Fehlermeldung
Dann sind da IMO Texte dazwischen.
Wie sehen denn die Koordinaten aus?
gruss ekkehard
Hallo Ekkehard,
was immer auch IMO-Texte sind...
Wenn ich den nach Deinem Vorschlag geänderten Code "Bei Klick" aufrufe, funktioniert alles wie gehabt. Der Punkt wird an die richtige Stelle geschoben und auf sichtbar geschaltet. Aber eben bei jedem Klick nur einer und der vorherige wir wieder unsichtbar.
Führe ich den gleiche Code beim Laden oder Öffnen des Formular aus, erscheint die genannte Fehlermeldung.
Ich wäre ja schon zufrieden, wenn die sichtbar gemachten Punkte auch nach erneutem Klick und Durchlauf des Codes sichtbar blieben.
Gruß
Jorg
Hallo Jorg,
Zitatwas immer auch IMO-Texte sind...
IMO = in my opinion = meiner Meinung nach; - den Bindestrich hast Du da eingefügt ;)
Texte wegen der Fehlermeldung "Typen unverträglich". Das deutet häufig auf einen Vergleich zwischen Zahl und String hin, in diesem Fall wohl eher auf eine Operation mit unverträglichen Datentypen.
Welchen Datentyp haben denn die Koordinaten (Me!GeoListe1.Column(3)) ?
Was mir noch aufgefallen ist, da ist mal von 49 Elementen und mal von 29 die Rede.
Ansonsten entspreche Andreas' Wunsch und lade die DB hier hoch.
gruss ekkehard
Hallo,
zum besseren Verständnis lade ich mal die Original-DB hoch, die Reinhard Kraasch mal auf DBWIKI zum Download eingestellt hat (wg. Der Dateigröße habe ich die Ortstabelle extrem gekürzt und die Karte entfernt).
Ich hab das Formular in meine Datenbank eingebunden, die Karte geändert usw.. Alles funktioniert auch mit meinen Daten exakt so wie im Original.
Jetzt möchte ich aber, dass alle in der Auswahlliste aufgeführten Orte (z.B. bei Eingabe ,,Bad") als Markierung in der Karte auftauchen und auch bis zur nächsten Auswahl sichtbar bleiben. Zu diesem Zweck, habe ich mir gedacht, lege ich so viele Punkte an, wie ich maximale Einträge erwarte. Um das Ganze zu testen, genügen natürlich auch erst mal 5 Punkte.
Wenn das System klar ist, lässt sich das sicherlich ohne Probleme erweitern.
Gruß
Jorg
[Anhang gelöscht durch Administrator]
Hallo,
leg noch einige Rechtecke an ("R0" bis "R9", wenn max. 10 Punkte in der Liste auftauchen können)
und benutz z. B. diesen Code:
Private Sub GeoListe_Click()
Const BCal1 = 49.4667 'Perl
Const LCal1 = 6.38333
Const BCal2 = 54.3333 'Kiel
Const LCal2 = 10.1333
Dim itm
For Each itm In Me!GeoListe.ItemsSelected
Me("R" & itm).Left = Me!Cal1.Left + ((Me!GeoListe.Column(5) - LCal1) / (LCal2 - LCal1)) * (Me!Cal2.Left - Me!Cal1.Left)
Me("R" & itm).Top = Me!Cal1.Top + ((Me!GeoListe.Column(4) - BCal1) / (BCal2 - BCal1)) * (Me!Cal2.Top - Me!Cal1.Top)
Me("R" & itm).Visible = True
Next
End Sub
Private Sub Suchen_Click()
Dim Krit As String, itm As Long
Krit = ""
If Not IsNull(Me!Ort) Then Krit = Krit & "AND Ort LIKE '" & Me!Ort & "*'"
If Not IsNull(Me!PLZ) Then Krit = Krit & "AND PLZ1 LIKE '" & Me!PLZ & "*'"
If Krit <> "" Then
Krit = Mid(Krit, 4)
Else
Krit = "ID = -1"
End If
Me.GeoListe.RowSource = "SELECT id, plz1, ort, bld, breite, laenge" & _
" FROM geodb_locations WHERE " & Krit
For itm = 0 To Me!GeoListe.ListCount - 1
Me("R" & itm).Visible = False
Next
End Sub
Hallo und vielen Dank für den schnellen Tipp.
Habe ich naürlich sofort ausprobiert...
Die gute Nachricht: es erfolgt keine Fehlermeldung!
Die schlechte Nachricht: es tut sich aber auch sonst nichts!
Ich habe probeweise die Rechtecke mal auf sichtbar formatiert und zu sehen, ob sich im Hintergrund doch etwas tut. Leider bleiben nach Aufruf alle 10 Rechtecke völlig ungerührt an ihrem Platz.
Gruß
Jorg
Hallo,
habe stillschweigend angenommen, dass das Listenfeld auf Mehrfachauswahl gestellt werden muss.
Hallo Franz,
herzlichen Dank!!!! ;D
Das war der entscheidende Tipp!!
Danke auch an die anderen Tipp-Geber
Gruß
Jorg