Access - Error en código en Access

   
Vista:

Error en código en Access

Publicado por Miguel (29 intervenciones) el 30/09/2014 09:45:51
Hola, estoy haciendo un programa para usarlo en Access, pero al ejecutarlo (mediante un formulario) me da el siguiente error "El número de valores de consulta y el número de campos de destino son diferentes".
En el formulario de Access hay que escribir los datos:fuente(nombre del registro puede ser nº y/o letras), path1 (ruta de un archivo local, se usa para crear un hipervínculo al hacer click en fuente), sete(números y/o letras) y denom (nº y/o letras).
idcod se usa como una clave. Lo que hace el código es meter los datos en la tabla phs_desm, luego selecciona otra tabla (donde hay 4 modelos de coche, es decir 4 registros) entonces mete dato a la tabla Todosmodelos teoricamente 4 veces los mismos datos
solo variando el modelo en la celda correspondiente, copio el código por si alguien le puede echar un vistazo y ve dónde puede estar el fallo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Private Sub InsertarPHS_desm_Click()
On Error GoTo Err_InsertarPHS_desm_Click
Dim sql As String
Dim stDocName As String
Dim pathe As String
Dim coche As String
Dim TBL As Recordset
Dim TBL1 As Recordset
Dim idcod As Integer
 
Set db = CurrentDb
 
sql = "SELECT * FROM PHS_desm"
Set TBL = db.OpenRecordset(sql)
 
idcod = 0
TBL.MoveFirst
pathe = Fuente.Value & "#" & path1.Value & "#"
Do Until TBL.EOF
idcod = idcod + 1
TBL.MoveNext
Loop
 
sql = "INSERT INTO PHS_desm VALUES (" & idcod & ",'" & pathe & "','" & sete.Value & "','" & denom.Value & "');"
db.Execute (sql)
sql = "SELECT * FROM Modelo"
Set TBL1 = db.OpenRecordset(sql)
TBL1.MoveFirst
 
Do Until TBL1.EOF
sql = "INSERT INTO Todosmodelos (Id_PHS_Desm,Id_Proces,PHS_DESM_Proc,Modelo,Fuente,Sete,Deno) VALUES (" & idcod + 1 & "," & 0 & "," & 1 & ",'" & TBL1("Modelo") & "','" & pathe & "','" & sete.Value & "','" & denom.Value & "');"
db.Execute (sql)
TBL1.MoveNext
Loop
 
TBL.Close
TBL1.Close
Fuente.Value = ""
sete.Value = ""
denom.Value = ""
MsgBox "Insercion Correcta "
 
Exit_InsertarPHS_desm_Click:
Exit Sub
 
Err_InsertarPHS_desm_Click:
MsgBox Err.Description
Resume Exit_InsertarPHS_desm_Click
 
End Sub

Saludos y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Oscar

Error en código en Access

Publicado por Oscar (10 intervenciones) el 30/09/2014 10:24:14
Al depurar en que instrucción te da el error con la primera insert
1
sql = "INSERT INTO PHS_desm VALUES (" & idcod & ",'" & pathe & "','" & sete.Value & "','" & denom.Value & "');"
o con la segunda
1
sql = "INSERT INTO Todosmodelos (Id_PHS_Desm,Id_Proces,PHS_DESM_Proc,Modelo,Fuente,Sete,Deno) VALUES (" & idcod + 1 & "," & 0 & "," & 1 & ",'" & TBL1("Modelo") & "','" & pathe & "','" & sete.Value & "','" & denom.Value & "');"

Así a ojo observo que en la 2ª estas metiendo 2 valores (0,1) en los campos Id_Proces y PHS_DESM_Proc, pero no se muy bien por que los agregas con las comillas y aspersan; si van a ser valores constantes deberían ir asi :
1
sql = "INSERT INTO Todosmodelos (Id_PHS_Desm,Id_Proces,PHS_DESM_Proc,Modelo,Fuente,Sete,Deno) VALUES (" & idcod + 1 & ","0","1",'" & TBL1("Modelo") & "','" & pathe & "','" & sete.Value & "','" & denom.Value & "');"
si el campo es de texto, si fuese númerico u otro deberías de quitar comillas, etc..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en código en Access

Publicado por Miguel (29 intervenciones) el 30/09/2014 10:57:27
Si hago ese cambio (quitar los &) da directamente error de compilación...
Tengo otro código bastante parecido que sí me funciona, es un poco más sencillo, lo que hace es meterlo en una tabla (Proces) y luego en otra (Todosmodelos), es decir hace lo mismo que el anterior pero no ha de meter 4 veces los datos para cada modelo en Todosmodelos. Lo pego:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Private Sub InsertarPHS_desm_Click()
On Error GoTo Err_InsertarPHS_desm_Click
    Dim sql As String
    Dim stDocName As String
    Dim pathe As String
    Dim TBL As Recordset
    Dim TBL1 As Recordset
    Dim idcod As Integer
 
    Set db = CurrentDb
 
    sql = "SELECT * FROM Proces"
    Set TBL = db.OpenRecordset(sql)
 
    idcod = 0
    TBL.MoveFirst
    pathe = Fuente.Value & "#" & path1.Value & "#"
    Do Until TBL.EOF
        idcod = idcod + 1
        TBL.MoveNext
    Loop
 
    sql = "INSERT INTO Proces VALUES (" & idcod + 1 & ",'" & pathe & "','" & sete.Value & "','" & denom.Value & "');"
    db.Execute (sql)
    sql = "INSERT INTO Todosmodelos (Id_PHS_Desm,Id_Proces,PHS_DESM_Proc,Modelo,Fuente,Sete,Deno) VALUES (" & 0 & "," & idcod + 1 & "," & 0 & ",'" & Me.model.Value & "','" & pathe & "','" & sete.Value & "','" & denom.Value & "');"
    db.Execute (sql)
    TBL.Close
 
    Fuente.Value = ""
    sete.Value = ""
    denom.Value = ""
    MsgBox "Insercion Correcta "
Exit_InsertarPHS_desm_Click:
    Exit Sub
 
Err_InsertarPHS_desm_Click:
    MsgBox Err.Description
    Resume Exit_InsertarPHS_desm_Click
 
End Sub

No sé si me estoy explicando bien... cualquier duda decirmela por favor

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Oscar

Error en código en Access

Publicado por Oscar (10 intervenciones) el 30/09/2014 11:14:47
Al ejecutar paso a paso en que linea te salta el error?

en la 2ª insert el campo Modelo de TBL1 se llama así?

La tabla PHS_desm tiene sólo 4 campos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en código en Access

Publicado por Miguel (29 intervenciones) el 30/09/2014 11:29:35
Hola Oscar,
al ejecutar con F8 no me da error. No sé si hay otra forma de mirarlo
TBL1 es un recordset que dirige digamos a la tabla Modelo (donde hay 4 registros que son 4 nombres de modelos), entonces lo que hace es poner cada uno de esos modelos en el campo Modelo de Todosmodelos.
La tabla PHS_desm tiene más campos, pero los datos tienen que pasarse a los 4 primeros campos.

Si quieres, te puedo pasar la tabla y le echas un vistazo por mail

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en código en Access

Publicado por Miguel (29 intervenciones) el 30/09/2014 12:45:34
Hola, después de revisar funciona a medias así, al menos no da ese error:
sql = "INSERT INTO PHS_desm (Id_phs_desm,fuen,sete,deno) VALUES (" & idcod & ",'" & pathe & "','" & sete.Value & "','" & denom.Value & "');"

En negrita lo que he cambiado, ahora pasa los datos (4 veces e iguales solo variando el modelo) a la tabla Todosmodelos, pero no sé porqué no los pasa a la tabla PHS_desm... que también es necesario que estén..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar