<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Problem using PYODBC in ArcGIS script in ArcGIS Spatial Analyst Questions</title>
    <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746129#M10798</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;pyodbc and ArcGIS do not play well together.&amp;nbsp; I get the same problem described here, run once ok, then crash on the 2nd run.&amp;nbsp; There are 2 workarounds that I've found.&amp;nbsp; 1st, run the geoprocessing tool out of process.&amp;nbsp; I don't like this option, since it slows things down considerably.&amp;nbsp; 2nd is simply to import pyodbc into the Python window global namespace when you start Arcmap or ArcCatalog.&amp;nbsp; For some reason when that's done, any tool using pyodbc will run as many times as needed.&amp;nbsp; You can do this automatically when arcmap or arccatalog starts (if it starts with the Python window open) by setting the PYTHONSTARTUP environment variable to a startup script.&amp;nbsp; Here's the pertinent part of my startup script:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
if __name__ == '__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp; import os, sys
&amp;nbsp;&amp;nbsp;&amp;nbsp; e = sys.executable.lower()&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if 'arcmap.exe' in e or 'arccatalog.exe' in e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; import pyodbc
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main()
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;A better way would be to do this with the code in the tool script, but I haven't figured a way how to do it.&amp;nbsp; And better still would be for our ESRI guys to fix the conflict.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Mike&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 12 Dec 2021 07:44:22 GMT</pubDate>
    <dc:creator>MikeHunter</dc:creator>
    <dc:date>2021-12-12T07:44:22Z</dc:date>
    <item>
      <title>Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746123#M10792</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I am having problems using a python script running as a tool in ArcToolbox (running from ArcMap 9.3).&amp;nbsp; The script uses the PYODBC connector to use SQL to do summarization of data on an input geodataset.&amp;nbsp; When I run it through IDLE, it works perfectly.&amp;nbsp; When I use it as a tool, loading the inputs through the ArcToolbox, the script runs through several of my loops (for various zones, then classes), but then simply stops.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have many gp.AddMessage messages added to track when the script crashes.&amp;nbsp; The SQL that operates just before the crash works fine if I use it outside the script, so it isn't a problem with the SQL statement.&amp;nbsp; I have changed it to explicitly open and close the connection in each 'zone' loop, just in case it was a memory leak problem, but that has not changed the outcome at all.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Unfortunately, when it crashes, it leaves the pyodbc connection open, which means I have to logout to close it down.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there some programming convention in python or pyodbc that I am missing that might solve this?&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for your help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Jessie&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Script (pyodbc connection stuff starts on line 203):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;# ---------------------------------------------------------------------------&lt;BR /&gt;&lt;BR /&gt;import sys, string, os, arcgisscripting&lt;BR /&gt;import pyodbc&lt;BR /&gt;&lt;BR /&gt;gp = arcgisscripting.create()&lt;BR /&gt;gp.CheckOutExtension("spatial")&lt;BR /&gt;gp.AddToolbox("C:/Program Files (x86)/ArcGIS/ArcToolbox/Toolboxes/Spatial Analyst Tools.tbx")&lt;BR /&gt;gp.AddToolbox("C:/Program Files (x86)/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx")&lt;BR /&gt;&lt;BR /&gt;# What features you want to tabulate &lt;BR /&gt;FeaturesToTabulate = 'X:\\TableofFeatures.mdb\\FeatureTable'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;# Must be a valid classification table for this raster (all fields in the SQL statements need to be valid)&lt;BR /&gt;Classification_Table = 'X:\\ClassificationTables\\SimpleClassTbl.dbf'&lt;BR /&gt;Results_Geodatabase = 'U:\\CRUNCH\\TestTabProgram.mdb'&lt;BR /&gt;Tabulated_Area_Table = "TblTestSimple"&lt;BR /&gt;&lt;BR /&gt;FieldtoTabulate = 'COUNT'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #This the field that will be summarized &lt;BR /&gt;TabulationMultiplier = 100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # This is a float(!) multiplier in case of a raster COUNT - * Cell size for example&lt;BR /&gt;&lt;BR /&gt;TabByZoneField = "True"&lt;BR /&gt;Zone_field = 'WTRSHD_ID'&lt;BR /&gt;WholeZoneName = 'WholeTable'&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;# GUI entries&amp;nbsp; (shortened for forum posting)&lt;BR /&gt;FeatToTab&amp;nbsp; = FeaturesToTabulate&lt;BR /&gt;ClassTbl&amp;nbsp; = Classification_Table&lt;BR /&gt;TabGeoDB&amp;nbsp; = Results_Geodatabase&lt;BR /&gt;TabTbl&amp;nbsp; = Tabulated_Area_Table&lt;BR /&gt;FldtoTab&amp;nbsp; = FieldtoTabulate&lt;BR /&gt;TabMult&amp;nbsp; = float(TabulationMultiplier)&lt;BR /&gt;TabByZone&amp;nbsp; = TabByZoneField&lt;BR /&gt;ZoneFld&amp;nbsp; = Zone_field&lt;BR /&gt;AltZone&amp;nbsp; = WholeZoneName&lt;BR /&gt;&lt;BR /&gt;# Make new tabulated table&lt;BR /&gt;geodbname = TabGeoDB.split("\\")[len(TabGeoDB.split("\\"))-1]&lt;BR /&gt;geodbpath = TabGeoDB[:len(TabGeoDB)-len(geodbname)]&lt;BR /&gt;if not(os.path.exists(TabGeoDB)):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.CreatePersonalGDB_management(geodbpath, geodbname)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;try:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.CreateTable(TabGeoDB,TabTbl)&lt;BR /&gt;except:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddMessage("Table already exists, please rename the output table or delete the existing table.")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Output table already exists."&lt;BR /&gt;gp.GetMessages()&lt;BR /&gt;TabGeoDBTbl = TabGeoDB + "/" + TabTbl&lt;BR /&gt;&lt;BR /&gt;# Get ClassName and SQL Expression lists&lt;BR /&gt;rows = gp.SearchCursor(ClassTbl,"","","","")&lt;BR /&gt;row = rows.next()&lt;BR /&gt;&lt;BR /&gt;ClassNmList = [row.GetValue("ClassNm")]&lt;BR /&gt;SQLExprList = [row.GetValue("SQLExpr")]&lt;BR /&gt;row = rows.next()&lt;BR /&gt;&lt;BR /&gt;while row:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; theclass = row.GetValue("ClassNm")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQLexp = row.GetValue("SQLExpr")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClassNmList.append(theclass)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQLExprList.append(SQLexp)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; row = rows.next()&lt;BR /&gt;del row, rows&lt;BR /&gt;&lt;BR /&gt;# Copy the attribute table or stand-alone table that is being tabulated into the Tabulation Geodatabase.&lt;BR /&gt;fullname = gp.ParseTableName(os.path.basename(FeatToTab))&lt;BR /&gt;nameList = fullname.split(",")&lt;BR /&gt;FeatToTabTbl = nameList[2].split(".")[0].strip()&lt;BR /&gt;#print FeatToTabTbl&lt;BR /&gt;&lt;BR /&gt;if FldtoTab.lower() == "count":&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FldtoTab = "COUNT_"&lt;BR /&gt;&lt;BR /&gt;gp.OverwriteOutput = 1&lt;BR /&gt;#May Need to make a table view for raster feature sets&lt;BR /&gt;lt = ["rasterdataset","rasterband"]&lt;BR /&gt;try:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dsc = gp.describe(FeatToTab)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if string.lower(dsc.DatasetType) in lt:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TblView = gp.MakeTableView_management(FeatToTab,FeatToTabTbl)&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.CopyRows_management(TblView, TabGeoDB + '\\' + FeatToTabTbl)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TblView = TabGeoDB + '\\' + FeatToTabTbl&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.CopyRows_management(FeatToTab, TabGeoDB + '\\' + FeatToTabTbl)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; del dsc&lt;BR /&gt;except:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.GetMessages()&lt;BR /&gt;gp.OverwriteOutput = 0&lt;BR /&gt;gp.GetMessages()&lt;BR /&gt;gp.AddMessage("")&lt;BR /&gt;&lt;BR /&gt;try:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if TabByZone == "True" or TabByZone == "true":&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Get Zone List&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zrows = gp.SearchCursor(TblView,"","","",str(ZoneFld) + " A")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zrow = zrows.next()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zonelast = zrow.GetValue(ZoneFld)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZoneList = [zonelast]&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zrow = zrows.next()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxlen = len(zonelast)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while zrow:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zone = zrow.GetValue(ZoneFld)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if zone == zonelast:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zrow = zrows.next()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZoneList.append(zone)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zonelast = zone&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zrow = zrows.next()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(zone)&amp;gt;maxlen:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxlen = len(zone)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del zrow, zrows&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fields = gp.ListFields(TblView)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; field = fields.next()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while field:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if field.Name == ZoneFld:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zonefldtype = field.Type&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; field = fields.next()&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Begin the tabulation file with a zone ID and remove the auto-generated "Field1"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if zonefldtype == "String":&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddField_management(TabGeoDBTbl,"ZoneID","Text",maxlen+4) &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddField_management(TabGeoDBTbl,"ZoneID",zonefldtype)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.DeleteField_management(TabGeoDBTbl,"Field1")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddField_management(TabGeoDBTbl,"TOTTABAREA","Long")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.GetMessages()&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Add field for Class Name in the Classification Table&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for theclass in ClassNmList:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddField_management(TabGeoDBTbl,theclass,"Long")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except: gp.GetMessages()&amp;nbsp; #Try-Except for debug, if already added&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Open the ODBC Connection to the Personal Geodatabase&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DBfile = TabGeoDB&amp;nbsp; #'/data/MSAccess/Music_Library.mdb'&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ='+DBfile)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cursor = conn.cursor()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddMessage("Connection opened")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print gp.GetMessages()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddMessage("Problem Occurred with the ODBC connection.")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del gp&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; classedtotarea = 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Begin the tabulation table by inserting the ZoneID's&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQL = "SELECT * FROM " + TabTbl&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tblcnt = cursor.execute(SQL).rowcount&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if tblcnt &amp;gt;0:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Tab Table already populated with zones."&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQL = "INSERT INTO " + TabTbl + " ( ZoneID ) " \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "SELECT " + FeatToTabTbl + "." + ZoneFld + " " \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "FROM " + FeatToTabTbl + " " \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "GROUP BY " + FeatToTabTbl + "." + ZoneFld + " " \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "ORDER BY " + FeatToTabTbl + "." + ZoneFld + ";"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cursor.execute(SQL)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.commit()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddMessage("Select Zones into Tab Table Complete.\n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Process the features to tabulate, looping through each Class/SQL Expression&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for zone in ZoneList:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Working on zone:&amp;nbsp; " + str(zone)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddMessage("Working on zone:&amp;nbsp; " + str(zone))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if zonefldtype == "String":&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zone = "'" + zone + "'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Get the total area for the zone&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whereclause = ZoneFld + ' = ' + zone&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; totSQL = "SELECT Sum(" + FldtoTab + ") as TOTCOUNT " + \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "FROM " + FeatToTabTbl + " " + \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "WHERE " + whereclause + ";"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print totSQL&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddMessage(str(totSQL))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tottabarea = cursor.execute(totSQL).fetchone()[0]&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if tottabarea is None:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tottabarea = 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tottabarea = tottabarea * TabMult&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; insertSQL = "UPDATE " + TabTbl + " " + \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "SET TOTTABAREA =" + str(tottabarea) + " " + \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "WHERE ZoneID = " + zone + ";"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cursor.execute(insertSQL)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.commit()&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for theclass in ClassNmList:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQL = SQLExprList&lt;I&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = i+1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Create the summary by this class&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whereclause = "(" + SQL.replace('"','') + ") AND " + ZoneFld + ' = ' + zone&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; totSQL = "SELECT Sum(" + FldtoTab + ") as TOTCOUNT " + \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "FROM " + FeatToTabTbl + " " + \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "WHERE " + whereclause + ";"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddMessage(str(totSQL))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; totarea = cursor.execute(totSQL).fetchone()[0]&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddMessage("Class area is = " + str(totarea))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if totarea is None:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; totarea = 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; totarea = totarea * TabMult&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Add the insert SQL to put the results into the Tabulation Table&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; insertSQL = "UPDATE " + TabTbl + " " + \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "SET " + theclass + "=" + str(totarea) + " " + \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "WHERE ZoneID = " + zone + ";"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cursor.execute(insertSQL)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.commit()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddMessage("Class complete\n")&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.AddMessage("Completed tabulation table.")&lt;BR /&gt;&lt;BR /&gt;except:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gp.GetMessages()&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;try:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cursor.close()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.close()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; del conn, cursor&lt;BR /&gt;except: pass&lt;BR /&gt;del gp&lt;/I&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Jun 2010 14:27:43 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746123#M10792</guid>
      <dc:creator>JessicaBhalerao</dc:creator>
      <dc:date>2010-06-24T14:27:43Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746124#M10793</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Regrettably there are some differences in running scripts in IDLE, Pythonwin, ArcCatalog and ArcMap that cause some things to just not run. I just open up my scripts in Pythonwin and run them from there, since that is where they were debugged.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It may be worth changing to 9.3 format if you have later versions. It may be related to the gp processor not releasing locks, especially the AddField tool. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;There used to be a gp.RefreshCatalog(database) command that might help, this has mysteriously disappeared in documentation in later version because its 'not needed', but you might try that before you open the ODBC cursor.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;There are bugs in Python modules too, so upgrading to the latest version of ArcGIS forces an upgrade of Python as well.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 25 Jun 2010 10:16:54 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746124#M10793</guid>
      <dc:creator>KimOllivier</dc:creator>
      <dc:date>2010-06-25T10:16:54Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746125#M10794</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Dear kimo - Thanks for your reply.&amp;nbsp; I did try adding the RefreshCatalog command, which is good advice that I will use in other scripts.&amp;nbsp; Unfortunately that didn't solve the problem, so I guess we can just commiserate on that!&amp;nbsp; The script still runs perfectly when operated through Python IDLE (v2.4), but simply stops doing any more SQL calculations after having done maybe 15-20 of the operations, and says it's done.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If I ever have it work after new ArcGIS or pyodbc updates, I'll try and remember to post an update here.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;J&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Jul 2010 13:33:59 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746125#M10794</guid>
      <dc:creator>JessicaBhalerao</dc:creator>
      <dc:date>2010-07-22T13:33:59Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746126#M10795</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi there,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I thought I would reply to this thread as I came across it when searching on a problem resolution.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As mentioned before there are conflicts between pyodbc and the 9.3 python geoprocessor.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The problem I encounter was when I added fields using pyodbc there were not recognised by the setvalue function in the geoprocessor.&amp;nbsp; I was adding the fields using pyodbc as the AddField command was causing Pythoin to crash.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As a test of this I used the below code with a field added using the pyodbc module and one added using the gp function:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Field = "x"+str(Con)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ='+Database, autocommit="True")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;cursor = conn.cursor()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;AddField = "ALTER TABLE " + os.path.basename(Results) + " ADD COLUMN " + Field +" NUMBER;"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;cursor.execute(AddField)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;conn.commit()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;conn.close()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del conn &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Field = "xx"+str(Con)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;gp.AddField_management(Results, Field, "Double", "4","", "", "", "", "", "")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;sFields = gp.ListFields(Results)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for field in sFields:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; print field.Name, field.Type&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The only fields listed by the list fields function were those from the second adding of the fields (the geoprocessor command), the ones beginning "xx".&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope this is useful for any one who has similar problems and if any solutions exist I would love to hear about them.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Sep 2010 11:58:00 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746126#M10795</guid>
      <dc:creator>neilwebster</dc:creator>
      <dc:date>2010-09-17T11:58:00Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746127#M10796</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,I encounter the same problem as yours,the difference is that I use the ArcGIS 10&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Do you solve the problem?Can you enjoy your experience?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Jul 2011 06:40:45 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746127#M10796</guid>
      <dc:creator>billchuang</dc:creator>
      <dc:date>2011-07-28T06:40:45Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746128#M10797</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi!&lt;/SPAN&gt;&lt;BR /&gt;&lt;STRONG&gt;Same problem for me!&lt;/STRONG&gt;&lt;BR /&gt;&lt;UL&gt;&lt;BR /&gt;&lt;LI&gt;Runs perfectly in my IDE (Eclipse, configured to use the version of Python that come with ArccGIS);&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Works the first time the geoprocessing is invoked;&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Crash the second (and next) times it is invoked&lt;/LI&gt;&lt;BR /&gt;&lt;/UL&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is a minimal code snippet that allow to reproduce the problem:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
import arcpy
import pyodbc

inputString = arcpy.GetParameterAsText(0)
arcpy.SetParameterAsText(1, 'echo:'+inputString)
try:
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("START")
&amp;nbsp;&amp;nbsp;&amp;nbsp; conn=pyodbc.connect('DRIVER={SQL Server};SERVER=DGENV-LPD.aris-lux.lan\LPD;DATABASE=lpd_proto;UID=lpd_proto;PWD=lpd_proto')
&amp;nbsp;&amp;nbsp;&amp;nbsp; cursor = conn.cursor()
&amp;nbsp;&amp;nbsp;&amp;nbsp; cursor.execute("INSERT INTO IMPORT_BATCH (batchDate,lifeProjectNumber,archiveName,stage) VALUES ('2012-03-26 17:16:37.4900000','Minimal test','Grrrrr...','TEMP')")
&amp;nbsp;&amp;nbsp;&amp;nbsp; r=cursor.execute("SELECT @@IDENTITY")
&amp;nbsp;&amp;nbsp;&amp;nbsp; f=cursor.fetchone()
&amp;nbsp;&amp;nbsp;&amp;nbsp; cursor.close()
&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.commit()
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("DONE")

except Exception,e:
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("e="+str(e))

finally:
&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.close() 
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It is wrapped in a toolbox which has one input/output String parameter.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here are the output of the script (when invoked from Firefox, as REST geoprocessing service)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN style="text-decoration:underline;"&gt;First execution : &lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
Results:

&amp;nbsp;&amp;nbsp;&amp;nbsp; out: echo:test

Messages:

&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: Executing (InputScriptLabel): InputScript test
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: Start Time: Tue Mar 27 11:27:04 2012
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: Running script InputScript...
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: START
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: DONE
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: Completed script InputScript...
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: Succeeded at Tue Mar 27 11:27:04 2012 (Elapsed Time: 0.00 seconds)
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN style="text-decoration:underline;"&gt;Next executions : &lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
Results:

&amp;nbsp;&amp;nbsp;&amp;nbsp; out: echo:test

Messages:

&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: Executing (InputScriptLabel): InputScript test
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: Start Time: Tue Mar 27 11:23:31 2012
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: Running script InputScript...
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: START
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: e='NoneType' object is not callable
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: Completed script InputScript...
&amp;nbsp;&amp;nbsp;&amp;nbsp; esriJobMessageTypeInformative: Succeeded at Tue Mar 27 11:23:31 2012 (Elapsed Time: 0.00 seconds)
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Using the old school debbuging technique, using log (arcpy.AddMessage actually), I found out the the exception is thrown by "f=cursor.fetchone()". Removing this instruction prevents the service to crash ... but does not longer do the work ... &lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My configuration is as follow:&lt;/SPAN&gt;&lt;BR /&gt;&lt;UL&gt;&lt;BR /&gt;&lt;LI&gt;Windows Server 2008 R2 Standart (64bit)&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;ArcGIS Server 10&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Python 2.6 (bundled version)&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;pyodbc-3.0.2 32b (pyodbc-3.0.2.win32-py2.6.exe, because 64bit does not work because of a "Not a valid Win32 application" error).&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Microsoft SQL Server 2008 R2 (64b)&lt;/LI&gt;&lt;BR /&gt;&lt;/UL&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Help would be very appreciated!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks a lot,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Octave&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 07:44:18 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746128#M10797</guid>
      <dc:creator>DetailleOctave</dc:creator>
      <dc:date>2021-12-12T07:44:18Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746129#M10798</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;pyodbc and ArcGIS do not play well together.&amp;nbsp; I get the same problem described here, run once ok, then crash on the 2nd run.&amp;nbsp; There are 2 workarounds that I've found.&amp;nbsp; 1st, run the geoprocessing tool out of process.&amp;nbsp; I don't like this option, since it slows things down considerably.&amp;nbsp; 2nd is simply to import pyodbc into the Python window global namespace when you start Arcmap or ArcCatalog.&amp;nbsp; For some reason when that's done, any tool using pyodbc will run as many times as needed.&amp;nbsp; You can do this automatically when arcmap or arccatalog starts (if it starts with the Python window open) by setting the PYTHONSTARTUP environment variable to a startup script.&amp;nbsp; Here's the pertinent part of my startup script:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
if __name__ == '__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp; import os, sys
&amp;nbsp;&amp;nbsp;&amp;nbsp; e = sys.executable.lower()&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if 'arcmap.exe' in e or 'arccatalog.exe' in e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; import pyodbc
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main()
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;A better way would be to do this with the code in the tool script, but I haven't figured a way how to do it.&amp;nbsp; And better still would be for our ESRI guys to fix the conflict.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Mike&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 07:44:22 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746129#M10798</guid>
      <dc:creator>MikeHunter</dc:creator>
      <dc:date>2021-12-12T07:44:22Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746130#M10799</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I�??ve been struggling with the same issue. I have not been able to make my script run properly when deploying them as geoprocessing services using the pyodbc module. To me it seems like installing PyWin32 and using the odbc module is a better approach. Pyodbc and odbc is very alike, the only changes I had to make to my scripts were to &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import odbc &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;instead of &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import pyodbc&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;and change&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sqlCnn = pyodbc.connect(&amp;lt;connection string&amp;gt;)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;to&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sqlCnn = odbc.odbc(&amp;lt;connection string&amp;gt;)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-Sigurd&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 02 Aug 2012 06:28:35 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746130#M10799</guid>
      <dc:creator>SigurdHaagensen</dc:creator>
      <dc:date>2012-08-02T06:28:35Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746131#M10800</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;BR /&gt;mahunter243&lt;BR /&gt;&lt;BR /&gt;pyodbc and ArcGIS do not play well together. I get the same problem described here, run once ok, then crash on the 2nd run. There are 2 workarounds that I've found. 1st, run the geoprocessing tool out of process. I don't like this option, since it slows things down considerably. 2nd is simply to import pyodbc into the Python window global namespace when you start Arcmap or ArcCatalog. For some reason when that's done, any tool using pyodbc will run as many times as needed. You can do this automatically when arcmap or arccatalog starts (if it starts with the Python window open) by setting the PYTHONSTARTUP environment variable to a startup script. Here's the pertinent part of my startup script:&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt; 
if __name__ == '__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp; import os, sys
&amp;nbsp;&amp;nbsp;&amp;nbsp; e = sys.executable.lower()&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if 'arcmap.exe' in e or 'arccatalog.exe' in e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; import pyodbc
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main()
&lt;/PRE&gt;&lt;BR /&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm running into the same problem. Unfortunately I can't run the script out of process because I'm sharing the tool as a GP service and when I run the GP service (with the tool out of process) I get a generic "ERROR 704:&amp;nbsp; Something is wrong in the script" message. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I don't think your second solution would work for me either since I won't be running the tool from ArcMap or ArcCatatalog.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;I�??ve been struggling with the same issue. I have not been able to make my script run properly when deploying them as geoprocessing services using the pyodbc module. To me it seems like installing PyWin32 and using the odbc module is a better approach. Pyodbc and odbc is very alike, &lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hmm.&amp;nbsp; I'll try the Python for Windows Extensions package and report back &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 07:44:24 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746131#M10800</guid>
      <dc:creator>SamuelHenderson</dc:creator>
      <dc:date>2021-12-12T07:44:24Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746132#M10801</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does anyone have experience with pyodbc in ArcGIS 10.1 Server on Linux?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I made a short script for testing and published it as a GP Service.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;import arcpy, pyodbc

conn = pyodbc.connect('DSN=&amp;lt;DSN_name&amp;gt;;PWD=&amp;lt;Password&amp;gt;')
conn.autocommit = True
cursor = conn.cursor()
cursor.execute('SET CHAINED OFF')

cursor.execute('{call Sybase_Stored_proc()}')
rows = cursor.fetchall()
arcpy.AddMessage(len(rows))

cursor.close()
conn.close()
del rows, cursor, conn&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;GP Service runs successfully first time and fails next two times.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Second time an error message in ArcGIS Server Manager Logs tells:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[INDENT]&lt;/SPAN&gt;&lt;SPAN style="font-style: italic; font-size: 1;"&gt;Traceback (most recent call last): File "/opt/arcgis/server/usr/directories/arcgissystem/arcgisinput/dbconSybase.GPServer/extracted/v101/work/dbconSybase.py", line 9, in File "C:\Python27\ArcGISx6410.1\lib\decimal.py", line 543, in __new__ m = _parser(value.strip()) TypeError: 'NoneType' object is not callable Failed to execute (dbconSybase). Failed to execute (dbconSybase).&lt;/SPAN&gt;&lt;SPAN&gt;[/INDENT]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Third time an error message in ArcGIS Server Manager Logs tells:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[INDENT]&lt;/SPAN&gt;&lt;SPAN style="font-style: italic; font-size: 1;"&gt;The containing process for 'dbconSybase' job 'jf9cfffae54d142d688d35d96a2457981' has crashed.&lt;/SPAN&gt;&lt;SPAN&gt;[/INDENT]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Following Mike's recommendation to import pyodbc into the Python window global namespace in Arcmap 10.1 before running script tool helps to get rid of the problem in ArcGIS Desktop, but I haven't found a solution for ArcGIS Server Geoprocessing Service.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Our server configuration is:&lt;/SPAN&gt;&lt;BR /&gt;&lt;UL&gt;&lt;BR /&gt;&lt;LI&gt;Linux 2.6.32-358.0.1.el6.x86_64 x86_64 (CentOS release 6.4) &lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;ArcGIS Server 10.1&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Python 2.7&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;pyodbc-3.0.6.win-amd64-py2.7 (under "/opt/arcgis/server/framework/runtime/.wine/drive_c/Python27/ArcGISx6410.1/lib/site-packages/)&lt;/LI&gt;&lt;BR /&gt;&lt;/UL&gt;&lt;SPAN&gt;It would be nice to hear the suggestions from ESRI people. Is there something missing in the code we use for the GP Service script? Would it be better to forget pyodbc and to use something else to connect Sybase ASE database from GP Service?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks in advance,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Ave Vill&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 07:44:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746132#M10801</guid>
      <dc:creator>AveVill1</dc:creator>
      <dc:date>2021-12-12T07:44:27Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746133#M10802</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I have the same problem, any news about a possible bug for this pyodbc behavior??&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Also I tried to use odbc module, it works fine, but don't have .rowcount() function and the documentation for odbc is minimun vs pyodbc.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;help!!!!!!!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 31 May 2013 20:41:18 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746133#M10802</guid>
      <dc:creator>JoseZambrana</dc:creator>
      <dc:date>2013-05-31T20:41:18Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746134#M10803</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I have similar problems with pyodbc module in ArcGIS Desktop and Server 10.1 SP1, but tried module pypyodbc (&lt;/SPAN&gt;&lt;A href="http://code.google.com/p/pypyodbc"&gt;http://code.google.com/p/pypyodbc&lt;/A&gt;&lt;SPAN&gt;) and it seems ok even in GP service.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Kuba&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Jul 2013 06:14:19 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746134#M10803</guid>
      <dc:creator>JakubOrálek</dc:creator>
      <dc:date>2013-07-17T06:14:19Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746135#M10804</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the tip on the pypyodbc. Who would have guessed the pyodbc wouldn't work even for a simple select statement.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Aug 2014 17:08:33 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746135#M10804</guid>
      <dc:creator>DorothyMortenson</dc:creator>
      <dc:date>2014-08-22T17:08:33Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746136#M10805</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have used the pypyodbc for one project and it seems to be ok.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Next project - script works fine as a python script. Works fine as a custom ArcTool pointing to the script. Turn it into a geoprocessing service and it fails at the cursor.execute line. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Oct 2014 15:28:30 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746136#M10805</guid>
      <dc:creator>DorothyMortenson</dc:creator>
      <dc:date>2014-10-15T15:28:30Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746137#M10806</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, we had a similar issue when running a python toolbox tool in ArcMap that used pyodbc to run a stored procedure on Sql Server then present the results into ArcMap. What was happening was ArcMap was holding open the sql processes that the stored procs ran on which created schema locks and stopped the tool running subsequent times in the same ArcMap session (the tool would just hang because of the schema lock).&lt;BR /&gt;The fix for us was to type RETURN 0 at the end of our stored proc which I guess tells ArcMap that the stored proc has completed and the process can be closed.&lt;BR /&gt;If you are not running stored procs then the pyodbc documentation suggests closing your connection and deleting the variable.&lt;BR /&gt;for example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;gt;&amp;gt; &lt;SPAN class="pln"&gt;cnxn &lt;/SPAN&gt;&lt;SPAN class="pun" style="color: #666600;"&gt;=&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; pyodbc&lt;/SPAN&gt;&lt;SPAN class="pun" style="color: #666600;"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;connect&lt;/SPAN&gt;&lt;SPAN class="pun" style="color: #666600;"&gt;(&lt;/SPAN&gt;&lt;SPAN class="str" style="color: #008800;"&gt;'DRIVER={SQL Server};SERVER=localhost;DATABASE=testdb;UID=me;PWD=pass'&lt;/SPAN&gt;&lt;SPAN class="pun" style="color: #666600;"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="pun" style="color: #666600;"&gt;&amp;gt;&amp;gt; # Run your sql query&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;gt;&amp;gt; cnxn.close()&lt;/P&gt;&lt;P&gt;&amp;gt;&amp;gt; del cnxn&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 21:07:15 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746137#M10806</guid>
      <dc:creator>NicholasBraaksma</dc:creator>
      <dc:date>2014-11-06T21:07:15Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746138#M10807</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I had many of the symptoms as described above on 10.3 - in particular every 2nd GPService exec would crash.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I resolved this issue by switching from pyodbc to pypyodbc (i.e. a pure python implementation &lt;A href="https://code.google.com/p/pypyodbc/" title="https://code.google.com/p/pypyodbc/"&gt;pypyodbc - A Pure Python ODBC Library based on ctypes - Google Project Hosting&lt;/A&gt; ). Note that there are differences between these implementations. Good luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Mar 2015 05:36:29 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746138#M10807</guid>
      <dc:creator>AndrewHughes</dc:creator>
      <dc:date>2015-03-05T05:36:29Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746139#M10808</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I ran into this issue as well with pyodbc when running a tool script within a "CURRENT" map document.&amp;nbsp; The tool script would work fine the first time but any additional attempt to run would cause ArcMap to hang and crash.&amp;nbsp; I made sure to close the cursor and connection but it didn't make a difference.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In my case I only had to change two minimal lines of code to go with pypyodbc instead.&amp;nbsp; All I had to change was the module import to pypyodbc and then the connect method from pyodbc.connect() to pypyodbc.connect().&amp;nbsp; The cursor, execute, and fetchall methods are the same.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 Jul 2015 14:52:21 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746139#M10808</guid>
      <dc:creator>ChadStidham1</dc:creator>
      <dc:date>2015-07-01T14:52:21Z</dc:date>
    </item>
    <item>
      <title>Re: Problem using PYODBC in ArcGIS script</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746140#M10809</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I was experiencing almost the exact same situation as &lt;A href="https://community.esri.com/migrated-users/25535"&gt;Detaille Octave&lt;/A&gt;‌. A GP task that ran successfully the first time and then failed on subsequent runs. Switching to `pypyodbc` fixed the issue for me. THANKS!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Jul 2019 18:27:37 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/problem-using-pyodbc-in-arcgis-script/m-p/746140#M10809</guid>
      <dc:creator>ScottDavis</dc:creator>
      <dc:date>2019-07-02T18:27:37Z</dc:date>
    </item>
  </channel>
</rss>

