I'm trying to transfer an access database table to Postgres.
I have created a Postgres table with the same fields as the access 
database.
I'm attempting to use the fields read from the access db to set up
parameters for insert into the Postgres db.
I get the error and traceback shown below.
Any suggestions on how to do this?  Thanks.

#### code fragment
srcRs = win32com.client.Dispatch(r'ADODB.Recordset')
srcStmt = 'Select * from [%s]' % srcTable
srcRs.Open(srcStmt,srcConn,1,3)
srcRs.MoveFirst()
dstStmt = dstStmt + ')'
dstCmd = win32com.client.Dispatch(r'ADODB.Command')
dstCmd.ActiveConnection = dstConn
dstCmd.Prepared = 1
dstCmd.CommandType = win32com.client.constants.adCmdText
dstCmd.CommandTimeout = 20
dstCmd.CommandText = dstStmtv
dstCmd.Execute(RecordsAffected=pythoncom.Empty,
                  
Parameters=parms,Options=win32com.client.constants.adCmdText)
parms = []
for ff in srcRs.Fields:
        parms.append(ff) 
dstCmd.Execute(RecordsAffected=pythoncom.Empty,Parameters=parms,Options=win32com.client.constants.adCmdText)

########### Error on Execute()
Traceback (most recent call last):
   File "<interactive input>", line 1, in ?
   File "E:\FoodBank\PyTools\adoXferJet2Sql.py", line 103, in ?
     stmt,count = xfer.xferTable(table,srcConn,dstConn)
   File "E:\FoodBank\PyTools\adoXferJet2Sql.py", line 90, in xferTable 
dstCmd.Execute(RecordsAffected=pythoncom.Empty,Parameters=parms,Options=win32com.client.constants.adCmdText)
   File 
"E:\Python21\win32com\gen_py\EF53050B-882E-4776-B643-EDA472E8E3F2x0x2x7.py", 
line 1746, in Execute
     return self._ApplyTypes_(0x5, 1, (9, 0), ((16396, 18), (16396, 17), 
(3, 49)), 'Execute', 
'{00000556-0000-0010-8000-00AA006D2EA4}',RecordsAffected, Parameters, 
Options)
   File "E:\Python21\win32com\client\__init__.py", line 343, in 
_ApplyTypes_
     return self._get_good_object_(apply(self._oleobj_.InvokeTypes, 
(dispid, 0, wFlags, retType, argTypes) + args), user, resultCLSID)
com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft OLE DB 
Provider for ODBC Drivers', 'Error while executing the query;\nERROR:  
array_in: Need to specify dimension', None, 0, -2147467259), None)


################# Full test Source code
rcsHeader = "$Header: 
/home/cvsroot/home/craig/swCommunityMinistry/winPyTools/adoXferJet2Sql.py,v 
1.5 2001/12/27 17:21:02 craig Exp $"
# execfile("E:\\FoodBank\\PyTools\\adoXferJet2Sql.py")
import win32com.client
import pythoncom

def sqlName( nameStr ):
     ss = nameStr.replace(" ","_")
     ss = ss.replace("#","Num")
     return ss

class AdoXferJet2Sql:
     def __init__(self):
         self.jetPath = None
         self.jetDsn = None
         self.jetConn = None
         self.tableList = []
         self.odbcDsn = None
         self.odbcConn = None
         return
     def setupJetSrc( self,jetPath ):
         self.jetPath = jetPath
         self.jetDsn = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=' + 
self.jetPath
         self.jetConn = win32com.client.Dispatch(r'ADODB.Connection')
         self.jetConn.Open(self.jetDsn)
         catalog = win32com.client.Dispatch('ADOX.Catalog')
         catalog.SetActiveConnection(self.jetConn)
         self.tableList = []
         for table in catalog.Tables:
             if table.Type == 'TABLE':
                 self.tableList.append(table.Name)
         return self.jetConn,self.tableList
     def setupOdbcDest( self,odbcDsn ):
         self.odbcDsn=odbcDsn
         self.odbcConn = win32com.client.Dispatch(r'ADODB.Connection')
         self.odbcConn.Open(self.odbcDsn)
         return self.odbcConn
     def xferTable(self,srcTable,srcConn,dstConn):
         srcFields = []
         srcRs = win32com.client.Dispatch(r'ADODB.Recordset')
         srcStmt = 'Select * from [%s]' % srcTable
         srcRs.Open(srcStmt,srcConn,1,3)
         if srcRs.EOF:
             print "AdoXferJet2Sql.xferTable() no rows in table", srcTable
             return
         srcRs.MoveFirst()
         srcFields = []
         for ff in srcRs.Fields:
             srcFields.append(ff.Name)
         dstFields = []
         for ff in srcFields:
             dstFields.append(sqlName(ff))
##        dstParms = []
##        for ff in srcRs.Fields:
##            newParm = win32com.client.Dispatch(r'ADODB.Parameter')
##            newParm.Direction = win32com.client.constants.adParamOutput
##            newParm.Type = ff.Type
##            newParm.Value = None
##            dstParms.append(newParm)
         dstStmt = 'Insert into %s (' % sqlName(srcTable)
         ii = 0
         for ff in dstFields:
             fmt = '%s'
             if ii > 0:
                 fmt = ',' + fmt
             dstStmt = dstStmt + (fmt % ff)
             ii = ii + 1
         dstStmt = dstStmt + ') Values ('
         ii = 0
         for ff in dstFields:
             if ii == 0:
                 dstStmt = dstStmt + '?'
             else:
                 dstStmt = dstStmt + ',?'
             ii = ii + 1
         dstStmt = dstStmt + ')'
         dstCmd = win32com.client.Dispatch(r'ADODB.Command')
         dstCmd.ActiveConnection = dstConn
         dstCmd.Prepared = 1
         dstCmd.CommandType = win32com.client.constants.adCmdText
         dstCmd.CommandTimeout = 20
         dstCmd.CommandText = dstStmt
##        for parm in dstParms:
##            dstCmd.Parameters.Append(parm)
         ii = 0
         while srcRs.EOF == 0:
             parms = []
             for ff in srcRs.Fields:
                 print 'record',ii,'parm',ff.Name,ff.Value
                 parms.append(ff)
             
dstCmd.Execute(RecordsAffected=pythoncom.Empty,Parameters=parms,Options=win32com.client.constants.adCmdText)
             ii = ii + 1
             if 1:
                 return dstStmt,ii # debug
             srcRs.MoveNext()
         return dstStmt,ii

if __name__ == '__main__':
     print "adoXferJet2Sql.py main here"
     xfer = AdoXferJet2Sql()
     srcConn,srcTables = 
xfer.setupJetSrc("E:\\FoodBank\\Export20011222\\Export20011222.mdb")
     dstConn = xfer.setupOdbcDest("FoodBankPG")  # ODBC DSN connected to 
PostgresDB database
     for table in srcTables:
         stmt,count = xfer.xferTable(table,srcConn,dstConn)
         if 1:
             break # debug
         
-- 
Craig H. Anderson
_______________________________________________
ActivePython mailing list
[EMAIL PROTECTED]
http://listserv.ActiveState.com/mailman/listinfo/activepython

Reply via email to