GeomarketingForum.com
Juli 31, 2010, 12:15:05 *
Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge
News: Verfolge alle RegioGraph Meldungen auf Twitter
www.twitter.com/regiographpress
 
   Übersicht   Hilfe Suche Kalender Login Registrieren  
Seiten: [1] 2
  Drucken  
Autor Thema: Diskussion zum Datenimport (Excel) Makro (VBA-Hilfe)  (Gelesen 6603 mal)
admin
Administrator
Full Member
*****
Beiträge: 111


Profil anzeigen E-Mail
« am: Oktober 28, 2006, 12:54:43 »

Hier der Code
Zitat
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
Administrator
Full Member
*****
Beiträge: 111


Profil anzeigen E-Mail
« 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
Newbie
*
Beiträge: 39


174263400
Profil anzeigen
« 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
Zitat
Benutzerdefinierter Typ nicht definiert

zeilen:
Zitat
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
Administrator
Hero Member
*****
Beiträge: 809


439627146
Profil anzeigen WWW
« 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
Zitat
Benutzerdefinierter Typ nicht definiert

zeilen:
Zitat
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

Follow RegioGraph on Twitter
http://twitter.com/regiograph
SiRo
Newbie
*
Beiträge: 39


174263400
Profil anzeigen
« 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
Administrator
Hero Member
*****
Beiträge: 809


439627146
Profil anzeigen WWW
« Antwort #5 am: April 06, 2009, 08:04:47 »

Glückwunsch Grin
Gespeichert

Follow RegioGraph on Twitter
http://twitter.com/regiograph
SiRo
Newbie
*
Beiträge: 39


174263400
Profil anzeigen
« Antwort #6 am: April 14, 2009, 09:42:59 »

Hallo,
in wie fern unterscheidet sich ein "normaler" Datenimport von einem Geokodierten?  Smiley
Gespeichert

Nobody is perfect but Nobody is perfect
paff
Administrator
Hero Member
*****
Beiträge: 809


439627146
Profil anzeigen WWW
« Antwort #7 am: April 14, 2009, 09:50:33 »

Hallo,
in wie fern unterscheidet sich ein "normaler" Datenimport von einem Geokodierten?  Smiley

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

Follow RegioGraph on Twitter
http://twitter.com/regiograph
SiRo
Newbie
*
Beiträge: 39


174263400
Profil anzeigen
« Antwort #8 am: April 14, 2009, 10:23:12 »

Das war mir schon klar das
Zitat
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.  Roll Eyes

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
Administrator
Hero Member
*****
Beiträge: 809


439627146
Profil anzeigen WWW
« 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

Follow RegioGraph on Twitter
http://twitter.com/regiograph
SiRo
Newbie
*
Beiträge: 39


174263400
Profil anzeigen
« Antwort #10 am: April 15, 2009, 06:43:38 »

so ich habs gefunden wie ich das lösen kann.

Zitat
...
   ...
      ...    
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
Administrator
Hero Member
*****
Beiträge: 809


439627146
Profil anzeigen WWW
« Antwort #11 am: April 16, 2009, 09:01:08 »

Zitat
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

Follow RegioGraph on Twitter
http://twitter.com/regiograph
paff
Administrator
Hero Member
*****
Beiträge: 809


439627146
Profil anzeigen WWW
« Antwort #12 am: April 16, 2009, 09:37:56 »

Ich würds so probieren

Zitat
Dim cp as cpoint

.....
Set cp = clay.GetRandomPoint(1)

claynew.InsertGeoPoint cp.X, cp.Y
clay ist die "PLZ - Vorlage"
claynew der Punktelayer
Gespeichert

Follow RegioGraph on Twitter
http://twitter.com/regiograph
SiRo
Newbie
*
Beiträge: 39


174263400
Profil anzeigen
« 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
Administrator
Hero Member
*****
Beiträge: 809


439627146
Profil anzeigen WWW
« 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

Follow RegioGraph on Twitter
http://twitter.com/regiograph
Seiten: [1] 2
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2007, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS