• Jueves 25 de Abril de 2024, 23:33

Autor Tema:  Recordset y fields  (Leído 1792 veces)

DardoSchuster

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Recordset y fields
« en: Jueves 2 de Septiembre de 2010, 10:50 »
0
Buenos dias

Antes que nada una breve presentacion , soy programador delphi/sql server desde hace muchos años y estoy viendo la posibilidad de usar python/mysql/access con pythonwin para el ado.
El primer dia que empece con esto fue todo un exito ya que instale python 3.1 y todos los complementos sin ningun problema ahora al segundo ya cambio la cosa y tengo el siguiente problema cuando quiero acceder al conjunto fields de un recordset access dice que no existe el objeto a ver si alguien me puede decir que estoy haciendo mal

un saludo
y desde ya muchas gracias
Dardo

# First import two useful modules>
import win32com.client
from adoconstants import *

 # Create the ADO Connection object via COM.
 oConn = win32com.client.Dispatch('ADODB.Connection')

# Now set the connection properties via the ConnectionString
oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data> Source=C:personal.mdb;"

 # Now open the connection
oConn.Open()

if oConn.State == adStateOpen:
# Do something here
 print ("We've connected to the database.")

# Now create a RecordSet object and open a table
rs = win32com.client.Dispatch('ADODB.Recordset')
rs.Open("select * from agenda",oConn,1,3)

while not rs.EOF:
 print (rs.fields("nombre"))

La respuesta que recibo de esto es siempre que no conoce el objeto fields lo cual no entiendo porque en ela propia ayuda sale fields como opbjeto dentro del recordset

rive08

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Recordset y fields
« Respuesta #1 en: Jueves 2 de Septiembre de 2010, 17:04 »
0
Buen día Dardo,

La verdad, nunca usé win32com.client, pero, por lo que pude encontrar en internet.
Me parece que el problema es que estás poniendo:

Código: Python
  1. rs.fields
  2.  
en vez de
Código: Python
  1. rs.Fields
  2.  

Recordá que en Python "Todo es Case-Sensitive" ;-)

Saludos,
Rive.

DardoSchuster

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Recordset y fields
« Respuesta #2 en: Jueves 2 de Septiembre de 2010, 18:00 »
0
Tienes razon pero ahora me sigue otro problema con un codigo mas sencillo

import win32com.client
conn = win32com.client.Dispatch(r'ADODB.Connection')
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:/personal.mdb;'
conn.Open(DSN)


rs = win32com.client.Dispatch(r'ADODB.Recordset')
rs_name = 'agenda'
rs.Open('[' + rs_name + ']', conn, 1, 3)


print (rs.Fields.Count)
print (rs.Fields.Item(0))

error que me da

PythonWin 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32.
8
Traceback (most recent call last):
  File "C:Python31Libsite-packagespythonwinpywinframeworkscriptutils.py", line 325, in RunScript
    exec(codeObject, __main__.__dict__)
  File "C:DardoLenguaje PythonadoEjemplobase-de-datos-2.py", line 13, in <module>
    print (rs.Fields.Item(0))
  File "C:Python31libsite-packageswin32comgen_py2A75196C-D9EB-4129-B803-931327F72D5Cx0x2x8.py", line 871, in __str__
    return str(self.__unicode__(*args))
  File "C:Python31libsite-packageswin32comgen_py2A75196C-D9EB-4129-B803-931327F72D5Cx0x2x8.py", line 867, in __unicode__
    return unicode(self.__call__(*args))
NameError: global name 'unicode' is not defined
>>>

Que pasa con el unicode de las narices aqui ?? si es un campo string da problemas , si es uno numerico tambien da problemas , no se que funcion aplicarle para que se tranquilice.

DardoSchuster

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Recordset y fields
« Respuesta #3 en: Jueves 2 de Septiembre de 2010, 21:55 »
0
Ok ya esta resuelto entre el case sensitive y la falta del value al final me estaban complicando la vida

muchas gracias
un saludo
dardo