5k Aufrufe
Gefragt in Datenbanken von
Habe eine Abfrage an eine MDB-Tabelle:

SELECT PLZ, Ort, Lat, Lon
FROM Deutschland
WHERE SQR(((Lat - 52)^2) + ((Lon - 10)^2))<= 1;

Leider funzt diese nicht, da die Felder Lat und Lon als Text in der Tabelle definiert sind.
Wie kann ich mit den Werten der Felder trotzdem rechnen?
Kann man diese konvertieren?
Mit Val oder WERT komme ich hier nicht weiter.

Danke für einen Tipp
luet

24 Antworten

0 Punkte
Beantwortet von
Anderer Lösungsvoschlag:

Man setzt in die leeren Spalten der Tabelle Lon und Lat einfach den Wert 0,
dann wir zumindestens gerechnet und die Fehlermeldung bleibt aus.
Bleibt dann nur noch zu lösen, wie ich die Werte Lat = 0 und Lon = 0 draußen lasse?
thx
luet
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo luet,

die Sache mit 0 statt null ist das gleiche in grün, das funktioniert genau so wenig. Die Lösung mit der Tabelle funktioniert wenigstens. Ich kann dir nicht erklären, warum der Lösungsweg von dir nicht umsetzbar ist, leider. Warum die Variablen nicht in einer Tabelle gespeichert werden können/dürfen oder sollen, kann ich nicht nachvollziehen, zumal das leicht zu realisieren ist. Ich habe leider dazu keine neue Idee. EIn Ansatz wäre eventuell bei meiner Antwort 12 zu suchen. Kannst du fachlich beschreiben, für was und wie du das später verwendest. Brauchst du wirklich die Abstände in einer Tabelle? Warum ermittelst du die benötigten Abstände nicht dann, wenn du sie benötigst? - Oder ziehst dir die Straßenentfernung zwischen zwei (vorhandenen) Adressen über google maps (sofern du das benötigst).

Vielleicht hat noch jemand hier im Forum eine zündende Idee....

Gruß
Ralf
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo luet,

hier noch ein interessanter Link:
opengeodb.giswiki.org/wiki/OpenGeoDB_-_Umkreissuche
der sich intensiv mit deinem Thema beschäftigt.

Gruß
Ralf
0 Punkte
Beantwortet von
Hi Ralf,

danke, dass du unermüdlich anderen Leuten hilfst.
Das gebürt großen Respekt :-))

Mein Source ist fertig und funzt auch sehr gut.
Habe die leeren Felder der Spalten Lat und Lon mit einer NULL gefüllt und so erreicht, dass das SQL-Statement läuft.
Bin jetzt in der Lage eine Umkreisuche nach PLZ oder Stadt anhand der Koordinaten durchzuführen.
Das ist für Deutschland, Schweiz und Österreich möglich.
Anschauen kannst du dir das demnächst in der Version 11.0.2
vom DateiCommander:

www.dateicommander.de

Und weil du mir soviel geholfen hast, bekommst du kostenlos eine Lizenz für deine privaten Zwecke (nur wenn du willst).
Melde dich per Mail bei mir.

thx a lot
Christian


SelectStatement = "SELECT Id, PLZ, Ort, " + strKFZ + "Bundesland, DistanzInKm FROM (SELECT Id, PLZ, Ort, " + strKFZ + "Bundesland, " + _
"3.14159265358979 AS PI, " + _
"Cdbl(iif(instr(1, lat, ""."") = 0, lat, left(lat, instr(1, lat, ""."") - 1) & "","" & mid(lat, instr(1, lat, ""."")+1))) * PI / 180 AS hn, " + _
"Cdbl(iif(instr(1, lon, ""."") = 0, lon, left(lon, instr(1, lon, ""."") - 1) & "","" & mid(lon, instr(1, lon, ""."")+1))) * PI / 180 AS he, " + _
LaB + " * PI / 180 AS n, " + _
LoB + " * PI / 180 AS e, " + _
"COS(he - e) * COS(hn) * COS(n) + SIN(hn) * SIN(n) AS co, " + _
"atn(ABS(sqr(1 - co * co) / co)) AS ca, " + _
"Format(6367 * iif(co < 0, PI - ca, ca),""000.000"") AS DistanzInKm " + _
"FROM " + country + _
" WHERE Cdbl(Lon) > 0 " + _
") as innertab WHERE DistanzInKm " & Operator & " " & Entfernung + " Order by DistanzInKm ASC;"
...