from mx.ODBC import Windows as db1 import MySQLdb as db2 class adodb: # global vars global db1,db2 # class level vars dbCon = 0 hostname = '' username = '' password = '' database = '' rs = '' recordCount = 0 fieldCount = 0 description = '' fieldNames = [] recNum = 0 dbType = 'odbc' db = db1 def __init__(self,dbType='odbc'): self.dbType(dbType) def dbType(self,dbType): global db1,db2 self.dbType = dbType if(dbType=='odbc'): self.db = db1 if(dbType=='mysql'): self.db = db2 return self.db def connect(self,hostname,username='',password='',database='',clearAutoCommit=0): result = 0 # if there are no values, user values from the class if(hostname==''): hostname=self.hostname if(username==''): username=self.username if(password==''): password=self.password if(database==''): database=self.database # try to establish a connection try: if(self.dbType=='odbc'): self.dbCon = self.db.Connect(database,username,password,clearAutoCommit) if(self.dbType=='mysql'): self.dbCon = self.db.connect(hostname,username,password,database) self.hostname = hostname self.username = username self.password = password self.database = database result = 1 except: self.dbCon = 0 result = 0 return result def execute(self,sql): result=0 dbCursor = '' try: dbCursor = self.dbCon.cursor() dbCursor.execute(sql) self.rs = dbCursor.fetchall() self.recordCount = dbCursor.rowcount self.description = dbCursor.description result = self.getFieldNames() dbCursor.close() except: self.rs = 0 self.recordCount = 0 self.description = 0 return self.rs def getFieldNames(self): self.fieldCount = 0 for field in self.description: self.fieldCount = self.fieldCount + 1 self.fieldNames.append(field[0]) def getFieldIndex(self,fieldName): name = '' i=0 fPos=-1 for name in self.fieldNames: if(fieldName == name): fPos = i break i = i + 1 return fPos def getFieldType(self,fieldName): fieldInfo = self.description[self.getFieldIndex(fieldName)] return fieldInfo[1] def quote(self,field,value): qs="'" type = self.getFieldType(field) if((type==4) or (type==9) or (type==-1)): qs = "" return qs + str(value) + qs def fields(self,field,recNo=-1): if(recNo==-1): recNo=self.recNum return str(self.rs[recNo][self.getFieldIndex(field)]) def getSQL(self,table,rsDict,id='id'): sql='' mode=0 field='' if(rsDict[id]==''): rsDict[id]=0 if((rsDict.has_key(id)==1) and (int(rsDict[id]) > 0)): sql = "update " + table + " where " + id + "=" sql = sql + self.quote(id,rsDict[id]) + " set " mode=1 else: sql = "insert into " + table + " (" for field in rsDict.keys(): sql = sql + field + "," sql = sql[:len(sql)-1] + ") values (" mode=0 for field in rsDict.keys(): if(mode==0): sql = sql + self.quote(field,rsDict[field]) + "," else: sql = sql + field + "=" + self.quote(field,rsDict[field]) + "," if(mode==0): sql = sql[:len(sql)-1] + ")" else: sql = sql[:len(sql)-1] return sql def moveNext(self): if(self.recNum < self.recordCount): self.recNum = self.recNum + 1 def moveFirst(self): self.recNum=0 def moveLast(self): self.recNum = self.recordCount def close(self): self.dbCon.close()