Archivo de texto a tabla sql server con asp
Logré descargar un archivo desde el cliente al servidor y leer este archivo, pero no se como validar que la estructura del archivo que me está enviando sea la correcta y además no se como grabar ese archivo de texto a una tabla access o sql server, para seguir haciendole validaciones, si alguien me puede ayudar se lo agradecería mucho,
gracias
gracias
Que quieres hacer exáctamente, meter el fichero de texto en un campo binario o importar cada línea de texto del fichero como un nuevo registro, con los campos separados por comas...
Ej.
El archivo de texto es:
xxxxxxxx yyyyyyy zzzzzz
11111111 222222 3333
iiii 8888 00000000
y tengo una tabla que se llama prueba con la siguiente estructura:
Campo1 char(9)
Campo2 char(9)
Campo3 char(9)
y quiero grabar cada columna del archivo de texto en cada campo de la tabla, eso es un problema que no entiendo y lo otro es saber si el archivo plano que estan enviando tiene la estructura correcta o no, porque si me mandan un archivo con 4 columnas yo no voy a poder grabarlas en mi tabla, pero le tengo que informar al cliente que el archivo tiene otra estructura.
ojalá me hayas entendido, y gracias por responderme.
El archivo de texto es:
xxxxxxxx yyyyyyy zzzzzz
11111111 222222 3333
iiii 8888 00000000
y tengo una tabla que se llama prueba con la siguiente estructura:
Campo1 char(9)
Campo2 char(9)
Campo3 char(9)
y quiero grabar cada columna del archivo de texto en cada campo de la tabla, eso es un problema que no entiendo y lo otro es saber si el archivo plano que estan enviando tiene la estructura correcta o no, porque si me mandan un archivo con 4 columnas yo no voy a poder grabarlas en mi tabla, pero le tengo que informar al cliente que el archivo tiene otra estructura.
ojalá me hayas entendido, y gracias por responderme.
Muy interesante. Vamos a ver:
<%
'Lo primero que hacemos será leer el fichero entero y meterlo en la variable strFichero
Set Fs = Server.CreateObject("Scripting.FileSystemObject")
Set F = Fs.GetFile("c:fichero.txt")
Set Ts = F.OpenAsTextStream
strFichero = Ts.ReadAll
Ts.Close
Set Ts = Nothing
Set F = Nothing
Set Fs = Nothing
Set cnDB = Server.CreateObject("ADODB.Connection")
'Metemos las líneas del fichero en un array (partimos por el retorno de carro)...
arrayLineasFichero = Split(strFichero, vbCrLf)
'Por cada línea...
For i = 0 To UBound(arrayLineasFichero)
If arrayLineasFichero(i) <> "" Then
'Partimos cada columna de la línea actual
arrayColumnasLinea = Split(arrayLineasFichero(i), " ")
For j = 0 To UBound(arrayColumnasLinea)
cnDB.Execute("INSERT INTO TABLA VALUES ('" & arrayColumnasLinea(0) & "', '" & arrayColumnasLinea(0) & "', '" & arrayColumnasLinea(0) & "')"
Next
End If
Next
Set cnDB = Nothing
%>
<%
'Lo primero que hacemos será leer el fichero entero y meterlo en la variable strFichero
Set Fs = Server.CreateObject("Scripting.FileSystemObject")
Set F = Fs.GetFile("c:fichero.txt")
Set Ts = F.OpenAsTextStream
strFichero = Ts.ReadAll
Ts.Close
Set Ts = Nothing
Set F = Nothing
Set Fs = Nothing
Set cnDB = Server.CreateObject("ADODB.Connection")
'Metemos las líneas del fichero en un array (partimos por el retorno de carro)...
arrayLineasFichero = Split(strFichero, vbCrLf)
'Por cada línea...
For i = 0 To UBound(arrayLineasFichero)
If arrayLineasFichero(i) <> "" Then
'Partimos cada columna de la línea actual
arrayColumnasLinea = Split(arrayLineasFichero(i), " ")
For j = 0 To UBound(arrayColumnasLinea)
cnDB.Execute("INSERT INTO TABLA VALUES ('" & arrayColumnasLinea(0) & "', '" & arrayColumnasLinea(0) & "', '" & arrayColumnasLinea(0) & "')"
Next
End If
Next
Set cnDB = Nothing
%>
La consulta está mal, sería de la siguiente manera (especificando el campo 1, 2 y 3). Si la línea no tiene 3 columnas el script va a fallar.
cnDB.Execute("INSERT INTO TABLA VALUES ('" & arrayColumnasLinea(0) & "', '" & arrayColumnasLinea(1) & "', '" & arrayColumnasLinea(2) & "')"
cnDB.Execute("INSERT INTO TABLA VALUES ('" & arrayColumnasLinea(0) & "', '" & arrayColumnasLinea(1) & "', '" & arrayColumnasLinea(2) & "')"
<%
'Aquí teneis el mismo escript que escribí ayer, pero probado y sin errores. Copiar el mensaje entero y guardarlo en un fichero .asp, configurar los parámetros y probadlo. Por seguridad yo comentaría antes la línea que ejecuta el código SQL antes de probarlo.
'El siguiente script que lee un fichero espacificado y lo importa a la tabla especificada
'Parámetros obligatorios:
strRutaFichero = Server.MapPath("fichero.txt") 'Ruta del fichero a importar
strSeparador = " " 'Separador entre columnas
strConexion = "CADENA_CONEXION" 'Especifique aquí la cadena de conexión a la base de datos
strTabla = "NOMBRE_TABLA" 'Nombre de la tabla en la que se importarán los datos
'NOTA: No puede haber incoherencias, por supuesto, el número de columnas en el fichero
'debe ser el mismo que el número de campos en la tabla y los tipos de datos deben coincidir)
'Lo primero que hacemos será leer el fichero entero y meterlo en la variable strFichero
Set Fs = Server.CreateObject("Scripting.FileSystemObject")
Set F = Fs.GetFile(strRutaFichero)
Set Ts = F.OpenAsTextStream
strFichero = Ts.ReadAll
Ts.Close
Set Ts = Nothing
Set F = Nothing
Set Fs = Nothing
Set cnDB = Server.CreateObject("ADODB.Connection")
cnDB.Open strConexion 'Abrimos la conexión a tu base de datos
'Metemos las líneas del fichero en un array (partimos por el retorno de carro)...
arrayLineasFichero = Split(strFichero, vbCrLf)
'Por cada línea...
For i = 0 To UBound(arrayLineasFichero)
If arrayLineasFichero(i) <> "" Then 'Si la línea no contiene nada...
'Partimos cada columna de la línea actual (por cada espacio encontrado)
arrayColumnasLinea = Split(Trim(arrayLineasFichero(i)), strSeparador)
strSql = "INSERT INTO " & strTabla & " VALUES ("
For j = 0 To UBound(arrayColumnasLinea)
strSql = strSql & "'" & Replace(arrayColumnasLinea(j), "'", "''") & "'"
If j < UBound(arrayColumnasLinea) Then
strSql = strSql & ", "
End If
Next
strSql = strSql & ")"
cnDB.Execute(strSql)
Response.Write strSql & "<br>"
End If
Next
cnDB.Close
Set cnDB = Nothing
%>
'Aquí teneis el mismo escript que escribí ayer, pero probado y sin errores. Copiar el mensaje entero y guardarlo en un fichero .asp, configurar los parámetros y probadlo. Por seguridad yo comentaría antes la línea que ejecuta el código SQL antes de probarlo.
'El siguiente script que lee un fichero espacificado y lo importa a la tabla especificada
'Parámetros obligatorios:
strRutaFichero = Server.MapPath("fichero.txt") 'Ruta del fichero a importar
strSeparador = " " 'Separador entre columnas
strConexion = "CADENA_CONEXION" 'Especifique aquí la cadena de conexión a la base de datos
strTabla = "NOMBRE_TABLA" 'Nombre de la tabla en la que se importarán los datos
'NOTA: No puede haber incoherencias, por supuesto, el número de columnas en el fichero
'debe ser el mismo que el número de campos en la tabla y los tipos de datos deben coincidir)
'Lo primero que hacemos será leer el fichero entero y meterlo en la variable strFichero
Set Fs = Server.CreateObject("Scripting.FileSystemObject")
Set F = Fs.GetFile(strRutaFichero)
Set Ts = F.OpenAsTextStream
strFichero = Ts.ReadAll
Ts.Close
Set Ts = Nothing
Set F = Nothing
Set Fs = Nothing
Set cnDB = Server.CreateObject("ADODB.Connection")
cnDB.Open strConexion 'Abrimos la conexión a tu base de datos
'Metemos las líneas del fichero en un array (partimos por el retorno de carro)...
arrayLineasFichero = Split(strFichero, vbCrLf)
'Por cada línea...
For i = 0 To UBound(arrayLineasFichero)
If arrayLineasFichero(i) <> "" Then 'Si la línea no contiene nada...
'Partimos cada columna de la línea actual (por cada espacio encontrado)
arrayColumnasLinea = Split(Trim(arrayLineasFichero(i)), strSeparador)
strSql = "INSERT INTO " & strTabla & " VALUES ("
For j = 0 To UBound(arrayColumnasLinea)
strSql = strSql & "'" & Replace(arrayColumnasLinea(j), "'", "''") & "'"
If j < UBound(arrayColumnasLinea) Then
strSql = strSql & ", "
End If
Next
strSql = strSql & ")"
cnDB.Execute(strSql)
Response.Write strSql & "<br>"
End If
Next
cnDB.Close
Set cnDB = Nothing
%>
