¿Las declaraciones SQL en mi base de datos de Access no pueden ejecutarse correctamente en el servidor?
1. El programa proporciona el formato de base de datos SQL: Hay un archivo MDF o se proporciona un archivo de script SQL (extensión .sql) para crear una base de datos SQL.
2. La mayoría de las veces, la base de datos SQL o los archivos de script no se proporcionan, por lo que debe hacerlo usted mismo. Este es el principal problema que queremos resolver en esta publicación.
Para el acceso original, se han reescrito las siguientes partes:
(1) No hay campos automáticos en la tabla de la base de datos SQL, por lo que convertir los campos automáticos en el acceso original a Los campos ordinarios requieren trabajo manual. Cambie el tipo de identidad en incrementos de 1.
(2) Para todos los campos de hora, si se define un valor predeterminado, debe ser ahora() y debe cambiarse a getdate()
(3) El valor predeterminado original campo de valor Generalmente, no se introducirá automáticamente y los campos deben agregarse manualmente en la tabla original.
(4) Debido a las diferentes bases de datos, los tipos de campo de acceso y sql cambiarán después de múltiples conversiones, como convertir el campo "si" original a bit o int, el campo de comentario a texto largo y texto. La conversión de campos a varchar, etc., generalmente no afectará la operación del programa. Si hay problemas, los discutiremos en la sección de reescritura del programa a continuación.
(5) Si desea utilizar un programa For SQL que utilice procedimientos almacenados, entonces debe tener una forma de establecer una base de datos SQL en el propio programa: tener su propio archivo de base de datos SQL o script sql. De lo contrario, es imposible crear un procedimiento almacenado usando la base de datos de Access, por lo que será mejor que abandone esta versión del programa For SQL, use la misma versión del programa For Access, importe la base de datos de Access y luego. Utilice el siguiente método de reescritura para reescribir su propio programa de versión SQL.
3. Vuelva a escribir la cadena de conexión
Puede consultar la red dinámica en este párrafo, que se utiliza para acceso y SQL respectivamente
Dim ConnStr p>
Si IsSqlDataBase = 1 Entonces
'Parámetros de conexión de la base de datos SQL: nombre de la base de datos, contraseña de usuario, nombre de usuario, nombre de la conexión (local es local, extranjera es IP)
Dim SqlDatabaseName, SqlPassword, SqlUsername, SqlLocalName
SqlDatabaseName = "dvbbs7"
SqlPassword = ""
SqlUsername = "dvbbs"
SqlLocalName = " (Local)"
ConnStr = "Proveedor = Sqloledb; ID de usuario = " & SqlUsername & "; Contraseña = " & SqlPassword & "; Catálogo inicial = " & SqlDatabaseName & "; Fuente de datos = " & SqlLocalName & ";"
Els
'Parámetros de conexión de la base de datos SQL: nombre de la base de datos, contraseña de usuario, nombre de usuario, nombre de la conexión (local es local, extranjera es IP) p>
Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName
SqlDatabaseName = "dvbbs7"
SqlPassword = ""
SqlUsername = " dvbbs"
SqlLocalName = "(local)"
ConnStr = "Proveedor = Sqloledb; ID de usuario = " &.SqlUsername & "; Contraseña = " & SqlPassword & "; = " & SqlDatabaseName & "; Fuente de datos = " & SqlLocalName & " .Connection")
conn.open "Proveedor = Sqloledb; Contraseña = 1234567; = (local );"
En él, reescriba el nombre de la base de datos, la fuente de datos, el usuario y la contraseña según sus necesidades.
4. Reescribir el programa 1. Si tiene suerte y obtiene el programa For SQL, si no hay ningún problema en el proceso de creación de la base de datos anterior, el programa básicamente se puede ejecutar. Si hay un error, es solo un error en el programa en sí. ¿Cómo? El contenido modificado no es lo que se analiza en esta publicación, por lo que no entraré en detalles.
2. En la mayoría de los casos, el programa en sí es For Access y la principal diferencia con el programa For SQL es el uso de declaraciones de consulta SQL en el programa. Cabe señalar que las declaraciones de consulta SQL son una parte indispensable de las aplicaciones de bases de datos. La sintaxis del programa utilizada tanto por For SQL como por Aceess es más o menos similar, pero también existen algunas diferencias sutiles. La versatilidad es también lo principal que debemos modificar.
Las partes generales que deben modificarse son las siguientes:
(1) El problema de la función de tiempo: la función de tiempo de la base de datos SQL es diferente del acceso. La función más utilizada es ahora, el acceso es ahora. () y SQL es getdate (). Por lo tanto, siempre que se use now() en la cláusula donde, se debe cambiar a getdate(); tenga en cuenta que la función now() en sí también se debe usar en el programa asp. Cualquiera que no use la función now() en. una consulta de base de datos o una declaración de ejecución El lugar no debe cambiarse.
(2) Función de comparación de tiempo: dateiff ('d', 'time 1', 'time 2') Este es el formato utilizado al acceder a las consultas. Estas comillas en SQl deben eliminarse y en. Al mismo tiempo, en el momento El formato puede ir precedido y seguido de #, que también debe eliminarse. Nuevamente, esto se refiere a la declaración sql, el sql en la declaración asp debe permanecer como está.
(3) Cómo expresar el valor nulo: en el acceso, juzgue si el valor nulo generalmente se expresa mediante "", pero esto a menudo es incorrecto en SQL si encuentra un error o el programa se está ejecutando. Anormal, puede cambiar el juicio a esto: donde (el nombre es nulo)
(4) Valores verdadero y falso: los valores de juicio ==true y =false se pueden usar en el acceso. Se pueden juzgar verdadero y = falso, pero se producirán errores en SQL, por lo que dichos juicios deben cambiarse a =1, =0 durante la consulta o ejecución de SQL. Nota: Aunque algunos programas se escriben como ="true", debido a las comillas, el campo es de tipo carácter y no se puede cambiar a =1. Se puede dejar como está. Déjalo como está.
Depuración del programa Anteriormente se recomendaba utilizar un editor con números de línea porque era poco probable que la reescritura anterior se lograra buscando directamente el código fuente del programa, lo que haría difícil encontrar todo.
El método general que adopto es: una vez completada la reescritura de la base de datos, depura el programa directamente después de que ocurre un error, lee el mensaje de error y encuentra la línea de código correspondiente al archivo. La causa del error a menudo no es esa línea, como la declaración de error. Es: conn.execute (sql), pero esto no está mal. La causa del error es la cadena sql interna. Luego, suba y vea cómo está esta cadena sql. generado. La forma en que se genera la cadena SQL se puede modificar de acuerdo con el método de modificación del programa mencionado anteriormente.
Se pierden todos los valores predeterminados. Principalmente números y tipos de fechas.
Todos ahora(), hora() y fecha() se cambian a getdate().
Todos los dateiff('d', time1, time2) se cambiarán a dateiff(day, time1, time2)
Puede haber algunos tipos verdadero/falso que no estén disponibles y se cambiará a 1/ 0.
Los tipos de etiquetas se utilizarán mediante cast (columna como varchar).
CursorType debe cambiarse a 1, es decir, al abrir la base de datos, el primer parámetro numérico debe establecerse en 1; de lo contrario, es posible que el registro no se muestre por completo.
isnull(wname) debe cambiarse a rowname = null
Al convertir el tipo de numeración automática en la base de datos ACCESS, SQL Server no lo configuró al tipo de numeración automática que necesitamos. ¡Agregue un identificador a la declaración de creación de SQL para indicar la numeración automática!
Al convertir campos relacionados con fechas, SQL SERVER utiliza de forma predeterminada el tipo de fecha y hora pequeña. Será mejor que lo cambiemos al tipo de fecha y hora porque el tipo de fecha y hora tiene un rango mayor que el tipo de fecha y hora pequeña. A veces, la conversión falla cuando se usa el tipo de fecha y hora pequeña, pero tiene éxito cuando se usa el tipo de fecha y hora.
Las operaciones de la declaración SQL de las dos bases de datos son diferentes. Por ejemplo: en la base de datos ACCESS, la declaración para eliminar registros es "eliminar * del usuario donde id=10", mientras que en la base de datos SQL SERVER, utilizar El que es "eliminar usuario donde id = 10".
Las funciones de fecha también son diferentes Al procesar la base de datos ACCESS, se pueden usar funciones como date() y time() Sin embargo, al procesar la base de datos SQL SERVER, solo funciones como dateiff y dateadd. se puede utilizar, pero no Fecha(), hora() y otras funciones.
En el procesamiento de bases de datos ACCESS, las declaraciones SQL pueden usar directamente ciertas funciones de VB, como la función cstr(), pero en el procesamiento de bases de datos SQL SERVER, no se pueden usar.
La siguiente tabla compara una base de datos de Microsoft Access (Base de datos de Microsoft Access: una colección de datos y objetos (como tablas, consultas o formularios) relacionados con un tema o propósito específico que utiliza el motor de base de datos Microsoft Jet. para administrar los datos) y un proyecto de Microsoft Access (proyecto de Microsoft Access: un archivo de Access conectado a una base de datos MicrosoftSQLServer y utilizado para crear aplicaciones cliente/servidor. El archivo del proyecto no contiene ningún dato u objeto basado en la definición de datos (como tablas o vistas). El tipo de datos (tipo de datos: determina el campo). Las características de campo de los tipos de datos incluyen booleano, entero, largo, moneda, simple, doble, fecha, cadena y variable (predeterminado)). /p>
Tipos de datos de Microsoft Access Tipos de datos de SQLServer
Sí/No Tipo de datos ("Sí/No": se utiliza para tipos de datos de campo que tienen solo dos valores posibles (por ejemplo, Sí o No, Verdadero o Falso). pero siempre los interpreta como 1)
numérico (tipo de datos "numérico": Microsoft Un tipo de datos de campo en las bases de datos de Access que se utilizan para datos numéricos utilizados en operaciones matemáticas. Sin embargo, si desea mostrar o calcular valores monetarios , debe utilizar el tipo de datos Moneda ) (byte) tinyint (tipo de datos tinyint): un tipo de datos de bytes (8 bits) en proyectos de Access que se utilizan para almacenar números enteros en el rango de 0 a 255)
Número (entero) Smallint (tipo de datos Smallint: en proyectos de Access. Un tipo de datos de 2 bytes (16 bits) utilizado para almacenar números en el rango -2^15(-32,768) y 2^15-1(32,767))
Números (entero largo) int (tipo de datos int: tipo de datos de 4 bytes (32 bits) en proyectos de Access, utilizados para almacenar números entre -2^31(-2,147,483,648) y 2^ 31-1(2,147,483,647).) p>
Números (número de punto flotante de precisión simple) real (tipo de datos de número real: En proyectos de Access, es un tipo de datos numérico aproximado con precisión de 7 dígitos. El positivo el rango de valores es aproximadamente de 1,18E-38 a 3,40 E+38, el rango de valores negativos es aproximadamente de -1,18E-38 a -3,40E+38, 18E-38 a -3,40E+38, también puede ser 0. .
)
(Sin tipo de datos equivalente) bigint (tipo de datos bigint: tipo de datos de 8 bytes (64 bits) en proyectos de Access, utilizado para almacenar -2^63 (-9,223,372,036,854,775,808) y 2^63 - 1(9,223,372,036,854,775,807) )
Números (tipo de punto flotante de doble precisión) float (Tipo de datos de punto flotante: en proyectos de Access, un tipo de datos numérico aproximado con una precisión de 15 dígitos. . Almacena valores positivos valores que oscilan aproximadamente entre 2,23E-308 y 1,79E+308, y valores negativos que oscilan aproximadamente entre -2,23E-308 y -1,79E+308 o 0)
Tipo de datos. : Un tipo de datos en Microsoft Access (tipo de datos "Dinero": un tipo de datos de Microsoft Access utilizado para cálculos relacionados con moneda o cálculos de punto fijo en bases de datos donde la precisión es extremadamente importante). money Tipo de datos ("Dinero": en In Access proyectos, un tipo de datos utilizado para almacenar valores monetarios desde -922.337.203.685.477,5707 a 922.337.203.685.477,5807, con una precisión de una diezmilésima de unidad monetaria)
smallmoney (tipo de datos smallmoney: un tipo de datos en proyectos de Access. , utilizado para almacenar valores monetarios en el rango -214.748,3648 a 214.748,3647, con una precisión de una diezmilésima de unidad monetaria (cuando se muestran valores monetarios pequeños, se redondean a dos decimales /Número (). Tipo de datos decimales (base de datos de Access): tipo de datos numéricos exactos utilizados para almacenar valores entre -10^38-1 y 10^38-1. Puede especificar el rango numérico (número total máximo de dígitos) y la precisión (número máximo). de dígitos a la derecha del punto decimal). decimal (Tipo de datos decimales (proyecto de Access): tipo de datos numéricos exactos utilizados para almacenar valores de -10^38-1 a 10^38-1. Puede especificar un rango numérico (número máximo de dígitos) número) y precisión (el número máximo de dígitos a la derecha del punto decimal)
numérico (tipo de datos numéricos: en proyectos de Access, un tipo de datos numéricos preciso con un rango de valores de -10^38- 1 a 10^38-1 Puede especificar el rango numérico (número total máximo de dígitos) y la precisión (número máximo de dígitos a la derecha del punto decimal)
. fecha/hora (tipo de datos "fecha/hora": tipo de datos de base de datos de acceso utilizado para almacenar información de fecha y hora. ) fecha y hora (tipo de datos fecha y hora: en proyectos de Access, el tipo de datos utilizado para fechas y horas que van desde el 1 de enero de 1753 al 31 de diciembre de 9999, con una precisión de una centésima de segundo o 3,33 milisegundos).
smalldatetime (tipo de datos smalldatetime: un tipo de datos de fecha y hora en el proyecto de Access, con menor precisión que el tipo de datos de fecha y hora. El rango de valores de datos es del 1 de enero de 1900 al 6 de junio de 2079, la precisión es de un minuto) .
Número automático (tipo de datos "Número automático": un tipo de datos de campo en una base de datos de Microsoft Access que almacena automáticamente un número único para cada registro cuando agrega un nuevo registro a una tabla. Se pueden generar tres tipos de números : números secuenciales, números aleatorios e ID de replicación síncrona). (incrementando) int (tipo de datos int: un tipo de datos de 4 bytes (32 bits) en proyectos de Access que almacena números entre -2^31(-2,147,483,648) y 2^31-1(2,147,483,647) ) (Propiedad de identidad definida.
)
Texto (tipo de datos "Texto": un tipo de datos de campo en una base de datos de Microsoft Access. El tipo de datos "Texto" puede contener hasta 255 caracteres, o una cantidad menor de caracteres especificados por la propiedad FieldSize .) (n)varchar(n) (tipo de datos varchar(n): un tipo de datos de longitud variable en proyectos de Access con una longitud máxima de 8000 caracteres ANSI.)
nvarchar(n) (nvarchar( n) Tipo de datos: Tipo de datos de longitud variable en proyectos de Access, con una longitud máxima de 4.000 caracteres Unicode. Cada carácter Unicode ocupa dos bytes y admite todos los caracteres internacionales.
Observaciones ("Observaciones"). Tipo de datos: un tipo de datos de campo en una base de datos de Microsoft Access." Los campos de nota pueden contener hasta 65,535 caracteres. ) Texto (Tipo de datos de texto: un tipo de datos de longitud variable en un proyecto de Access que puede almacenar hasta 2^ 31-1 (2,147,483,647) caracteres; la longitud predeterminada es 16. )
Objeto OLE (tipo de datos "Objeto OLE": uno de los tipos de datos de campo utilizados en otras bases de datos de Microsoft Access. Imagen (tipo de datos de imagen: en proyectos de Access) , es un tipo de datos de longitud variable que puede almacenar hasta 2 ^ 31-1 (2,147,483,647) bytes de datos binarios. El tipo de datos de imagen se utiliza para almacenar BLOB (objetos binarios grandes), como imágenes y documentos. y código compilado.
ID de réplica de sincronización (también conocido como Identificador único global (GUID): en la base de datos de Access, GUID es un campo de 16 bytes que se utiliza para establecer una identificación única de la réplica de sincronización). En una base de datos de Access, GUID es el ID de la réplica sincronizada (GUID)) identificador único (tipo de datos de identificador único: en proyectos de Access, un identificador único global (GUID) de 16 bytes. (Sólo SQLServer 7.0 o posterior)
Hipervínculo (tipo de datos "hipervínculo": el tipo de datos del campo de la base de datos de Access que almacena direcciones de hipervínculo. La dirección puede contener hasta cuatro partes, escritas en el siguiente formato de sintaxis: displaytext# dirección#subdirección#.) char (char tipo de datos: en proyectos de Access, este es un tipo de datos de longitud fija que puede contener hasta 8000 caracteres ANSI).
nchar (tipo de datos nchar: en proyectos de Access, es un tipo de datos de longitud fija que puede contener hasta 4.000 caracteres Unicode. Cada carácter Unicode ocupa dos bytes y se admiten todos los caracteres internacionales). varchar,nvarchar (atributo de hipervínculo establecido en "Sí")
(No hay tipo de datos equivalente) varbinary (tipo de datos varbinary: un tipo de datos de longitud variable en proyectos de Access que puede almacenar hasta 8000 bytes de datos binarios )
(Sin tipo de datos correspondiente) Smallint (tipo de datos Smallint: un tipo de datos de 2 bytes (16 bits) en el proyecto de Access, que puede almacenar -2^15(- 32,768) a 2. ^15-1(32,767) )
(Sin tipo de datos equivalente) marca de tiempo (tipo de datos de marca de tiempo: en proyectos de Access, cada vez que se inserta o actualiza una fila. El tipo de datos se actualizará automáticamente. El valor en la columna de marca de tiempo no hay datos de fecha y hora, sino binarios (8) o binarios variables (8), que indican la secuencia de datos modificados.
)
(Sin tipo de datos equivalente) charnchar
(Sin tipo de datos equivalente) sql_variant (tipo de datos sql_variant: un tipo de datos en proyectos de Access que se utiliza para almacenar elementos distintos del texto. ntext, image, timestamp y sql_variant)
(Sin tipo de datos equivalente) Definido por el usuario (Tipo de datos definido por el usuario: en la base de datos de Microsoft SQL Server, los usuarios están permitidos. Utilice un tipo de datos del sistema existente para defina la definición de tipo para los datos contenidos en la columna (las reglas y los valores predeterminados solo se pueden vincular a tipos de datos definidos por el usuario).
Nota En un proyecto de Access o base de datos de SQL Server, el prefijo "n" significa "país", lo que significa que el tipo de datos está habilitado para Unicode. En las bases de datos de Access, todas las columnas de texto están habilitadas para Unicode de forma predeterminada.
Problemas que requieren atención en ACCESS to SQL
2006-2-13 16:01:20
Muchos amigos quieren utilizar el método de programación de bases de datos SQL2000. pero estoy estudiando ACCESS y sólo sé un poco sobre SQL. Aquí les daré la siguiente referencia: métodos y precauciones para convertir ACCESS a SQL2000.
1. No he probado la conversión entre ACCESS2000 y SQL2000. Espero que puedas probar más y debe haber una manera;
2. Método de conversión
1. " en "Herramientas de administración" en "Panel";
2. Presione "Agregar" para agregar una nueva fuente de datos.
La fuente de datos se construye aquí y el resto es conversión.
3. Abra SQL2000 Enterprise Manager, ingrese a la base de datos y cree una nueva base de datos vacía "ABC"
4. seleccione "Todas las tareas" "Importar datos". "Importar datos", haga clic en "Siguiente" para continuar;
5. Seleccione "Driverdomicrosoft Access (*.mdb)" en el menú desplegable de origen de la base de datos y seleccione el que acaba de agregar en "Usuario". /System DSN" Escriba "ABC" y haga clic en "Siguiente";
6. Seleccione "ABC" en "Propósito" y haga clic en "Siguiente" para continuar. No es necesario cambiar el "propósito", seleccione el servidor (generalmente su propio "local", también puede seleccionar la dirección del servidor o la dirección LAN para determinar si sus permisos pueden operar), "Usar autenticación de WINDOWS" significa usar su propia identidad Para operar como administrador del sistema, se puede utilizar "Operar como identidad SQL" para las operaciones del sitio web. "Verificación" se puede utilizar para las operaciones del sitio web, y se recomienda utilizar esta última;
7. Seleccione "Usar verificación de operación de identidad SQL" y complete el nombre de usuario y la contraseña. Elegí el número predeterminado del sistema. "sa".****", seleccione el "ABC" que acaba de crear para la base de datos y haga clic en "Siguiente";
8. Dos selecciones de un solo elemento en este paso, "Copiar tablas y vistas desde la fuente de datos" y "Usar comandos de consulta para especificar los datos que se transferirán", seleccione el primero y haga clic en "Siguiente" para continuar;
9. Aquí aparecerá su propia tabla de base de datos ACCESS, haga clic en " Seleccione Todo" para continuar con el siguiente paso;
10. "Asistente de importación/exportación DTS", verifique si está seleccionado "Ejecutar ahora", presione "Siguiente",
11. Presione "Finalizar" para continuar;
11. Presione "Siguiente" para continuar;
11. Presione "Siguiente" para continuar.
Finalice "Continuar;
12. En este paso, verá que sus datos se han importado a SQL2000. Cuando aparezcan las palabras "La tabla de la base de datos XXX se ha importado correctamente" y hay un color verde delante de Todas las tablas se enganchan, lo que significa que todos los datos se han importado correctamente. Si hay una tabla con problemas o un * rojo delante de la tabla, significa que la tabla no se ha importado correctamente. En este momento, debe ir. regrese y verifique si su operación es correcta
3. Modificación de datos
1. Dado que SQL2000 no tiene "numeración automática", el campo establecido por su "numeración automática" se convertirá en. un campo no vacío, que debe modificarse manualmente y seleccionar su "Anotación" como "Sí", la semilla como "1" y el incremento como "1". Además, convierta ACCESS2000 a SQL Después de SQL2000, los campos con el atributo original "Sí/No" se convertirán en "bits" no vacíos. En este momento, debe modificar los atributos que desee;
3. Además, preste atención al tiempo. Existen muchas diferencias entre ACCESS y SQL en la comprensión de las funciones
4. Problemas de campos relacionados
1. escriba en la base de datos ACCESS, sqlserver no lo configuró en tipo de numeración automática, necesitamos agregar un identificador en la declaración de creación de SQL para indicar la numeración automática.
2. El valor predeterminado es el tipo Smalldatetime. Será mejor que lo cambiemos al tipo Datetime. Debido a que el rango del tipo Datetime es mayor que el del tipo Smalldatetime, cuando uso el tipo Smalldatetime, la conversión falla, pero cuando uso. use el tipo de fecha y hora, la conversión se realiza correctamente.
3. Las operaciones de la declaración SQL de las dos bases de datos son diferentes. Por ejemplo, la declaración para eliminar registros en la base de datos ACCESS es "delete*fromuserwhereid=10", mientras que la declaración utilizada para eliminar registros en la base de datos SQLSERVER es "deleteuserwhereid=10"
4. Las funciones de fecha son diferentes Al procesar la base de datos ACCESS, se pueden usar funciones como fecha() y hora(). Sin embargo, al procesar la base de datos SQLSERVER, solo se pueden usar funciones como dateiff y dateadd, pero no date(), time() y otras funciones.
5. Use directamente ciertas funciones de VB, como la función cstr (), pero en el procesamiento de bases de datos SQLSERVER, no se pueden usar.