Abarbeiten einer Liste mittels Variablen?
Verfasst: Montag 19. November 2007, 15:47
Hallo,
ich habe zwei Listen in Python. In der einen Liste (LiName) stehen Nachnamen in der anderen Liste (LiAnzahl) die Anzahl der Nachnamen die an einem Ort/Stadt vorkommen.
Weiterhin habe ich eine Access Datenbank in der ebenfalls Nachnamen und deren Anzahl gespeichert sind. Nun möchte ich die alten Werte aus der DB mit den neuen Werten aus der Python Liste ersetzen.
Dafür habe ich mir folgenden Python-Code überlegt:
Sorry, die Formatierung im Quellcode stimmt nicht ganz. Bekomme ich nicht besser hin.
Folgende Fehlermeldung erscheint als Ergebnis:
Wenn ich allerdings die Variablen weg lasse und die Werte direkt in den SQL Befehl eintrage, funktioniert das Script.
Kann mir jemand sagen welchen Fehler ich gemacht habe?
Wie bekomme ich es hin, dass anstatt den Werten Variablen stehen?
Momentan wird nur ein Wert aktualisiert. Später möchte ich das ganze noch mit einer Schleife erweitern damit alle Werte aktualisiert werden.
Im voraus schon mal Danke.
Aquerias
ich habe zwei Listen in Python. In der einen Liste (LiName) stehen Nachnamen in der anderen Liste (LiAnzahl) die Anzahl der Nachnamen die an einem Ort/Stadt vorkommen.
Weiterhin habe ich eine Access Datenbank in der ebenfalls Nachnamen und deren Anzahl gespeichert sind. Nun möchte ich die alten Werte aus der DB mit den neuen Werten aus der Python Liste ersetzen.
Dafür habe ich mir folgenden Python-Code überlegt:
Code: Alles auswählen
try:
import sys, string, os, arcgisscripting, pyodbc, random, win32com.client
conn = win32com.client.Dispatch(r'ADODB.Connection')
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\\Test.mdb;'
connect = conn.Open(DSN)
LiN = LiName[0]
print type(LiN)
LiA = LiAnzahl[0]
print type(LiA)
def AccUp(connect):
sql = """
UPDATE TabA INNER JOIN TabB ON TabA.ID =
TabB.StadtID SET TabB.Anzahl = ? WHERE (((TabB.Index)=12) AND ((TabA.Nachname)= ?))
"""
conn.Execute(sql, LiN, LiA)
AccUp(connect)
except IOError:
print "Fehler"
Folgende Fehlermeldung erscheint als Ergebnis:
Code: Alles auswählen
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
File "AccessUpdate3.py", line 59, in ?
AccUp(connect)
File "AccessUpdate3.py", line 57, in AccUp
conn.Execute(sql, LiN, LiA)
File "<COMObject ADODB.Connection>", line 3, in Execute
File "C:\Python24\lib\site-packages\win32com\client\dynamic.py", line 258, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
com_error: (-2147352567, 'Ausnahmefehler aufgetreten.', (0, 'Microsoft JET Database Engine', 'F\xfcr mindestens einen erforderlichen Parameter wurde kein Wert angegeben.', None, 5000000, -2147217904), None)
Wenn ich allerdings die Variablen weg lasse und die Werte direkt in den SQL Befehl eintrage, funktioniert das Script.
Code: Alles auswählen
try:
import sys, string, os, arcgisscripting, pyodbc, random, win32com.client
conn = win32com.client.Dispatch(r'ADODB.Connection')
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\\Test.mdb;'
connect = conn.Open(DSN)
def AccUp(connect):
sql = """
UPDATE TabA INNER JOIN TabB ON TabA.ID =
TabB.StadtID SET TabB.Anzahl = 5
WHERE (((TabB.Index)=12) AND
((TabA.Nachname)= 'Mueller'))
"""
conn.Execute(sql)
AccUp(connect)
except IOError:
print "Fehler"
Wie bekomme ich es hin, dass anstatt den Werten Variablen stehen?
Momentan wird nur ein Wert aktualisiert. Später möchte ich das ganze noch mit einer Schleife erweitern damit alle Werte aktualisiert werden.
Im voraus schon mal Danke.
Aquerias