PDA

Ver la Versión Completa : ADO y CSV


ramonibk
20-09-2019, 08:11:58
Hola a todos.

una consulta de algo que me esta pasando y ni encuentro una explicación lógica ni manera de solucionarlo.

Estoy trabajando para mostrar un documento CSV en un DBgrid.

con un ADOConnection donde el proveedor es "Microsoft.Jet.OLEDB.4.0"

object ADOConnection1: TADOConnection
Connected = True
ConnectionString =
'Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data ' +
'Source="";Mode=Share Deny None;Extended Properties="TEXT;DATABAS' +
'E=./";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Je' +
't OLEDB:Database Password="";Jet OLEDB:Engine Type=96;Jet OLEDB:' +
'Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet ' +
'OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password' +
'="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Dat' +
'abase=False;Jet OLEDB:Don'#39't Copy Locale on Compact=False;Jet OLE' +
'DB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False'
ConnectOptions = coAsyncConnect
LoginPrompt = False
Mode = cmShareDenyNone
Provider = 'Microsoft.Jet.OLEDB.4.0'


De este cuelga un AdoQuery Donde.
AdoQuery.SQl.text := 'Select * From datos#csv'

Hasta hay todo correo. los datos se muestran sin problema.

el problema aparece si el documento CSV contiene una columna en la cual todo son IP
pues cuando la ip es 192.168.1.250 me pinta 1921681250 los puntos han desaparecido.
si por el contrario la columna es casi todo textos y solo alguna Ip lo pinta todo correctamente.
lo único que he conseguido ver es que cuando son todo IP el objero es
AdoQueryIP: TFloatField.
Pero cuando es mixta
AdoQueryMixta: TWideStringField

¿Hay alguna manera para que la consulta SQL me devuelva todo en modo string?
de esta manera creo que se solucionaría todo el problema.

Un saludo a todos.
y gracias de antemano.

Neftali [Germán.Estévez]
20-09-2019, 10:01:24
No lo he probado, pero lo primero que probaría es a modificar la Query para ver si en la propia consulta hay forma de forzar el campo. Por ejemplo concatenando.
Al abrir un Excel pasa algo similar. El controlador "decide" el tipo del campo a partir de los caracteres que hay en su interior. Aquí debe estar pasando lo mismo.

Por ejemplo, a partir de la que tienes ahora:

SELECT * FROM DATOS#csv

Puedes probar con:

SELECT IP, * FROM DATOS#csv
SELECT "Dir. IP="+IP AS IP, * FROM DATOS#csv

No se si entiendes por dónde voy.

ramonibk
20-09-2019, 10:20:57
Su bueno mi primera opción ha sido crear cuatro tablas por IP "Ip1,Ip2,Ip3,Ip4"
y luego concatenar. pero eso me obliga a que cada vez que hay algún cambio de IP me toca coger el fichero que me pasan en excel y pasar un rato modificando. Hay como 6 columnas de IP´s.

la aplicación tiene que correr en un Win2K básico. por eso no uno excel directamente.