Problema con Microsoft.Jet.OLEDB.4.0

09/02/2007 - 15:02 por Brian | Informe spam
Buenos Días,

Tengo un problema leyendo un archivo separado por comas (.csv)

Declaré un Proveedor para leer el número de columnas que tiene un archivo
csv, dependiendo del número de columnas, se determina el tipo de carga que se
está haciendo:

strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Application("PathFilesHV") & ";" & _
"Extended Properties=""text;HDR=NO;FMT=Delimited;"";"
objConnection.Open strProvider

strSQL = "SELECT * FROM " & varFileName & ";"

objRecordset.Open strSQL, objConnection, adOpenStatic, adLockOptimistic,
adCmdText

Pero el archivo tiene 23 Columnas y cuando hago el select solamente me
retorna 1 campo, o sea no está separando por comas el Archivo, toma como un
solo campo toda la primera fila del archivo.

Comprobé la versión del proveedor y es la última.

Muchas gracias por su colaboración

Brian Garnica </B>
Bogotá, Colombia
bamgar@gmail.com
bamgar@hotmail.com
brian.garnica@hotmail.com

Preguntas similare

Leer las respuestas

#1 Dani Castillo
09/02/2007 - 17:12 | Informe spam
la verdad es que no he probado a leer asi archivos de texto :-| ¿no te seria
mas rapido y comodo tratarlo como texto?, depende del numero de filas a
tratar pero con archivos normales yo he usado funciones de texto normales y
va de lujo, y mas si lo que requieres es una carga directa

en cualquier caso una vez leida una fila, puedes obtener rapido las
columnas:

vectorcolumnas= split ( fila, "," )
numerocolumnas=ubound(vectorcolumnas)
elemento5=vectorcolumnas[5]

etc

para cargas de texto yo suelo hacer:
1) Abrir como fichero de texto de textstream
2a) Si el fichero es pequeñito (unas pocas filas) uso un readall
3a) hago un split de la variable que contiene todo el readall con
filas=split(todo,vbcrlf)
4a) recorro con un for fila=0 to ubound(filas)
2b) Si el fichero es grande lo recorro con un bucle con readline para evitar
consumir mucha memoria si el proceso es algo comun, si es puntualmente el
readall es rapido

referencias sobre textstream
http://www.w3schools.com/asp/asp_re...stream.asp

no se si eso te soluciona algo, pero personalmente prefiero tratar los
archivos de texto "a mano", me da mas confianza (puedes hacer un parser
mucho mas versatil, por ejemplo que sea capaz de "ignorar" lineas que
comienzen con un caracter para permitir incluir comentarios, o tratar lineas
de distinto numero de columnas, etc , en definitiva tratar linea por linea
en lugar de confiar en el jet )

"Brian" escribió en el mensaje
news:
Buenos Días,

Tengo un problema leyendo un archivo separado por comas (.csv)

Declaré un Proveedor para leer el número de columnas que tiene un archivo
csv, dependiendo del número de columnas, se determina el tipo de carga que
se
está haciendo:

strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Application("PathFilesHV") & ";" & _
"Extended Properties=""text;HDR=NO;FMT=Delimited;"";"
objConnection.Open strProvider

strSQL = "SELECT * FROM " & varFileName & ";"

objRecordset.Open strSQL, objConnection, adOpenStatic, adLockOptimistic,
adCmdText

Pero el archivo tiene 23 Columnas y cuando hago el select solamente me
retorna 1 campo, o sea no está separando por comas el Archivo, toma como
un
solo campo toda la primera fila del archivo.

Comprobé la versión del proveedor y es la última.

Muchas gracias por su colaboración

Brian Garnica </B>
Bogotá, Colombia



Respuesta Responder a este mensaje
#2 Brian
09/02/2007 - 17:48 | Informe spam
Muchas Gracias Dani.

Creo que voy a hacerte caso. Ese Jet me ha dado los problemas que nunca me
he imaginado.

Gracias.
Brian Garnica </B>
Bogotá, Colombia



Respuesta Responder a este mensaje
#3 Dani Castillo
09/02/2007 - 22:29 | Informe spam
Hola!

Si, por eso te comentaba, en jet no lo he probado pero ya de por si otras
importaciones (ej. desde acces de un csv) tienden a ser demasiado limitadas
y cuando se empeña en dar problemas no pueden enganchar en ningun lado

al hacerlo todo desde ficheros, trabajando en texto , tienes control de todo
, lo unico que debes tener algo de cuidado importando datos que puedan tener
comas de por si (ej. direcciones) y vienen entrecomillados de por si , pero
si no es el caso sin problemas, y aun siendolo se puede llegar a tratar
(aqui buscando primero por las comillas dobles y partiendo y juntando
"pares") , en cualquier caso el control es mas flexible y cuando algo falla,
al menos sabes donde y en que trozo de codigo :-)

si tienes problemas en las rutinas generales avisa y el lunes te mando desde
el curro algun pedazo de codigo

dani.

"Brian" escribió en el mensaje
news:
Muchas Gracias Dani.

Creo que voy a hacerte caso. Ese Jet me ha dado los problemas que nunca me
he imaginado.

Gracias.
Brian Garnica </B>
Bogotá, Colombia



Respuesta Responder a este mensaje
#4 Brian
12/02/2007 - 14:29 | Informe spam
Muchas Gracias Danni.

Te agradecería bastante, ya que no he encontrado la forma exacta (soy nuevo
en VB 6.0) ya he importado el Archivo por medio del aspSmartUpload, pero
ahora necesito saber cuantas columnas trae ese archivo (o cuantos campos).

Agradezco mucho tu ayuda

Gracias.

Brian Garnica </B>
Bogotá, Colombia



Respuesta Responder a este mensaje
#5 Dani Castillo
12/02/2007 - 16:32 | Informe spam
Holas, te paso algo de codigo a ver si te vale, he intentado simplificar y
poner ejemplos distintos

<%
path="c:\... donde tengas el fichero"
o bien
path=server.mappath("ruta relativa al asp")

' leo todo el archivo y cierro el objeto
set fso=Server.createobject("Scripting.FileSystemObject")
set fichero=fso.opentextfile(path,1,false)
contenido =fichero.readall
fichero.close
set fichero=nothing
set fso=nothing

' una forma rapida de manejar el archivo es tenerlo en un vector de
"lineas"
' guardarlo en una variable ayuda si vas a manejar cosas complejas que
requieran por ejemplo
' buscar elementos relacionados entre lineas

lineas=ubound(split(contenido,vbcrlf))


' ejemplo basico, mostrar el fichero como "tabla" html
%> <table> <%
for each l in lineas
%> <tr> <%
for each campo in split(l,",")
%> <td> <%=campo%> </td> <%
next
%> </tr> <%
next
%> </table> <%


' algo mas complejo, supongamos que necesitas saber cuantos campos tienes
columnas= ubound(split (l(0),",") )
response.write " El fichero tiene " & columnas & " columnas" ' realmente 1
mas ya que empieza en 0
select case columnas
case 7: trataficherotipoA
case 19: trataficherotipoB
.
end select


sub trataficherotipoA()
' otra forma de barrer el fichero
for kl=lbound(lineas) to Ubound(lineas)
lineaactual=lineas(kl)
campos=split(lineaactual,",")
for kc=lbound(campos) to ubound(campos)
response.write "<br> La columna " & kc & " de la fila " & kl & " vale " &
campos(kc)
next
next
end sub

sub tataficherotipoB()
' otra forma de manejarlo
for each l in lineas
campos=split(l,",")
response.write " La columna 5 vale " & campos(4) & " <br>" ' ojo ,
cuenta de 0 a numcolumnas-1

end sub


%>



"Brian" escribió en el mensaje
news:
Muchas Gracias Danni.

Te agradecería bastante, ya que no he encontrado la forma exacta (soy
nuevo
en VB 6.0) ya he importado el Archivo por medio del aspSmartUpload, pero
ahora necesito saber cuantas columnas trae ese archivo (o cuantos campos).

Agradezco mucho tu ayuda

Gracias.

Brian Garnica </B>
Bogotá, Colombia



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida