1. Planteando la pregunta
En un proyecto reciente, encontré un problema con el funcionamiento de ASP de las tablas de la biblioteca FoxPro (*.DBF). En realidad, existen muchas aplicaciones de software que utilizan tablas DBF. La forma de utilizar estos datos en un entorno de red ha dejado a muchos amigos desconcertados.
También verifiqué mucha información y no pude encontrar una explicación detallada de la solución. Después de las pruebas, inicialmente resolví este problema y lo compartiré con todos.
Este artículo intenta resolver los siguientes problemas:
1. ASP se une a la tabla libre (archivo *.dbf) generada por FoxPro
2. Almacene varios tipos de archivos de datos y gráficos en la tabla dbf al mismo tiempo
(El programa de muestra está disponible en Set conn = Server.CreateObject("ADODB.Connection")
connstr = "Controlador={Controlador Microsoft Visual FoxPro};SourceType=DBF;"&_
"SourceDB=" & Server.MapPath(db) &";Exclusivo=No"
conn.Open connstr
En el código anterior, los datos son la ruta relativa donde se encuentra mi archivo DBF (en relación con el archivo donde se encuentra este código) y se convierten en una ruta absoluta a través de Server.MapPath (db).
http://www.connectionstrings.com proporciona cadenas de conexión para muchos tipos de archivos de tablas de biblioteca. Para archivos DBF, las cadenas de conexión proporcionadas son:
"Controlador={Controlador Microsoft dBASE (*.dbf)};DriverID=277;Dbq=c:mydbpath;"
No me conecté exitosamente usando esta cadena de conexión y no realicé más pruebas. Los amigos interesados pueden probar la cadena anterior.
.www.downcodes.com
2. Declare el nombre de la tabla en la declaración SQL.
Puede declarar el nombre de la tabla que se va a operar en la declaración SQL en forma de [nombre de la tabla] o [nombre de la tabla.extensión]. Por ejemplo, el nombre del archivo de la tabla es t1.dbf y la declaración SQL es:
seleccione * de [t1] o seleccione * de [t1.dbf]
3. Operaciones de almacenamiento de varios tipos de datos
DBF no admite muchos tipos de datos, entre los que cabe destacar Fecha (tipo de fecha), Memo (tipo de nota) y General (tipo general). Aquí nos centramos en los tipos de datos, los tipos Memo y Gen se utilizan al almacenar archivos gráficos, que se explicarán más adelante.
Generalmente uso dos métodos para escribir operaciones de base de datos, uno es usar la declaración de inserción y el otro es usar el método addnew. Para las tablas DBF, estos dos métodos son ligeramente diferentes.
Cuando utilice la instrucción de inserción, tenga en cuenta que el formato de escritura de los datos de tipo Fecha es {^aaaa-mm-dd} y el delimitador es diferente del número de Access y del servidor SQL. La declaración SQL específica es:
insertar en [t1.dbf] (nombre,cumpleaños) valores ('MiNombre',{^1970-1-1})
Cuando utilicé el método addnew, el código que usé originalmente fue:
rst.open "[t1]",conn,0,3
primero.añadirnuevo
primero(0).valor = "MiNombre"
primer(1).valor = {^1970-1-1}
primera actualización
primero.cerrar
No hay ningún problema al operar SQL Server y Access, pero sí hay un problema al operar archivos DBF. Después de experimentar, finalmente encontré el método correcto:
sql = "seleccionar * de t1"
primer.open sql,conn,0,3
primero.añadirnuevo
primero(0).valor = "MiNombre"
primer(1).valor = {^1970-1-1}
primera actualización
rst.close
Tenga en cuenta que la diferencia entre los dos fragmentos de código anteriores está principalmente en la declaración SQL. Como se mencionó anteriormente, en las declaraciones SQL, puede declarar archivos de tabla en forma de [nombre de tabla] o [nombre de tabla.dbf], pero cuando se usa el método addnew, el nombre de la tabla no puede tener una extensión y no se pueden agregar corchetes. de lo contrario, aparecerá el mensaje "No es un nombre de tabla simple, no se puede actualizar".
4. Almacenamiento de archivos gráficos
En la tabla DBF, se pueden usar campos generales y de notas para almacenar gráficos, audio y video, texto y otros archivos (consulte http://www.chinadesign.com.cn/NewsContents1.asp?id=2663 ). Aquí, configuramos el tipo de campo en memo(binary) (tipo de preparación binaria), usamos el método rst(n).AppendChunk() para escribir los datos binarios de la imagen resultante y usamos el método Response.BinaryWrite() para restaurar el binario. datos a la imagen. Hay muchos artículos relacionados con el almacenamiento de imágenes, por lo que no entraré en detalles aquí.
En cuanto a usar el campo General para almacenar imágenes, lo intenté, pero no funcionó, así que no volví a intentarlo.
5. Eliminación de datos
Puede utilizar la instrucción de eliminación para eliminar los datos, pero cuando abre el archivo de la tabla después de eliminarlo, descubre que los datos solo están marcados para su eliminación y en realidad no se eliminan de la tabla. En Foxpro, use el comando pack para eliminar datos permanentemente. Después de verificar cierta información, se dijo que VB no puede implementar la operación de paquete y, por supuesto, VBS no puede implementarla. La solución general es importar los datos de la tabla (sin marca de eliminación, por supuesto) a una nueva tabla de vez en cuando, eliminar la tabla original y luego cambiar el nombre de la nueva tabla al nombre de la tabla original.
6. Los datos y las imágenes se almacenan en la base de datos al mismo tiempo.
Este problema no está dentro del alcance de este artículo. Hay muchos artículos en Internet que brindan soluciones, por cierto, los mencionaré aquí.
Implementé esta función usando el programa de carga sin componentes "Huajing". Algunos amigos pueden preguntar, la carga de "Huajing" está escrita como un archivo y no hay forma de almacenarlo en la base de datos. No está mal, pero con un ligero cambio, puedes obtener los datos binarios de la imagen y luego almacenarlos en la base de datos. En mi ejemplo, los cambios en el programa de entorno están comentados, consúltelos.
4. Conclusión
Este artículo analiza principalmente el funcionamiento de ASP de las tablas libres DBF. Si se trata de una biblioteca DBC, la cadena de conexión correspondiente se proporciona en inc/conn.asp en el ejemplo.
En este punto, creo que mis amigos tienen una comprensión general del funcionamiento de las tablas DBF. En combinación con mis ejemplos, creo que pueden desarrollar más funciones.
¡BUENA SUERTE!