|
admin
|
 |
« am: Oktober 28, 2006, 12:54:43 » |
|
Hier der Code Datenimport aus Datenbank
Public Sub ImportData()
' ... Bitte setzen Sie unter Extras/Verweise ' einen Verweis auf "Microsoft DAO 3.6 Object Libary"
' ... Database-Objects Dim dbData As Database Dim rsData As Recordset
Dim layImport As rgLayer
' ... Vergleichspalten Dim rgMatchCol As Integer Dim ExcelMatchCol As Long
Dim lObjectIndex As Long Dim vValueRef As Variant
Dim vNewData As Variant Dim j As Long
' ... Layer anhand des Names suchen .....Layername..... Set layImport = Project.SearchLayerByName("Deutschland Kreise") If Not layImport.Loaded Then MsgBox "Layer nicht geladen" Exit Sub End If
' ... Suchspalte im Importlayer rgMatchCol = 0 ' ... MatchColIndex from Excel-Sheet ExcelMatchCol = 0
' ... Wenn nötig können mit dieser Function alle Daten im Layer gelöscht werden.
'DeleteLayerData layImport
' ... Daten von EXCEL ...Pfad zur Exceldatei Set dbData = OpenDatabase("D:\RegioGraph Makros\Data\ExcelImport.xls", False, True, "Excel 5.0;") 'or Excel 8.0 ' ... ExcelTabellen-Name Set rsData = dbData.OpenRecordset("Tabelle1$")
' ... Alle Datensätze der EXCEL-Tabelle durchlaufen Do Until rsData.EOF ' ... Leere Felder ignorieren If Not IsNull(rsData(ExcelMatchCol)) Then
' ... Daten der Excel-Referenzspalte vValueRef = rsData(ExcelMatchCol) ' ... Suche diesen Datensatz RegioGraph-Layer lObjectIndex = layImport.FindValue(rgMatchCol, vValueRef) If lObjectIndex > -1 Then ' ... Wenn ein Objekt gefunden wurde ' ... Achtung: Spaltenzählung beginnt immer bei 0 ' ... Daten aus 2. Excel Spalte vNewData = rsData(1)
' ... Import in 4. RegioGraph-Spalte layImport.SetValue lObjectIndex, 3, vNewData ' ... Daten aus 3. Excel Spalte vNewData = rsData(2) ' ... Import in 5. RegioGraph-Spalte layImport.SetValue lObjectIndex, 4, vNewData ' ... Mögliche weitere Datenspalten ' ' ... Daten aus 4. Excel Spalte
' vNewData = rsData(3) ' ' ... Import in 6. RegioGraph-Spalte ' layImport.SetValue lObjectIndex, 4, vNewData
' ' ... Daten aus 5. Excel Spalte ' vNewData = rsData(4) ' ' ... Import in 7. RegioGraph-Spalte ' layImport.SetValue lObjectIndex, 4, vNewData Else ' ... Wenn keine Übereinstimmung gefunden wurde Meldung
MsgBox "Data: " & vValueRef & " hat keine Übereinstimmung mit RG-Abgleichspalte!" End If End If ' ... Nächster Excel-Datensatz rsData.MoveNext Loop
' ... Hier kann Layer dann mit neuen Daten abgespeichert werden 'layImport.Save
Set layImport = Nothing
Set dbData = Nothing Set rsData = Nothing
' ... Wenn eine Karte aktiv diese neu zeichnen
If Not ActiveMap Is Nothing Then ActiveMap.Refresh End If
MsgBox "Datenimport beendet"
End Sub
|
|
|
|
|
Gespeichert
|
|
|
|
|
admin
|
 |
« Antwort #1 am: Oktober 28, 2006, 01:02:25 » |
|
Funkionsweisen des Makros
Import einer Excel-Liste in ienen RegioGraph/DISTRICT Layer. Dabei wird die jeweils erste Spalte als Abgleich Kriterium benutzt
Excel Datensatz auslesen Vergleichswert in RegioGraph/DISTRICT Layer suchen
Wert in der 2.ten ExcelSpalte in 4.te RegioGraph/DISTRICT LayerSpalte schreiben Wert in der 3.ten ExcelSpalte in 5.te RegioGraph/DISTRICT LayerSpalte schreiben
Tue Dies bis das Ende der Excel-Liste erreicht ist
Wenn kein Abgleich gefunden wird, Meldung anzeigen
|
|
|
|
« Letzte Änderung: Oktober 28, 2006, 01:04:26 von admin »
|
Gespeichert
|
|
|
|
|
SiRo
|
 |
« Antwort #2 am: April 06, 2009, 09:29:04 » |
|
Hallo also ich weis nicht ob es an meinem System liegt aber ich bekomme immer wieder den Fehler Benutzerdefinierter Typ nicht definiert zeilen: Dim dbData As Database Dim rsData As Recordset liegt es an meinem System oder wo anders?
|
|
|
|
|
Gespeichert
|
Nobody is perfect but Nobody is perfect
|
|
|
|
paff
|
 |
« Antwort #3 am: April 06, 2009, 10:32:19 » |
|
Hallo also ich weis nicht ob es an meinem System liegt aber ich bekomme immer wieder den Fehler Benutzerdefinierter Typ nicht definiert zeilen: Dim dbData As Database Dim rsData As Recordset liegt es an meinem System oder wo anders? Hier ist der entscheidende Hinweis Mann muß die "DAtenbank Schnittstelle in VB bekannt machen" ' ... Bitte setzen Sie unter Extras/Verweise ' einen Verweis auf "Microsoft DAO 3.6 Object Libary"
|
|
|
|
|
Gespeichert
|
|
|
|
|
SiRo
|
 |
« Antwort #4 am: April 06, 2009, 01:45:27 » |
|
Ok klappt jetzt auf anhieb (zumindest keine Fehlermeldung)
|
|
|
|
|
Gespeichert
|
Nobody is perfect but Nobody is perfect
|
|
|
|
paff
|
 |
« Antwort #5 am: April 06, 2009, 08:04:47 » |
|
Glückwunsch 
|
|
|
|
|
Gespeichert
|
|
|
|
|
SiRo
|
 |
« Antwort #6 am: April 14, 2009, 09:42:59 » |
|
Hallo, in wie fern unterscheidet sich ein "normaler" Datenimport von einem Geokodierten? 
|
|
|
|
|
Gespeichert
|
Nobody is perfect but Nobody is perfect
|
|
|
|
paff
|
 |
« Antwort #7 am: April 14, 2009, 09:50:33 » |
|
Hallo, in wie fern unterscheidet sich ein "normaler" Datenimport von einem Geokodierten?  Du solltest mal über eine Schulung nachdenken. Du kannst das Progamm nicht proggen ,wenn du keine ahnung hast was du eigentlich machst. Import: Spielt DAten über ein Abgleichfeld in vorhandene "geo Objekte" Geokodieren: Anhand eine "Geo-Vorlage" werden Punkte auf der Karte gesetzt , also neue "GeoObjekte" erzeugt.
|
|
|
|
|
Gespeichert
|
|
|
|
|
SiRo
|
 |
« Antwort #8 am: April 14, 2009, 10:23:12 » |
|
Das war mir schon klar das Import: Spielt Daten über ein Abgleichfeld in vorhandene "geo Objekte" ich meinte das mehr im Programmier technischem sinne. Wenn ich schätzen sollte würde ich einfach behaupten das der Import im grunde genau so aussieht wie oben beschrieben nur das da ein verweis aufs Abgleichfeld hergestellt werden muss wo z.b: Spalte 1 tabelle xy = Spalte 2 tabelle xx(Postleizahlen) steht ("Nun ja was die Schulung angeht da siehts schlecht aus, da dies ein Projekt ist, das insgesamt nur 9 Wochen läuft, lohnt es sich nicht mehrere Hundert € für eine Schulung auszugeben."). Daher muss ich euch leider auf die Nerfen gehen.  PS: dies ist die letzte Woche des Projekts danach las ich euch in Ruhe
|
|
|
|
« Letzte Änderung: April 14, 2009, 11:03:51 von SiRo »
|
Gespeichert
|
Nobody is perfect but Nobody is perfect
|
|
|
|
paff
|
 |
« Antwort #9 am: April 14, 2009, 11:29:27 » |
|
Was ist nun deine Frage?
Nochmal zum geokoden. Ablauf
Neuen leeren Punktelayer erstellen Abgleich suchen in Abgleichlayer Zufallspunkt in Geoobjekt holen ( GetRandomPoint auf Layerobjekt) Mit Insert Geopoint in Layer einlesen Daten dazuspielen wie beim Import
Wiederholen bis fertig
|
|
|
|
|
Gespeichert
|
|
|
|
|
SiRo
|
 |
« Antwort #10 am: April 15, 2009, 06:43:38 » |
|
so ich habs gefunden wie ich das lösen kann. ... ... ... Set abgleichLayer = project.SearchLayerByName("Deutschland PLZ(5)-Geb. 2004") ... ... Do ... ... lObjectIndex = abgleichLayer.FindValue(rgMatchCol, vValueRef) ... ... ... ObjectIndexX = abgleichLayer.GetRandomPoint(zeile).X ObjectIndexY = abgleichLayer.GetRandomPoint(zeile).Y ... ... ... layImport.InsertGeoPoint ObjectIndexX, ObjectIndexY <- und die Punkte werden nicht Direkt dort gesetzt wo diese seien sollten z.B. Alles 5XXXX PLZ der macht mir aber die Punkte in Berlin und Schsen
layImport.SetValue sWert, zeile, rsData(2) \ layImport.SetValue sWert, zeile, rsData(3)--- allerdings schmeist er mir hier eine Fehlermeldung ab ( zeile = 2 ) ... ... rsData.MoveNext Loop ...
weist du woran es liegt? (Das sowohl die Punkte an der Falschen stelle kommen als auch mit dem fehler) PS Danke für die Hilfe paff
|
|
|
|
« Letzte Änderung: April 15, 2009, 06:46:50 von SiRo »
|
Gespeichert
|
Nobody is perfect but Nobody is perfect
|
|
|
|
paff
|
 |
« Antwort #11 am: April 16, 2009, 09:01:08 » |
|
ObjectIndexX = abgleichLayer.GetRandomPoint(zeile).X ObjectIndexY = abgleichLayer.GetRandomPoint(zeile).Y Dasklappt nicht. Du läßt dir 2mal einen Zufallspunkt geben und ließt vom einen die X Koord und vom anderen die Y Koord Lies den Zufallspiunkt in ein cPoint Objekt Diese dann per insertGeopoint setzen
|
|
|
|
|
Gespeichert
|
|
|
|
|
paff
|
 |
« Antwort #12 am: April 16, 2009, 09:37:56 » |
|
Ich würds so probieren Dim cp as cpoint
..... Set cp = clay.GetRandomPoint(1)
claynew.InsertGeoPoint cp.X, cp.Y
clay ist die "PLZ - Vorlage" claynew der Punktelayer
|
|
|
|
|
Gespeichert
|
|
|
|
|
SiRo
|
 |
« Antwort #13 am: April 16, 2009, 10:01:56 » |
|
Danke, wenn ich es richtig sehe hab ich doch immer noch das Problemm das dieser Punkt eine Zufalspunkt ist und damit sehr ungenau?!
Würde es nicht vieleicht mit GetObjectPosition besser klappe?
|
|
|
|
« Letzte Änderung: April 16, 2009, 10:05:02 von SiRo »
|
Gespeichert
|
Nobody is perfect but Nobody is perfect
|
|
|
|
paff
|
 |
« Antwort #14 am: April 16, 2009, 10:11:45 » |
|
Bein Das ist die Standart Vorgehensweise fürs Geokodieren in RG Es wird ein Zufälliger Punkt in der PLZ gesetzt. ISt genau wie im Programm
Mit GetObjektposition bekommst du den Schwerpunkt? des Polygons. Bei 2 Punkten in einem Gebiet hst du 2 Punkt übereinander
Wr's STraßengenau will sollte sich mal die Version 11 vonn RegioGraph anschauen
|
|
|
|
|
Gespeichert
|
|
|
|
|