Jump to content
dogwall

Comprobar si existe valor en tabla access antes de cargar datos

Recommended Posts

Buenos días, 

Llevo unos días intentando resolver un problema y no doy con la solución. Tengo un libro excel conectado a una base de datos access en el que necesito cargar datos diariamente.

Los datos que cargo van asociados a una fecha dentro del propio fichero y necesito comprobar que la fecha incluida en el fichero no existe ya en la base de datos para no duplicar registros.

Obtengo la fecha del fichero (FechaArchivo = Cells(1, 3).Value) y mi idea es ejecutar una orden SQL para comprobar si esa fecha existe en la tabla:

strSQL = "SELECT * FROM vtas_cajas WHERE (((vtas_cajas.FECHA)= " & FechaArchivo & "))"

Pero no consigo nada útil... Y no sé qué más intentar para comprobar si existe o no esa fecha en la tabla utilizando ADO. Lo estaba intentando con Recordset.GetString pero luego he visto que únicamente sirve para comprobar si hay o no conexión. 

¿Alguna idea sobre cómo hacerlo?

Gracias.

Share this post


Link to post
Share on other sites

@dogwall, recuerta que siempre es importante adjuntar los archivos, así nos facilitas poder ayudarte.

Puedes comprobar si una dato ya existe en una tabla de la siguiente manera:

Set Rs = New ADODB.Recordset
        
Sql = "SELECT COUNT(FECHA) as Cuenta FROM vtas_cajas WHERE FECHA=" & FechaArchivo

Rs.Open Sql, miConexion, 3, 3, adCmdText

If Rs.GetString > 0 Then
MsgBox "Fecha ya ingresada"
Else
MsgBox "Fecha no ingresada"
End If

O así

Set Rs = New ADODB.Recordset
        
Sql = "SELECT FECHA FROM vtas_cajas WHERE FECHA=" & FechaArchivo

Rs.Open Sql, miConexion, 3, 3, adCmdText

If Rs.EOF = True Then
MsgBox "Fecha no ingresada"
Else
MsgBox "Fecha ya ingresada"
End If

o

Set Rs = New ADODB.Recordset
        
Sql = "SELECT FECHA FROM vtas_cajas WHERE FECHA=" & FechaArchivo

Rs.Open Sql, miConexion, 3, 3, adCmdText

If Rs.RecordCount > 0 Then
MsgBox "Fecha ya ingresada"
Else
MsgBox "Fecha no ingresada"
End If

Comentas, saludos.
        

Share this post


Link to post
Share on other sites

Si en la base de datos, la columna FECHA está definida como fecha, debes empezar y terminar la fecha a comparar con un carácter almohadilla (#). Ejemplo:

 

Sql = "SELECT COUNT(FECHA) as Cuenta FROM vtas_cajas WHERE FECHA=#" & FechaArchivo & "#"

 

.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.




  • Posts

    • Buenos días compañer@s, espero que estéis tod@s bien, a ver si me podéis ayudar. He creado una medida que me suman todas las categorías de las ventas [TOTAL_VENTAS], doce campos en total. Con ella he creados dos medidas más: VENTAS_AÑO_ACTUAL=CALCULATE([TOTAL_VENTAS];DATOS_BP[ANYO]=2020) VENTAS_AÑO_ANTERIOR=CALCULATE([TOTAL_VENTAS];DATOS_BP[ANYO]=2019) Hasta ahí todo bien. Mi pregunta es, cómo puedo hacer para que la medida calcule el año en curso y el año anterior sin necesidad de tener que poner 2020 y 2019?. Muchas gracias como siempre Saludos  
    • Así funciona: Sub Crear() Application.ScreenUpdating = False If Trim([C9]) = "" Then MsgBox "*** Cédula en blanco ***", vbCritical, "Alerta" Exit Sub End If If Trim([E9]) = "" Then MsgBox "*** Riesgo en blanco ***", vbCritical, "Alerta" Exit Sub End If If Trim([C11]) = "" Then MsgBox "*** Nombre en blanco ***", vbCritical, "Alerta" Exit Sub End If Set Cnn = New ADODB.Connection With Cnn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\Datos\01.Adeudos.accdb" .Open End With With Sheets("Registro") Set Rs = New ADODB.Recordset Sql = "SELECT Count(*) FROM pen WHERE [Num Id]='" & .Range("C9") & "'" Rs.Open Sql, Cnn, 3, 3, adCmdText Datos = Rs.GetRows If Datos(0, 0) > 0 Then MsgBox "El registro ya existe en la base de datos!!!", vbCritical, "SACI" Else Sql = "INSERT INTO pen ([Num Id], Nombre, Riesgo, [Monto Caso], Moroso, [Nun_Patrono], [Nom_Patrono]) " Sql = Sql & "VALUES ('" & .Range("C9") & "', " & _ "'" & .Range("C11") & "', " & _ "'" & .Range("E9") & "', " & _ "'" & .Range("G9") & "', " & _ "'" & .Range("G11") & "', " & _ "'" & .Range("C13") & "', " & _ "'" & .Range("E13") & "' )" MsgBox "Datos actualizados con Exito!!!", vbInformation, "SACI" A_ingesarDatos = True End If End With Cnn.Execute (Sql) Cnn.Close Set Cnn = Nothing End Sub  
    • Hola buenas a todos, me presento como nuevo usuario, saludos a todos !!
    • Hacer eso con "una formula" se puede con Office 365. Si no tiene Office 365 el adjunto que le comparto NO le va a servir y deberá esperar alguna otra propuesta.   Filtrar con función.xlsx
    • Gracias por la ayuda. Seguramente algo tengo que estar haciendo mal. Lo puse de la siguiente forma y me da error con depurador al parecer es en esta parte del código "    .Open Sql, Cnn, , , adCmdText" Sub crear() Application.ScreenUpdating = False If Trim([C9]) = "" Then MsgBox "*** Cédula en blanco ***", vbCritical, "Alerta" Exit Sub End If If Trim([E9]) = "" Then MsgBox "*** Riesgo en blanco ***", vbCritical, "Alerta" Exit Sub End If If Trim([C11]) = "" Then MsgBox "*** Nombre en blanco ***", vbCritical, "Alerta" Exit Sub End If Set Cnn = New ADODB.Connection With Cnn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\Datos\01.Adeudos.accdb" .Open End With Set Rs = New ADODB.Recordset Sql = "Select [Num Id] From pen Where [Num Id] =" & Worksheets("Registro").Range("C9").Value With Rs .CursorLocation = adUseClient .CursorType = adOpenKeyset .LockType = adLockOptimistic .Open Sql, Cnn, , , adCmdText End With If Rs.RecordCount >= 1 Then MsgBox "Ya existe el ID, modifique" Exit Sub End If Sql = "INSERT INTO pen ([Num Id], Nombre, Riesgo, [Monto Caso], Moroso, [Nun_Patrono], [Nom_Patrono]) " Sql = Sql & "VALUES ('" & Worksheets("Registro").Range("C9").Value & "', " & _ "'" & Worksheets("Registro").Range("C11").Value & "', " & _ "'" & Worksheets("Registro").Range("E9").Value & "', " & _ "'" & Worksheets("Registro").Range("G9").Value & "', " & _ "'" & Worksheets("Registro").Range("G11").Value & "', " & _ "'" & Worksheets("Registro").Range("C13").Value & "', " & _ "'" & Worksheets("Registro").Range("E13").Value & "' )" With Rs .CursorLocation = adUseClient .CursorType = adOpenKeyset .LockType = adLockOptimistic .Open Sql, Cnn, , , adCmdText End With MsgBox "Datos actualizados con Exito!!!", vbInformation, "SACI" A_ingesarDatos = True End Sub Saludos
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy