Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Ayuda!! Access no ejecuta órdenes SQL

Estas en el tema de Ayuda!! Access no ejecuta órdenes SQL en el foro de Bases de Datos General en Foros del Web. Estoy escribiendo un programa en Vb6 para administrar una base de datos en Access. Estoy usando ADO y ODBC para la conexión y algunas órdenes ...
  #1 (permalink)  
Antiguo 09/10/2003, 22:17
 
Fecha de Ingreso: agosto-2003
Mensajes: 7
Antigüedad: 20 años, 8 meses
Puntos: 0
Ayuda!! Access no ejecuta órdenes SQL

Estoy escribiendo un programa en Vb6 para administrar una base de datos en Access.
Estoy usando ADO y ODBC para la conexión y algunas órdenes SQL (no todas) son ignoradas por Access. Para solucionar éso cambié parte del código para ejecutar consultas almacenadas, pero en un caso necesito usar un Recordset actualizable, y no me permite usar una sentencia de filtrado.
Este es el código (simplificado):

Dim WithEvents adoQamDatosRS As ADODB.Recordset
Dim db As ADODB.Connection

Set db = New ADODB.Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=MSDASQL;dsn=BD-99-01;uid=admin;pwd=admin;"

Set adoQamDatosRS = New ADODB.Recordset
dFecha = txtFecha(0).Text

sSQL = "SELECT * FROM Tb1_Datos_QAM WHERE Fecha=#" & dFecha &"# ORDER BY Fecha, Hora_Local"
adoQamDatosRS.Open sSQL, db, adOpenStatic, adLockOptimistic

En una BD de prueba con 72 registros (24 por día), esta orden debería devolverme un recordset con 24 registros, pero me devuelve 0 (cero).

Si le quito 'WHERE Fecha=#" & dFecha &"# ', la sentencia funciona y me devuelve los 72 registros.

La sintaxis es correcta, si la ejecuto como una consulta almacenada funciona perfectamente, pero necesito ejecutarla desde código para poder editarla y agregar registros.

Si alguien tiene alguna sugerencia o solución, desde ya muy agradecido.

Saludos
Anthony
  #2 (permalink)  
Antiguo 10/10/2003, 09:20
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
WHERE Fecha=#" & dFecha &"#
En que formato tienes la fecha..?? , ya que Access configura sus fechas según la configuración regional de la máquina donde está instalado.

Ejemplo: La fecha 4/5/2002 que localmente indica 4 de Mayo de 2002, al subir la base de datos la fecha sería 5/4/2002... pero esta fecha también es 4 de Mayo de 2002.

Si es así lo que puedes hacer para evitar problemas es usar el formato canónico de fecha expresado como YYYY/MM/DD lo que quiere decir expresar la fecha como Año/Mes/Dia. Entonces la fecha 6 de Enero de 2002 se escribe como: 2002/01/06.

Access, reconoce correctamente ese formato, asumiendo SIEMPRE que lo primero es el año, lo segundo el mes y lo tercero el dia. Y luego, lo transforma a su formato, pero nos quedamos trankilos que es correcta la fecha!.

Así que te puede hacer lo siguiente:

1.- En tu textbox que escribe la fecha ponerla en formato correcto

2.- Hacer una funcion que reciba el formato y lo transforme a YYYY/MM/DD

Bueno.. eso sería lo que a mi se me ocurre para solucionar tu problema y ahorrarte algunos dolores de cabeza posteriormente.

Saludos. y suerte
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 10/10/2003, 10:38
 
Fecha de Ingreso: agosto-2003
Mensajes: 7
Antigüedad: 20 años, 8 meses
Puntos: 0
lo pruebo y después te cuento :)
Gracias!
  #4 (permalink)  
Antiguo 11/10/2003, 20:17
 
Fecha de Ingreso: agosto-2003
Mensajes: 7
Antigüedad: 20 años, 8 meses
Puntos: 0
Gracias RootK!
Funcionó como un reloj :)

Por si a alguien más le puede ser útil, aquí va la función para pasar de fecha dd/mm/aaaa a aaaa/mm/dd


== La parte de la base de datos==================

Dim sFecha As String

Set adoQamDatosRS = New ADODB.Recordset
dFecha = txtFecha(0).Text
sFecha = ConvierteFecha(dFecha)

sSQL = "SELECT * FROM Tb1_Datos_QAM WHERE Fecha=#" & sFecha & "# ORDER BY Fecha, Hora_Local"
adoQamDatosRS.Open sSQL, db, adOpenStatic, adLockOptimistic

==La función================================

Private Function ConvierteFecha(dFecha As Date) As String

Dim sFecha As String
Dim sAnio As String
Dim sMes As String
Dim sDia As String
Dim inCounter As Integer
Dim inFoundPos As Integer
Dim x As Integer
Const PARSECHAR = "/"

sFecha = Str(dFecha)
If Len(sFecha) = 0 Then Exit Function

'Empezar en el último caracter
inCounter = Len(sFecha)
'Buscar una barra inclinada (/)
inFoundPos = InStrRev(sFecha, PARSECHAR, inCounter)
'Asignar la última parte de la cadena a sEstacion
sAnio = Mid(sFecha, inFoundPos + 1, (Len(sFecha) - inFoundPos + 1))
'La cadena de fecha pierde el año
sFecha = Left(sFecha, (Len(sFecha) - Len(sAnio) - 1))

'Empezar en el último caracter
inCounter = Len(sFecha)
'Buscar una barra inclinada (/)
inFoundPos = InStrRev(sFecha, PARSECHAR, inCounter)
'Asignar la última parte de la cadena a sEstacion
sMes = Mid(sFecha, inFoundPos + 1, (Len(sFecha) - inFoundPos + 1))
'La cadena de fecha pierde el mes
sFecha = Left(sFecha, (Len(sFecha) - Len(sMes) - 1))

'Empezar en el último caracter
inCounter = Len(sFecha)
'Buscar una barra inclinada (/)
inFoundPos = InStrRev(sFecha, PARSECHAR, inCounter)
'Asignar la última parte de la cadena a sEstacion
sDia = Mid(sFecha, inFoundPos + 1, (Len(sFecha) - inFoundPos + 1))

'La cadena de fecha pierde el año
sFecha = sAnio & "/" & sMes & "/" & sDia
ConvierteFecha = sFecha

End Function
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:09.