[gelöst]... "RuntimeError: An invalid SQL statement

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

Ich suche gerade verzweifelt seit nun mehr 2 STunden eine Lösung und finde sie nicht.

folgendes Script funktionierte schon mal, und heute aus heiterem Himmer nicht mehr:

Code: Alles auswählen

def join_dbf(dbf_file,fc, fc_name):
    gp.AddField_management(fc, "Datum", "DATE")
    gp.MakeFeatureLayer(fc, "lyr")
    gp.AddJoin_management("lyr", "AGS", dbf_file, "AGS")
    expression = '[%s.DATE_C]' %(fc_name[0:2])
    gp.CalculateField_management ("lyr", gp.describe(fc).name+".Datum", expression)
    gp.RemoveJoin_management("lyr",os.path.splitext(os.path.basename(dbf_file))[0])
    gp.delete("lyr")
Fehlermeldung:
RuntimeError:
An invalid SQL statement was used.
An invalid SQL statement was used. [bb]

..."bb" ist dabei das "Ergebnis" von gp.describe(fc).name
Die Funktion ist dabei folgender maßen aufgebaut:
gp.CalculateField_management (inputlayer, zu berechnende Spalte, was in die SPalte rein soll) - ganz grob formuliert
Ich hab dabei an meine Geodaten NUR ein dbf File gejoint, aus dem nun eine Spalte "übernommen" werden soll, in die Geodaten-Tabelle. Funktioniert leider nur über diese Funktion.

Seltsamer Weise, im gleichen Script, mache ich das ganze mit einem 2. dbf-File, welches immer das selbe ist und nicht variert:

Code: Alles auswählen

def join_dbf_ewz(dbf_file,bl,bl_name):
    gp.AddField_management(bl, "Einwohnerzahl", "Double")
    gp.MakeFeatureLayer(bl, "lyr")
    gp.AddJoin_management("lyr", "AGS_neu", dbf_file, "AGS")
    
    expression = '[EWZ.Gesamt]' 
    gp.CalculateField_management ("lyr", gp.describe(bl).name+".Einwohnerzahl", expression)
    gp.RemoveJoin_management("lyr",os.path.splitext(os.path.basename(dbf_file))[0])
    gp.delete("lyr")

    
Input Datensatz ist der gleiche, das "gp.describe(bl).name+".Spaltenname""
Daher kann das mit dem Ivalid SQL Statement [bb] nicht hinkommen.

Was sich unterscheidet ist die expression, einmal fest, einmal variabel, da in dem variablen Fall eben jedesmal ein anderes File gejoint wird.
Hat jemand zufällig eine Lösung parat, oder weiß, woran es liegt? Bin hier schon am Verzweifeln :(
Zuletzt geändert von meneliel am Dienstag 15. Januar 2008, 15:33, insgesamt 1-mal geändert.
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

print ist dein Freund :wink:

Lass dir mal, bevor du es an die Datenbank schickst, das komplett zusammengesetzte SQL-Statement ausgeben. Ich vermute, daß der variable Teil - aus welchen Gründen auch immer - nicht ganz so aussieht, wie du es erwartest, und daß deshalb ein ungültiges Statement zusammengesetzt wird. Achte auf solche Dinge wie Punkte, Kommata, Leer- und Anführungszeichen.
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

Hallo Jan,

Danke für die Antwort,

mein Freund print hat mir auch die zusammengesetzten SQL-Statements (die eigentlich nicht wirklich welche sind) ausgegeben und alles sah prima aus.

Daher war ich so verwundert.

Habe den Fehler gefunden. Nur das liebe ArcGisscripting Tool, schafft es nicht, eine richtige Fehlermeldung auszugeben - wie schon so manchmal.

Der Fehler lag wo ganz anders, nämlich im Eingangdatensatz. Hätte eine Fehlermeldung geben müssen wie: Input Dataset does not exists
Ich hatte beim Funktionsaufruf versehentlich nur Namen übergeben, ohne Pfad.... :oops:

Problem also gelöst.
Hab/Hatte zum Fehlequelle beheben, jetzt aus den 2 Funktionen nur noch eine gemacht, ist schöner nun :)
Antworten