2009-04-21 15 views
5

Tengo problemas para ejecutar una declaración INSERT donde hay un autonumber como campo PK. Tengo un autoincremento long como la clave principal, y luego 4 campos de tipo double; y sin embargo, Access (utilizando ADO) parece querer cinco valores para la instrucción de inserción.Uso de Autonumming en Access - INSERT instrucciones

INSERT INTO [MY_TABLE] VALUES (1.0, 2.0, 3.0, 4.0); 
>> Error: Number of query values and destinations fields are not the same. 

INSERT INTO [MY_TABLE] VALUE (1, 1.0, 2.0, 3.0, 4.0); 
>> Success!! 

¿Cómo uso Autonumeración para autonumber realmente?

Respuesta

13

Si no desea proporcionar valores para todas las columnas que existen en su tabla, debe especificar las columnas que desea insertar. (Lo cual es lógico; de lo contrario, ¿cómo debería saber el acceso, o cualquier otro DB, para qué columnas está proporcionando un valor)?

Por lo tanto, lo que tiene que hacer es lo siguiente:

INSERT INTO MyTable (Column2, Column3, Column4) VALUES (1, 2, 3) 

Además, asegúrese de que se omite la columna de clave principal (que es el campo Autonumérico). Luego, Access lo configurará al siguiente valor por sí mismo.

A continuación, puede recuperar el valor de clave primaria del registro recién insertado mediante la ejecución de una declaración

SELECT @@identity FROM MyTable 

.

+0

Muchas gracias! No solo respondió mi pregunta, sino que respondió la siguiente pregunta que estaba en proceso de escritura: cómo extraer el autonuum después del inserto. ¡Aclamaciones! – Smashery

1

Mencione los nombres de las columnas en su consulta, ya que solo proporciona 4 valores, mientras que tiene 5 columnas en esa tabla. La base de datos necesita saber el valor que usted proporciona para cada columna.

0

Aunque tengo entendido que si está utilizando SQL Server o similar y hay activadores que agregan registros adicionales, la @@ IDENTIDAD puede ser la de los otros registros adicionales.

0

Simplemente deje el número automático fuera de la consulta Insertar. Se poblará por sí mismo.

Hay un campo de ID antes de la Proyectólo

INSERT INTO ProjectRiskAssessment 
(ProjectID 
, RiskClass 
, RiskElement 
, RiskAttribute 
, RiskQuestion 
, RiskScale 
, RiskStatus 
, RiskSeverity 
, RiskProbability 
, RiskResponse) 
SELECT 
1 AS Expr2 
, PullRiskAssessmentQuestions.RiskClass 
, PullRiskAssessmentQuestions.RiskElement 
, PullRiskAssessmentQuestions.RiskAttribute 
, PullRiskAssessmentQuestions.RiskQuestion 
, '0' AS Expr3 
, 'Open' AS Expr4 
, '1' AS Expr5 
, '1' AS Expr6 
, ' ' AS Expr7 
FROM PullRiskAssessmentQuestions; 
+0

Respuesta bastante incomprensible, tal vez trate de ser más específico de lo que otra persona preguntó y no usar el código que tiene. – Migol

Cuestiones relacionadas