Visual Basic - ERROR DE SINTAXIS

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 30 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ERROR DE SINTAXIS

Publicado por oemor (1 intervención) el 28/01/2019 21:19:05
Public Function AutoNumericoAleatorio(strTabla As String, strCampo As String, lngMinimo As Long, lngMaximo As Long, clave As String, areasub As String) As Long

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
Dim lngNuevo As Long, _
rst As DAO.Recordset, _
 
 
' EL ERROR ME LO MARCA EN EL SELECT AL ABRIR EL RS BAJO 2 CRITERIOS.
Set rst = CurrentDb.OpenRecordset("select * from RESULTADOS_EVALUACION WHERE CLAVE_EVALUACION = " & clave & " And SUBAREA = " & areasub & " ", dbOpenDynaset)
 
If Not (rst.EOF And rst.BOF) Then
 
Do
' genero un valor aleatoriamente dentro del rango
lngNuevo = Int((lngMaximo - lngMinimo + 1) * Rnd + lngMinimo)
 
' verifico si existe en la tabla bajo los criterios del recordset
rst.FindFirst strCampo & " = " & lngNuevo
If rst.NoMatch Then
 
 
' si no existe lo devuelvo y salgo del bucle
AutoNumericoAleatorio = lngNuevo
Exit Do
End If
' si existe lo intento de nuevo
Loop Until 0 = 1
Else
' si no hay registros genero un valor aleatoriamente dentro del rando indicado
AutoNumericoAleatorio = Int((lngMaximo - lngMinimo + 1) * Rnd + lngMinimo)
End If
 
end function
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 Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ERROR DE SINTAXIS

Publicado por Andres Leonardo (1798 intervenciones) el 28/01/2019 21:46:54
concatena primero en una variable y mira el contendio .. asi descartas que sea algo al concatenar

1
2
3
4
X = "select * from RESULTADOS_EVALUACION WHERE CLAVE_EVALUACION = " & clave & " And SUBAREA = " & areasub
 
 
Set rst = CurrentDb.OpenRecordset(x, dbOpenDynaset) 'aqui mira que valor tiene x
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 Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ERROR DE SINTAXIS

Publicado por Antoni Masana (558 intervenciones) el 29/01/2019 09:56:49
Al principio no me he dado cuenta del error pero de repente se me ha encendido la bombilla de pensar.

El código que tiene el problema es este:

1
2
Set rst = CurrentDb.OpenRecordset("select * from RESULTADOS_EVALUACION WHERE CLAVE_EVALUACION = " & _
                                  clave & " And SUBAREA = " & areasub & " ", dbOpenDynaset)

Andres comenta que hagas esto:

1
2
3
SQL = "select * from RESULTADOS_EVALUACION WHERE CLAVE_EVALUACION = " & clave & _
                                                    " And SUBAREA = " & areasub & " "
Set rst = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)

Ahora bien, el contenido de la variable SQL es un codigo SQL y se podria escrivir asi:

1
2
3
SELECT *
FROM RESULTADOS_EVALUACION
WHERE CLAVE_EVALUACION = "{valor1}" And SUBAREA = "{valor2}"

Donde {valor1} seria el contenido de la variable clave y
Donde {valor2} seria el contenido de la variable areasub.


Este codigo en SQL no es valido:

1
2
3
SELECT *
FROM RESULTADOS_EVALUACION
WHERE CLAVE_EVALUACION = {valor1} And SUBAREA = {valor2}

Por que el texto debe ir entre comillas ¿Verdad?

Entonces, ¿Donde estan las comillas de este código:

1
2
3
SQL = "select * from RESULTADOS_EVALUACION WHERE CLAVE_EVALUACION = " & clave & _
                                                    " And SUBAREA = " & areasub & " "
Set rst = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)

Lo correcto seria esto.

1
2
3
SQL = "select * from RESULTADOS_EVALUACION WHERE CLAVE_EVALUACION = " & chr$(34) & clave & chr$(34) & _
                                                    " And SUBAREA = " & chr$(34) & areasub & chr$(34)
Set rst = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)

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