Tutoriales Access

Regresar

FUNCION PARA PONER CANTIDAD CON LETRA EN EXCEL Y ACCESS

Para poner correctamente esta función en access, copie el código y guardelo en un módulo de access

Una ves ya guardado, desde un formulario en el campo donde quiere que aparesca solo ponga =conviertenumletra(Campo)

Function ConvierteNumLetra(Numero)
Dim texto
Dim Millones
Dim Miles
Dim Cientos
Dim Decimales
Dim cadena
Dim CadMillones
Dim CadMiles
Dim CadCientos
texto = Numero
texto = FormatNumber(texto, 2)
texto = Right(Space(14) & texto, 14)
Millones = Mid(texto, 1, 3)
Miles = Mid(texto, 5, 3)
Cientos = Mid(texto, 9, 3)
Decimales = Mid(texto, 13, 2)
CadMillones = ConvierteCifra(Millones)
CadMiles = ConvierteCifra(Miles)
CadCientos = ConvierteCifra(Cientos)
If Trim(CadMillones) > "" Then
If Trim(CadMillones) = "UN" Then
cadena = CadMillones & " MILLON"
Else
cadena = CadMillones & " MILLONES"
End If
End If
If Trim(CadMiles) > "" Then
cadena = cadena & " " & CadMiles & " MIL"
End If If Trim(CadMiles & CadCientos) = "UN" Then
cadena = cadena & "UN PESO " & Decimales & "/100 M.N."
Else
If Miles & Cientos = "000000" Then
cadena = cadena & " " & Trim(CadCientos) & " DE PESOS " & Decimales & "/100 M.N."
Else
cadena = cadena & " " & Trim(CadCientos) & " PESOS " & Decimales & "/100 M.N."
End If
End If
ConvierteNumLetra = Trim(cadena)
End Function

Function ConvierteCifra(texto)
Dim Centena
Dim Decena
Dim Unidad
Dim txtCentena
Dim txtDecena
Dim txtUnidad
Centena = Mid(texto, 1, 1)
Decena = Mid(texto, 2, 1)
Unidad = Mid(texto, 3, 1)
Select Case Centena
Case "1"
txtCentena = "CIEN"
If Decena & Unidad <> "00" Then
txtCentena = "CIENTO"
End If
Case "2"
txtCentena = "DOSCIENTOS"
Case "3"
txtCentena = "TRESCIENTOS"
Case "4"
txtCentena = "CUATROCIENTOS"
Case "5"
txtCentena = "QUINIENTOS"
Case "6"
txtCentena = "SEISCIENTOS"
Case "7"
txtCentena = "SETECIENTOS"
Case "8"
txtCentena = "OCHOCIENTOS"
Case "9"
txtCentena = "NOVECIENTOS"
End Select

Select Case Decena
Case "1"
txtDecena = "DIEZ"
Select Case Unidad
Case "1"
txtDecena = "ONCE"
Case "2"
txtDecena = "DOCE"
Case "3"
txtDecena = "TRECE"
Case "4"
txtDecena = "CATORCE"
Case "5"
txtDecena = "QUINCE"
Case "6"
txtDecena = "DIECISEIS"
Case "7"
txtDecena = "DIECISIETE"
Case "8"
txtDecena = "DIECIOCHO"
Case "9"
txtDecena = "DIECINUEVE"
End Select

Case "2"
txtDecena = "VEINTE"
If Unidad <> "0" Then
txtDecena = "VEINTI"
End If
Case "3"
txtDecena = "TREINTA"
If Unidad <> "0" Then
txtDecena = "TREINTA Y "
End If
Case "4"
txtDecena = "CUARENTA"
If Unidad <> "0" Then
txtDecena = "CUARENTA Y "
End If
Case "5"
txtDecena = "CINCUENTA"
If Unidad <> "0" Then
txtDecena = "CINCUENTA Y "
End If
Case "6"
txtDecena = "SESENTA"
If Unidad <> "0" Then
txtDecena = "SESENTA Y "
End If
Case "7"
txtDecena = "SETENTA"
If Unidad <> "0" Then
txtDecena = "SETENTA Y "
End If
Case "8"
txtDecena = "OCHENTA"
If Unidad <> "0" Then
txtDecena = "OCHENTA Y "
End If
Case "9"
txtDecena = "NOVENTA"
If Unidad <> "0" Then
txtDecena = "NOVENTA Y "
End If
End Select If Decena <> "1" Then
Select Case Unidad
Case "1"
txtUnidad = "UN"
Case "2"
txtUnidad = "DOS"
Case "3"
txtUnidad = "TRES"
Case "4"
txtUnidad = "CUATRO"
Case "5"
txtUnidad = "CINCO"
Case "6"
txtUnidad = "SEIS"
Case "7"
txtUnidad = "SIETE"
Case "8"
txtUnidad = "OCHO"
Case "9"
txtUnidad = "NUEVE"
End Select
End If
ConvierteCifra = txtCentena & " " & txtDecena & txtUnidad
End Function



COMO CREAR UN FILTRO DE INTERVALO DE FECHAS UTLIZANDO UN FORMULARIO

Proceso:

1-Para realizar que la tabla donde se gurdan los datos tenga una calumna con valores de fecha.

2-Crea una consulta conlos campos de la tabla

3-Crea un Informe tomando como base la consulta que creaste

4-Crea un formulario con dos textbox y un botón los textbox deben tener formato de fecha.

5-Crea un módulo

Ahora:

A. Al módulo que creaste insertale este código:

Function IsLoaded(ByVal strFormName As String) As Integer
   
    Const conObjStateClosed = 0
    Const conDesignView = 0
   
    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
        If Forms(strFormName).CurrentView <> conDesignView Then
            IsLoaded = True
        End If
    End If
   
End Function

B.Al Botón del formularios en el evento "Al hacer Click" Insetra este código:

Nota: Los cadenas con azul, deben de ir los datos como los tienes en tu base de datos.


Private Sub Vista_previa_Click()
    If IsNull([Textbox1 del Formularios]) Or IsNull([TextBox2 del Formulario]) Then
        MsgBox "Debe introducir tanto los datos de inicio como los de fin."
        DoCmd.GoToControl "TesxBox1 del Formulario"
    Else
        If [TextBox1 del Formulario] > [TextBox2 del Formulario] Then
            MsgBox "La fecha de fin debe ser mayor que la fecha de inicio."
            DoCmd.GoToControl "TextBox1 del Formulario"
        Else
            Me.Visible = False
        End If
    End If
End Sub

C.En vista diseño del informe, en el evento "Al no haber datos" Inserta este código:
Nota: Las cadenas con azul, debe llevar los nombres como que se les dio a los conceptos.

Private Sub Report_NoData(Cancel As Integer)
    MsgBox "No hay datos para este informe. Cancelando el informe..."
    Cancel = -1
End Sub

En el evento "Al cerrar" inserta este:

Private Sub Report_Close()
    DoCmd.Close acForm, "Nombre del Formulario"
End Sub

En el evento "Al abrir" insertar este:

Private Sub Report_Open(Cancel As Integer)
    DoCmd.OpenForm "Nombre del Formulario", , , , , acDialog, "Movimientos"
    If Not IsLoaded("Nombre del Formulario") Then
        Cancel = True
    End If
End Sub

D. en vista diseño de la consulta en la linea de criterio de la columna fecha inserta esta instrucción:

Nota:Las cadenas con azul van los nombres de los objetos y controles
.

=[forms]![Nombre del Formularios]![TextBox1 del Formulario] Y <=[forms]![Nombre del Formulario]![TextBox2 de lFormulario]

Una ves realizado los pasos correctamente, puedes ejecutar el informe direcamente dado click sobre el nombre, por medio de una macro o deun botón de comando, cualquier que sea el caso, al momento de ejecutarse se activara el fumulario que pedira que se inserten las fechas:





COMO PONER UN AUTONUMERICO DESDE VISUAL BASIC

En ocaciones no deseamos poner el autonumerico que Ms-Access proporciona, si no que deseamos elaborar uno propioen cual podamos adaptar a nuestra necesidades.

esto es muy sencillo en el evento "Al Abrir" del Formulario donde esta el campo autonumerioco inserta el siguiente código.

Me.Campor_del_en_el_Formulario= DMax("Nombre_del_Campo_en_la_Tabla","Nombre_de_la_Tabla") + 1

En este caso pusimos en el evento "Al Abrir el Formulario" puede ir encualquier otro evento, por ejemplo "Al hacer click de un botón".




COMO SUMAR UNA COLUMNA SEGUN DATOS DE UTRA COLUMNA CON LA FUNCION DSUMA

En este ejemplo vamos a tomar como ejemplo una tabla llamada "Clientes" que tiene cuatro columnas

1-Cod_Cte
2-Nombre_Cte
3-Cargos
4-Abonos

de esta tabla elaboramos in informe con los mismos campos, pero ademas en el pie de pagina del informe agregamos tres TextBox

1-Toral_Cargos
2-Total_Abonos
3-Saldo_Cte

Ahora en el evento "Al Activar" del informe insertamos el siguiente código:

Me.Total_Cargos = DSum("[Cargos]", "Clientes", "[Cod_Cte] =" & [Cod_Cte])

de esta forma sumaremos todas las cantidades de la columna Cargos de la tabla Clientes cuando el Cod_Cte sea igual al Cod_Cte impreso en el informe.




COMO SUMAR LOS DATOS DE UNA COLUMNA SEGUN DOS CONDICIONES CON DSUMA

En este ejemplo vamos a tomar como ejemplo una tabla llamada "Clientes" que tiene cuatro columnas

1-Fecha_Alta
2-Cod_Cte
3-Nombre_Cte
4-Cargos
5-Abonos

de esta tabla elaboramos in informe con los mismos campos, pero ademas en el pie de pagina del informe agregamos cuatro TextBox

1-Saldo_Inicial
1-Toral_Cargos
2-Total_Abonos
3-Saldo_Cte

suponiendo que el informe lo imprimimos usando un formulario llamado "Intervalo de fechas" que tiene dos campos

1-Fecha_Inicio
2-Fecha_Fin

Entonces la condición1 sera Cod_Cte del informe y la condición2 sera Fecha_Inicio del Formulario

Ahora en el evento "Al Activar" del informe insertamos el siguiente código

Me.Saldo_Inicial = DSum("[Cargos]", "Clientes", "[Cod_Cte] =" & [Cod_Cte] & " And [Fecha_Alta< Forms![intervalo de fechas]!Fecha_Inicio")

de esta forma determinamos en el campo "Saldo_Inicial" la sumatoria de la columna cargos siempre que el Cod_Cte de la tabla sea igual al Cod_Cte impreso en el informe y tambien cuando la Fecha_Alta de la tabla sea menor a la Fecha_Inicio del formulario





COMO SUMAR LOS DATOS DE UNA COLUMNA SEGUN TRES CONDICIONES CON LA FUNCION DSUMA

En este ejemplo vamos a tomar como ejemplo una tabla llamada "Clientes" que tiene cuatro columnas

1-Fecha_Alta
2-Cod_Cte
3-Nombre_Cte
4-Cargos
5-Abonos

de esta tabla elaboramos in informe con los mismos campos, pero ademas en el pie de pagina del informe agregamos cuatro TextBox

1-Saldo_Inicial
1-Toral_Cargos
2-Total_Abonos
3-Saldo_Cte

suponiendo que el informe lo imprimimos usando un formulario llamado "Intervalo de fechas" que tiene dos campos

1-Fecha_Inicio
2-Fecha_Fin

Entonces la condición1 sera Cod_Cte del informe y la condición2 sera Fecha_Inicio del formulario y la condición3 sera que el Nombre_Cte de la tabla no este vacio.

Ahora en el evento "Al Activar" del informe insertamos el siguiente código

Me.Saldo_Inicial = DSum("[Cargos]", "Clientes", "[Cod_Cte] =" & [Cod_Cte] & " And [Fecha_Alta]< Forms![intervalo de fechas]!Fecha_inicio" & " And NOT IsNull([Nombre_Cte])")

de esta forma determinamos en el campo "Saldo_Inicial" la sumatoria de la columna cargos siempre que el Cod_Cte de la tabla sea igual al Cod_Cte impreso en el informe, cuando la Fecha_Alta de la tabla sea menor a la Fecha_Inicio del formulario y cuando el Nombre_Cte no este vacio.




COMO ELIMINAR REGISTROS  EN UNA TABLA DE ACCESS SEGUN UNA CONDICION

1-Crea una macro nueva
2-En vista diseño de tu tu macro seleciona el concepto "ejecutar sentencia SQL"
3-En la parte inferion donde dice "Instrucción SQL" pega lo siguiente:

Delete  From Nombre_de_la_Tabla Where Nombre_de_la_Columna = "Condicion1"

realizaremos un ejemplo:

Suponiendo que tenemos una tabla llamada Clientes, esta tabla tiene cinco campos

1-Fecha_Alta
2-Cod_Cte
2-Nombre
3-Cargo
4-Abono

con la sentencia SQL vamos a eliminar de la tabla todos los registros en los que el campo Nombre se igual a cancelado

Nombre = Cancelado

quedara asi:

Delete  From Clientes Where Nombre = "Cancelado"

de esta forma se eliminaran todos los registros de la tabla clientes que digan cancelado




COMO MODIFICAR UN REGISTRO DE UNA TABLA SEGUN UNA CONDICION CON SQL



Tomando como referencia el ejemplo del tema anterios, una Tabla llamada "Clientes" con cinco campos.

1-Fecha_Alta
2-Cod_Cte
3-Nombre
4-Cargo
5-Abono

A. Creamos una macro nueva
B. En vista diseño seleccionamos "Ejecutar sentencia SQL"
C. En la parte inferior donde dice "Instrucción SQL" pegamos lo siguiente

supongamos que el registro lo estamos modificando desde un formulario llamado "Modificar_Poliza" que tiene dos campos y un boton con el que ejecutamos la macro.

El campo1 se llama Fecha
El campo2 se llama Numero

En este caso vamos a modificar la Fecha_Alta de la tabla con el valor que ponemos en el campo fecha del Formulario, Cuando el "Cod_Cte" sea igual al valor que ponemos en el campo "Numero" del Formulario.

Update Clientes set Fecha_Alta = Forms!Modificar_Poliza!Fecha where Cod_Cte=Forms!Modificar_Poliza!Numero

para realizar correctamente este proceso, debemos de tener un foumulario con los campos mensionados, en el campo numero ponemos un "Cod_Cte" existente en la tabla y en el campo "Fecha" ponemos una fecha cualquiera, al botón en el evento "Al hacer click" le asignamos que ejecute la macro




COMO CREAR UNA TABLA DE USUARIOS, CONTRASEÑAS Y CONTROL DE ACCESOS EN ACCESS

Dividiremos en etapas la creacion de este proyecto:

ETAPA I


Para crear un base se ususario y control de accesos, lo primero que debemos hacer es la tabla donde vamos a almacenar los nombres de usuario con su respectiva contraseña

entonces creamos una tabla a la que llamamos "Usuarios" con tres campos principales

1-Fecha_Alta
2-Usuario
3-Contraseña

en vista diseño de la tabla al campo "Fecha_Alta" le asignamos un formato tipo fecha y en las perte inferior en las propiedades del campo le ponemos en el concepto "Mascara de Entrada" el formato  99/99/00

99 significa dos datos numericos para el dia no obligatorios
/ separador
99 significa dos datos numerico para el mes no obligatorios
/ separador
00 significa dos datos numericos para el año obligatorios

ahora en el campo "Usuarios" le damos un formato tipo texto

al campo "Contraseña" le asignamos un formato tipo texto

luego para que al momento de escribir nuestra contraseña no sean visibles los caracteres

es decir si yo escribo 123456 aparesca ******

seleccionamos la linea del campo "Contraseña" en la parte de abajo en la propiedad "Mascara de entrada" escribimos Contraseña o le damos click al botón con tres puntitos que nos aparece a la derecha de ese concepto buscamos la mascara de entrada de Contraseña o Password.

Una ves configurados los tres campo principales, agregamos los campos secundarios a esta misma tabla...los campos secundarios son los que vamos a controlar con los datos de usuario y contraseña  es decir si en mi base de datos tengo un formulario para hacer facturas, otro para agregar clientes y otro para agregar productos entonces los campos secundarios llevaran como nombre una referencia a esos tres formularios, por ejemplo
mi tabla quedaria:

Campos Principales

1-Fecha_Alta
2-Usuario
3-Contraseña

Campos Secundarios

4-Factuta
5-Clientes
6-Productos

Total de campos o columnas

1-Fecha_Alta
2-Usuario
3-Contraseña
4-Factuta
5-Clientes
6-Productos

Ahora a los campos secundarios les daremos un formato de tipo Si/No

para cuando en el usuario que el campo secundario tenga la palomita "si" permita a ese usuario accesar al formulario indicado y si no tiene la palomita  "No" le niegue el acceso a dicho formulario.
una ves echo eso guardamos los cambios y cerramos la tabla

despues creamo un formulario nuevo tomando como origen la tabla que acabamos de craer alque llamamos "Usuarios".

Asta aqui concluimos la primera etapa.

ETAPA II


En esta segunda etapa vamos a crear la tabla donde vamos a al macenar el numero de accesos, quien entro, la fecha y la hora de entrada. y el formulario que se va a activar siempre que entremos a la base de datos que nos pedira el usuario y la contraseña.

Creamos una tabla a la que llamaremos "Accesos" a esta tabla le agregamos tres campos (Columnas)

1-Fecha
2-Usuario
3-Contraseña

Al campo fecha del damos un formato tipo fecha
Al Campo Usuario del damos un formato tipo texto
Al campo Contraseña le damo un formato tipo texto con una mascara de entrada tipo "contraseña" como en la etapa I

Una ves realizado esto guardamos los cambios y cerramos la tabla

despues creamos un formulario tomando como origen la tabla que acabamos de crear al que llamamos "Accesos"

pero ademas de los tres campos de la tabla a este formulario le insertamos un textbox mas al que llamamos "Clave2", despues seleccionamos el campo "Usuario" presionamos el boton derecho del mause, seleccionamos propiedades, en el cuadro propiedades en la pestaña de "Datos"  en el concepto "Activado" le ponemos "No" y en el concepto "Blokeado" le ponemos "Si", ahora seleccionamos el campo "Clave2" y repetimos el proceso que hicimos con el campo "Usuario" y lo mismo hacemos con el campo "Fecha" . Ahora tanto al campo "Usuario", "Clave2" asi como "Fecha" seleccionamos cada uno de ellos, teniendolos seleccionados  damos click en la barra de formato en el formato de color de fondo " (un bote vaciando pintura) le ponemos "transparente", lo mismo hacemos con el color de linea (pincel) le ponemos transparante y funalmente el color de texto (Una letra A) le asignamos el mismo color del formulario.

Lo anterio con el fin de que esos tres campos queden ocultos cuando el formulario este activo.

ahora el unico campo activo sera el de Contraseña, pero nos preguntamos y donde vamos a poner el usuario, bueno para solucionar esto lo que aremos es.

de la caja de herramientas que access nos presenta insertamos un "ComboBox" al que llamamos "User2" al momento de insertarlo se activara el cuadro del asistente, le damos cancelar a ese cuadro..

a la etiqueta del combobox le ponemos Usuario, despues seleccionamos el combobox, damos click al botón derecho del mause, seleccionamos propiedades,en el cuadro de propiedades damos click a la pestaña de "Datos", "Tipo de origen de la fila" seleccionamos "Tabla/Consulta", depues en la fila "Origen de control" pegamos lo siguiente:

SELECT [Usuarios].[Usuario], [Usuarios].[Contraseña] FROM Usuarios;

Lo que hicimos es asignarle al combobox dos clumnas de la tabla Usuarios, la de Usuario y la de contraseña.

Ahora volvemos a seleccionar el combobox, damos click al boton derecho del mause, seleccionamos propiedades, en el cuadro de propiedades damos click al la pestaña de "Evento" seleccionamos el eventos "Al salir" y sobre la misma fila pero en la parte derecha aparece un botón con tres puntitos, le damos click y nos aparece un cuadrito con tres opciones, seleccinamos "Generador de Código" al darle click se abrira el editor de Visual Basic, entonces copiamos y pegamos este código.

Me.Usuario = Me.User2.Column(0)
Me.Clave2 = Me.User2.Column(1)

Lo que hacemos con este código es que cada ves que salgamos del campo combobox que se llama "User2" el campo Usuario es igual al dato que tuene el la columna 0 (Cero) que viene siendo el nombre de usuario esto con la finalidad de que el usuario se registre y lo almacene en la tabla de accesos, tambien que el campo "Clave2" sea igual a la columna 1 del comobobox con la misma finalidad del campo Usuario.

Ahora a ese furmulario le insertamos dos botones de comando de la caja de herramientas de access. a un botón le ponemos "Salir" o al otro le ponemos "Accesar" al en el evento al "Hacer Click" del boton "Salir" pegamos este código.

On Error GoTo Err_Comando7_Click
DoCmd.Quit

Exit_Comando7_Click:
Exit Sub
Err_Comando7_Click:
MsgBox Err.Description
Resume Exit_Comando7_Click

Este código cierra la base de datos al hacer click

Ahora al Botón "Accesar" en el evento "Al hacer Click" pegamos este:

If Me.Clave2 = Me.Contraseña
On Error GoTo Err_Comando6_Click
Dim stDocName As String
Dim stLinkCriteria As String

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
stDocName = "Principal"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Me.Fecha = Now

Me.Visible = False

Exit_Comando6_Click:
Exit Sub
Err_Comando6_Click:
MsgBox Err.Description
Resume Exit_Comando6_Click

Else

MsgBox ("Contrasena Incorrecta")
DoCmd.GoToControl "User2"
End If

Este código valida que si la clave que se escribe en el campo "Contraseña" es igual a la registrada en la tabla "Usuarios" para ese usuario me abra el formulario "Principal", de lo contrario me mande el mensaje "Contraseña Incorrecta" y me pone el cursor nuevamente en el campo Usuario.

En este caso abrira el formulario "Principal", se puede indicar cualquir nombre de otro formulario siempre que exista.

Ahora para que cuando se active el formulario, el usuario no pueda cerrar o minimizar el mismo con los botones de la exquina suerior derecha vamos a desactivarlos.

En vista diseño del formulario en la parte superior izquierda donde hacen interseccion las reglas orizontal y vertical, en el cuadrito de la esquina, damos click haciendo que se marque con un punto negro, hay mismo damos click l botón derecho del mause seleccionamos propiedades, damos click a la pestaña "Todas" buscamos la propiedad "Botones Maximizar, Minimizar" en esa linea selecionamos "Ninguno" despues en la siguiente propiedad "Boton Cerrar" en la linea seleccionamos "No".

ahora cerramos y guardamos los cambios.

ahora para que este formulario se active siempre que accesamos a nuestra base de datos, en la barra de herramientas de la base de datos, seleccionamos "Inicio" aparece un cuadro con 5 campos en el campo superior de la derecha "Mostrar Formulario/Página" selecciommos este formulario.

Hasta aqui terminamos con la segunda etapa.


ETAPA III


En esta tercera etapa lo que aremos es crear un formulario con la opción autoformulario en el que insertaremos los botones de comando que usaremos para abrir los formularios y restringir los accesos cuando se trate de entrar a un formulario que no tiene permiso de accesar..

En este formulario insertamos un botón de comando, cuando se abra el cuadro del asistente le damos cancelar luego le damos doble click sobre el botón para editar el texto que llevara le ponemos "Ver/Agregar Clientes" depues en el evento al hacer click de ese botón pegamos ese codigo


If DLookup("Clientes", "[Usuarios]= Forms!Accesos.Form!User2") = True Then

On Error GoTo Err_Comando3_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "Clientes"
DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.GoToRecord , , acLast

Exit_Comando3_Click:

Exit Sub

Err_Comando3_Click:
MsgBox Err.Description
Resume Exit_Comando3_Click
Else MsgBox ("Acceso Restringido")
End If

Lo que indicamos en este código es que al momento de hacer click en el botón que me abrira el formulario "Clientes". Primero valida si, el campo "Clientes" de la tabla "Usuarios" es igual a "True" (Que si tiene palomita) en el usuario que esta activo en el formulario "Accesos" si se cumple la condición me abre el formulario "Clientes" y me manda al ultimo registro (acLast), de lo contrario me mandara un mensaje "Accesos Restringido".

para restringir los demas accesos pegamos el mismo código en el evento al hacer click de cada botón solo cambiamos los datos con azul segun sea cada uno de los nombres.

para permitir el acceso solo quite la palomita en el formulario "Usuarios" segun sea el caso.

Asta qui terminamos con la tercera y ultima etapa..

Dudas sobre este y cada uno de los temas manda un mensaje al administrador




CONCEPTOS BASICOS DE MS-ACCESS

Definición de Tabla

Una tabla es un área de disco o memoria que almacena informaciones sobre alguna cosa, por ejemplo, una relación de empleados. Las informaciones de cada empleado constituyen un registro. Una determinada información constituye un campo.

Además del tipo, cada campo posee características adicionales que eventualmente dependen de su tipo. Por ejemplo, campos textuales poseen una extensión máxima en número de caracteres. Por otro lado, en campos numéricos las informaciones son almacenadas en diferentes formatos internos del computador: como número entero, como número fraccionario, como número fraccionario de doble precisión, etc. Todas estas características precisan ser especificadas cuando se crea una nueva tabla

Base de Datos.

Usualmente también es necesario especificar para cada tabla cual es el campo (o conjunto de campos) que identifica unívocamente cada registro. Este campo es denominado Llave Primaria. En el ejemplo dado, la llave primaria más natural es el campo número de empleado ya que nunca tendremos dos empleados con el mismo número. El campo nombre del empleado no sería una buena selección porque podemos tener homónimos en la tabla. La llave primaria:
  • Determina el orden patrón según el cual los registros son listados en la tabla.
  • Impide que se alimenten dos registros con llaves idénticas.
 
Generar una nueva Tabla

La obtención de una nueva tabla es hecha a partir de la ventana Base de Datos seleccionando Tablas y picando en Nueva. Como respuesta aparece una ventana que permite alternativas para la definición de la tabla, en general interesa apenas la Vista Diseño. En el modo Diseño los campos son definidos, como así también sus respectivas propiedades.

Generalmente, El Access abre la Ventana Tabla. En caso de que eso no ocurra, basta con seleccionarla y en respuesta en la ventana aparecerán todas las tablas pertenecientes a la Base de Datos en cuestión.

Cuando una nueva tabla es creada, el Access le atribuye a ella el nombre de Tabla1. Este nombre será posteriormente alterado para el nombre definitivo de la tabla
Tipos y formatos de datos.

 
Cada campo contendrá datos de cierto tipo. El tipo de datos puede ser elegido en la lista accionada a través del botón de selección.

Tipos de datos

Texto: Máximo 255 caracteres
Memorando: Máximo 65.535 bytes (sentencias/párrafos)
Numérico: Tipo exacto depende del tamaño del campo
fecha/hora: Día y hora para años de 100 a 9999
Moneda: 15 dígitos a la izquierda y 4 a la derecha del punto decimal
Auto Numérico: Incrementado automáticamente al adicionar registro
Si/No: Valor booleano de 1 bit
Asistente para Búsqueda: Crea un campo cuyo valor puede ser elegido de una lista
Los campos de tipo número, pueden tener varios tamaños de campo que determinan su capacidad de almacenamiento de valores numéricos:

Tamaño Bytes Variación

Byte 1 0 a 255
Entero 2 -32.768 a 32767
Entero Largo 4 -2.147.483.648 a 2.147.483.647
Simple 4 -3.402.823E38 a 3.402.823E38
Doble 8 79.768.313.486.232E308 a 179.769.313.486.232E308

Además, los números pueden tener diversos formatos de exhibición. Los formatos apenas actúan sobre la forma como el dato es mostrado en la pantalla, él no altera la forma de almacenamiento interno. El número de lugares decimales también puede ser

seleccionado por el usuario:

Número general exhibe al número en formato Estándar
Moneda separa millares, muestra negativos entre paréntesis, con 2 decimales
Fijo exhibe como mínimo 1 dígito con dos decimales
Estándar ídem, además separa en millares
Porcentaje multiplica por 100 y adiciona el símbolo %
Científico usa anotación mantisa/exponente.

Las otras propiedades de los campos incluyen:

Máscara de entrada: usada para facilitar la entrada de dados
tulo: para ser usada en el lugar del nombre del campo en formularios
Valor predeterminado: valor que iniciala el campo.
Regla de validación: expresión que verifica la consistencia del dato alimentado (por ejemplo: >0 e < 100)
Texto de validación: mensaje de error al ser presentado si la regla de validación no fue satisfecha
Requerido: indica que este campo exige entrada de algún dato, si no fuera requerido, el campo admitirá el valor nulo (teclear ENTER)
Permitir longitud cero: se indica la cadena vacía ("") para componer texto constituir o no una entrada válida
Indexado: permite definir el campo como un índice para acelerar el acceso a las informaciones de la tabla.

Llave primaria.

Se debe informar para a cada tabla cual es el campo que constituye su llave primaria. Un campo es candidato a ser llave primaria si permite la identificación única de cada registro de la tabla. Para definir una llave primaria, realizar las siguientes operaciones:
  • Seleccione el campo que constituirá la llave primaria; si la llave fuera de múltiples campos, seleccione los campos apretando simultáneamente CTRL;
  • Cliquee el botón de la llave primaria en la barra de herramientas.
Para alterar el campo llave, simplemente se reposiciona sobre otro campo y pique el botón de la llave primaria.

En general es necesario definir una llave primaria para cada tabla. En la lista de empleados, el campo número de empleadoes el candidato más natural pues define precisamente cada empleado. El campo nombre del empleadosería un candidato si tuviéramos la certeza de que no existan homónimos en la lista.

Es posible crear tablas sin llave primaria, basta que el usuario responda No cuando el Access pregunte si desea o no crear una llave (la pregunta es hecha siempre que el usuario no hubiera accionado la definición a través del botón correspondiente).

Cuando el Access hace esta pregunta el usuario debe tomar cuidado pues la respuesta Si hace que el Access incluya, automáticamente, un campo más. Este es un campo de autonumeración que funciona como llave pues cada nuevo registro insertado él lo numera a través de este campo. En general el usuario no desea ese campo. Se sugiere que el usuario de cómo respuesta Cancelar volviendo a la ventana de diseño donde él puede elegir y definir el o los campos de la llave primaria.

Hoja de datos.

 
La entrada de datos (registros) en la pantalla es hecha por la hoja de datos accionada a través del botón en la barra de herramientas o por el botón Abrir en la ventana Base de datos. La figura 1.6 muestra la hoja de datos de la tabla Lista de Empleados.
Para eliminar registros, seleccione los registros y apriete DEL o apriete el botón de Eliminar registro. Para crear un nuevo registro basta posicionar el punto de inserción en una línea en blanco o picar en el botón de Nuevo registro situado en la barra de herramientas o en el borde inferior de la pantalla.

Para insertar registros, inserte siempre al final. Cuando en la pantalla esté representado el registro estará insertado de acuerdo con la llave primaria. Para alterar registros basta redigitar por encima del texto actual.

Se puede alterar el layout de la hoja de datos alterando la altura de las líneas, ancho de las columnas, fuentes para caracteres, etc. Para ello, utilizar del menú Formato las opciones allá indicadas. La opción Inmovilizar columnas sirve para fijar la columna donde está el punto de inserción o columnas situadas a la izquierda de la ventana, evitando que ellas se vayan rotando hacia fuera. Para grabar los cambios del layout de la tabla basta clicar en el botón Guardar del menú Archivo. Al cerrar la tabla sin haber guardado las alteraciones, el propio Access abre un cuadro de diálogo preguntando si usted desea guardar el nuevo layout; en caso que Ud. quiera guardar pique en Si.

Para cambiar columnas de lugar, seleccione la columna, pique nuevamente en su título y arrástrelo para otra columna o al lado de la cual quiera ser insertada.

Se puede copiar, mover y remover datos/registros vía menú Edición y opciones Cortar, Copiar, Pegar, tradicionales en el ambiente Windows. Podemos copiar datos entre campos, copiar registros para el final de la tabla o copiar registros entre tablas diferentes. En este último caso la copia es hecha según el orden de los campos, independientemente del nombre de ellos. En el caso que se desee que la copia sustituya ciertos registros, esos deben ser seleccionados antes de usar Pegar. Si la copia fuera para el final de la tabla, utilizar Pegar datos anexados del menú Edición.

Para buscar datos en la tabla se puede accionar el botón correspondiente en la barra de herramientas o utilizar Buscar del menú Edición. En el cuadro de diálogo que aparecerá, Ud. puede elegir donde el dato debe ser buscado. En principio, la búsqueda será hecha en el campo donde está el punto de inserción. También es posible cambiar una información por otra a través de la opción Remplazar del menú Edición. En este caso es necesario proveer el valor a buscar y el nuevo valor que será atribuido.

Para mostrar en la hoja de datos apenas los registros que satisfagan determinada condición se debe especificar un filtro. El montaje de los filtros utiliza recursos análogos al de la construcción de consultas (como será visto mas adelante). Una vez especificados los criterios de selección de los registros, se aplica el filtro con el botón correspondiente. Para volver a visualizar todos los registros, se utiliza el botón Quitar filtro

Grabar tabla.

Podemos grabar la tabla vía menú Archivo y la opción Guardar. Si deseamos grabarla con otro nombre, utilizar la opción Guardar como. También será grabada la tabla si cerramos la ventana vía botón de cierre de Windows o vía Cerrar del menú Archivo. Observar que podemos minimizar la ventana Tabla vía botón de minimización Windows. Debe quedar claro que la operación de Guardar graba tanto estructura como contenido (registros) de la tabla.




SENTECIAS SQL

Que es SQL

SQL (Structured Query Language ó Lenguaje Estructurado de Consulta), es un lenguaje bastante sencillo, principalmente orientado a bases de datos y, sobre todo, al manejo de consultas. Visual Basic incorpora esta extensión junto a nuestras bases de datos, obteniendo potentes resultados. De hecho, las consultas que estan desarrolladas o basadas en este lenguaje, por lo que su implementación en Visual Basic no es complicada.

Donde Poner las Sentencia SQL

Las sentencias se puedenponerde 4 maneras

1-Deste el Editor de Visual Basic
2-En la Propiedad RecorSourse de un control
3-En el la linea de criterio de una consulta en vista diseño
4-Mediante una macro en vista diseño, seleccione una acccion "Ejecutar SQL", pegue en la propiedad de "Instruccion SQL". 


He aquí una serie de consejos que hay que tener en cuenta a la hora de escribir mandatos SQL en nuestras aplicaciones en Visual Basic:

1. Un mandato en SQL se expresa en una cadena de caracteres o String.

2. Dicho mandato se puede escribir en la propiedad RecordSource de un control Data (más adelante, podremos prescindir del control Data para realizar nuestras consultas), con el fin de crear una consulta en la interfaz.

3. Los nombres de los campos especificados (y de las tablas), que contengan más de una palabra, han de encerrarse entre corchetes ([nombre]). Como norma general, se suelen escribir siempre entre corchetes.
4. Para un determinado campo de una determinada tabla, se ha de escribir primero el nombre de la tabla, un punto y, a continuación, el nombre del campo (nombre_tabla.nombre_campo).

Para especificar un determinado campo de un formulario, se ha de especificar primero de que objeto estamos ablando, signo de admiración, nombre del formuario, signo de admiración, un punto la palabra Formulario, un signo de admiración y al final el nombre del campo.

Ejemplo:

Forms!Nombre_Formulario.Formulario!Nombre_campo

5. Al especificar una expresión de búsqueda, si ésta se refiere a una expresión de caracteres, éstos han de encerrarse entre comillas simples ('expresión_a_buscar').

6. Para especificar una fecha en una búsqueda, ésta debe encerrarse entre signos numeral

Ejemplo:

(#fecha#) en Access, Dbase X, etc., y entre comillas simples ('fecha') para bases sql Server, Informix, etc.

7. Si se utiliza la propiedad RecordSource del control Data, para crear nuestras consultas en SQL, tras introducir el mandato SQL (siempre como una expresión de cadena) es necesario refrescar el control Data (control_data.Refresh).


Mandato Sql Estándar


El lenguaje SQL está compuesto por una serie de sentencias y de cláusulas muy reducidas en número, pero muy potentes en efectividad. De entre todas las palabras, existen cuatro que son las más utilizadas, estando compuestas por una sentencia y por tres cláusulas:

SELECT lista_campos FROM lista_tablas [WHERE criterios [ORDER BY lista_campos]] ORDER BY

SELECT nombre, apellidos, telefono FROM clientes ORDER BY apellidos, nombre;

Crea una agenda telefónica de 'clientes' ordenada por 'apellidos' y 'nombre'


DELETE FROM

DELETE FROM pedidos WHERE [codigo cliente]=4 AND fecha=Now();

Elimina todos los registros donde Codgo Cliente es igual a 4 y la fecha es igual a la fecha actual


SELECT MIN FROM

SELECT MIN(unidades) AS minimo FROM pedidos;

Devuelve el pedido más pequeño y lo refleja en el campo 'minimo'.


SELECT MAX FROM

SELECT MAX(unidades) AS maximo FROM pedidos WHERE fecha=Now();

Retorna el pedido más grande de hoy y lo refleja en el campo 'maximo'.


SELECT MAX(gastos) AS maximo FROM diario;

Devuelve el gasto más costoso reflejado en el diario contable, y lo representa en el campo 'maximo'.


SELECT UPDATE SET WHERE

Update Cheques set Fecha_Pago = Forms!Modificar_Poliza!Fecha where Numero=Forms!Modificar_Poliza!Numero

Actualiza la Fecha de Pago de la tabla Cheques con el campo fecha del formulario Modificar_Poliza donde el campo Numero de la tabla es igual al campo numero del formulario Modificar_poliza.


SELECT FROM

SELECT * FROM Clientes;

Selecciona todos los campos de la tabla 'Clientes'.


SELECT nombre, apellidos, telefono FROM clientes;

Selecciona los campos 'nombre', 'apellidos' y 'telefono' de la tabla 'clientes'. De esta manera obtenemos una agenda telefónica de nuestros clientes.


SELECT WHERE

SELECT * FROM clientes WHERE nombre='JUAN';

Selecciona todos los campos de la tabla 'clientes', pero los registros de todos aquellos clientes que se llamen 'JUAN'.


SELECT * FROM CIUDADES WHERE provincia='MEXICO' OR provincia='GUADALAJARA OR provincia='MONTERREY';

Selecciona todos los campos de la tabla 'abonados', pero los registros de todos los abonados de las provincias de 'MEXICO', 'GUADALAJARA' o 'MONTERREY'.


SELECT nombre, apellidos FROM Emleados WHERE edad>=18;

Selecciona los campos 'nombre' y 'apellidos' de la tabla Empleados, escogiendo a aquellos Empleados que sean mayor de edad (a partir de 18 años).


SELECT * FROM abonados WHERE edad>=18 AND edad<=45;

Selecciona todos los Empleados con edades comprendidas entre los 18 y los 45 años.


SELECT * FROM Empleados WHERE edad BETWEEN 18 AND 45;

Selecciona todos los Empleados con edades comprendidas entre los 18 y los 45 años.


SELECT * FROM Histo WHERE fecha BETWEEN #1/1/10# AND #1/31/10#;

Selecciona los apuntes de 'Histo' realizados en Enero de1 2010.




COMO CARGAR LOS DATOS DE UN COMBOBOX A TEXTBOX EN UN FORMULARIO

En ocaciones deseamo traer los datos de una determinada tabla, llamando ya sea un folio, un nonbre etc..

para esto lo podemos hacer con un combobox, con el asistente de access es muy facil cargar los datos de una tabla o consula al mismo combobox, pero la pregunta es,
Como cargarlos de el ComboBox a los cuadros de texto del formulario?

bueno

suponiendo que tenemos una tabla llamada Clientes,l a tabla clientes tiene 5 campos.

1-Cod_Cte
2-Nombre
3-RFC
4-Dirección
5-Telefono

Tambien tenemos un formulario llamado factura con 7 campos en el encabezado.

1-Folio
2-Fecha
3-Cod_Cte
4-Nombre Cte
5-RFC
6-Direccion
7-Telefono

Logicamente si ya contamos con un catalogo llamado clientes, pues no es necesario volver a escribir cada uno de los datos siempre que elaboremos una factura nueva,

Para evitar eso, creamos un combobox ya sea con el asistente de access o con una sentencia SQL

Crear Un ComboBox con el asistente de Access

1-Estando en vista diseño del formulario donde vamos a insertar el combobox, aparece un cuadro de herramientas, da click en la herramienta de ComboBox, sin soltar el botón del mause arrastralo y sueltalo en la altura donde lo vas a insertar.

2-Se habre un cuadro del asistente de access, aparecen tres casillas de opción, selecciona la primera y da siguiente.

3-En la parte de abajo muestra tres casillas de opcion, 1-Tabla, 2-Consulta y 3-Ambas, en la parte de ariba muestra el listado de tablas o de consultas segun sea el caso, selecciona la tabla o consulta y presiona siguiente.

4-Aparece la lista de campos que tiene la tabla o consulta que seleccionaste, con los botones de > y >> brincalos al siguiente cuadro, presiona siguiente.

4-Aparece las columnas tal y como van a aparecer en tu combobox, importante, si no deseas que aparesca una columna solo ocultala, para ocultarla pon el indicador del mause entre dos columnas, cuando cambie de figura presiona el botón del mause  y sin soltarlo arrastralo hacia la izquierda hasta ocultarla, presiona siguiente.

Nota: esto no quiere decir que ya no este esa columna en el combobox, si no que nadamas esta oculta.

5-Despues aparece la lista de los campos del combobox, este paso lo puedes dejas asi, solo presiona siguiente.

6-En este paso, muestra dos casillas de opción seleciona el segundo y en cuadro selecciona el campo donde quieres que se almacen los valores qe tu vas a seleccionar en el combobox.

7-En este ultimo paso, solo pon el nombre de la etiqueta de tu combobox y presiona Finalizar

Crear un ComboBox sin usar el asistente de Access

1-En vista diseño del formulario, selecciona la herramienta combobox y insertalo como como se mensiona en el proceso anterior.

2-Cuando se habra el cuadro del asistente, presiona cancelar.

3-Selecciona el combobox, con el boton derecho del mause, selecciona propiedades, selecciona la pestaña de Dato.

4-En la propiedad:

Tipo de origen de la fila pon   Tabla/Consulta

Origen de la fila pega esto

 
SELECT [Clientes].[Cod_Cte], [Clientes].[Nombre], [Clientes].[RFC] ,[Clientes].[Direccion],[Clientes].[Telefono] FROM Clientes;

Esta es una instrucción SQL que reliza la misma función que el asistente, la ventaja que tiene es que si necesitamos aumentar o quitar una columna del combobox, solo le agregamos o le quitamos a la instrucción

Ejemplo si queremos quitar la columna de Telefono
 solo quitamos la parte de  
,[Clientes],[Telefono]

Ahora como agregar los datos del combobox a los cuadros de texto del Formulario

Para esto utilizamos el Visual Basic para que al salir del combobox automaticamente ponga los datos de los cuadros de texto segun el dato seleccionado.

Para esto, en vista diseño del formulario, seleccionamos el combobox, con el botón derecho del mause, seleccionamos propiedades, luego seleccionamos la pestaña
Eventos

Buscamos el evento "Al salir" sobre la misma linea pero a la derecha de ese evento, seleccionamos procedimiento de evento, luego damos click a un botoncito con tres puntitos que aparece a la derecha de la linea del evento seleccionado, damos click y aparece un cuadro con tres opciones, seleccionamos generador de código y damos Aceptar.

En el Editor de texto que se habre escribimos esto

Me.Cod_Cte = Me.ComboBox.Column(0)
Me.Nombre_Cte = Me.ComboBox.Column(1)
Me.RFC = Me.ComboBox.Column(2)
Me.Direccion = Me.ComboBox.Column(3)
Me.Telefono = Me.ComboBox.Column(4)

Cerramos el editor, cerramos el formulario y guardamos los cambios, una ves que vuelva a entrar al formulario, los campos se cargaran con los datos del combobox.




COMO GUARDAR DATOS DE  UN FORM DE EXCEL EN ACCESS

Vamos a hacer un ejemplo donde vamos a guardar datos de un formulario de Excel en una tabla de Access.

1-creamos una base de datos en Access y la llamamos "histo.mbd"
2-creamos una tabla nueva en esa base de datos y la llamamos "Movimientos"
3-ha esa tabla le ponemos 4 columnas 

a-"Codigo" con  tipo numerico
b-"Nombre" con tipo texto
c-"Cargo" con tipo numerico
d-"Abono" con tipo numerico

Una ves creado eso cerramos la base de datos guardando todos los cambios

Ahora creamos un archivo de excel con el  nombre que quieramos

entramos al editor de Vb con Alt + F11

Insertarmos un nuevo Formulario y le insertamos 4 TextBox y 2 botones de comando.

a-TextBox1
b-TextBox2
c-TextBox3
d-TextBox4

-Boton de Comando 1
-Boton de Comando 2

A los botones de comando les ponemos Aceptar y Cerrar respectivamente.

Ahora en el evento  Click al botón de Aceptar le pegamos este código

'Declaramos
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim n As Long
Dim nfila As String

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

'Habrir la Base de datos Histo
cn.Open "provider=microsoft.jet.oledb.4.0; " & "data source=" & ThisWorkbook.Path & "Histo.mdb;"

'Habrir la Tabla Movientos
rs.Open "Movimientos", cn, adOpenKeyset, adLockOptimistic, adCmdTable

'Insertar nuevos registro e igualarlos a los valores de los TextBox

With rs
.AddNew
.Fields("Codigo") = TextBox1
.Fields("Nombre") = TextBox2
.Fields("Cargo") = TextBox3
.Fields("Abono") = TextBox4
End With

With rs
.AddNew
.Fields("Codigo") = TextBox1
.Fields("Nombre") = TextBox2
.Fields("Cargo") = TextBox3
.Fields("Abono") = TextBox4
End With

'Cierra la Tabla Movimientos
Set rs = Nothing
cn.Close
Set cn = Nothing

MsgBox ("Datos guardados en Access con exito")

Despuesen el evento Click de botón canelar  le ponemos este codigo para que descarge elformulario.

Unload Me

Despues creamo una macro y le ponemos este código

Form1.Show

Despues creamos un botón en la hoja de Excel y le agregamos la macro que creamos.

Ahora ya esta listo, cuando ejecutes el formulario, los datos los guardara en la base datos Histo en la tabla Movimientos




COMO GUARDAR VALORES DE TEXTBOX INDEPENDIENTES EN UNA TABLA


En este ejemplo tenemos una tabla llamada Clientes con cinco columnas

1-"Fecha" tipo fecha
2-"Codigo" tipo numerico
3-"Nombre" tipo Texto
4-"Cargo" tipo numerico
5-"Abono" tipo numerico

Tambien tenemos un Formulario llamado Datos con 5 TextBox Independientes y un botón de comando.

Los nombre de los texbox son:

1-Fecha_Alta
2-Cod_Cte
3-Nombre_Cte
4-Cargo_Cte
5-Abono_Cte

Y el botón de comando lo llamamos Guardar_Datos.

En el evento Al hacer click del botón le insertamos este código.

DoCmd.RunSQL ("INSERT INTO Clientes (Fecha,Codigo,Nombre,Cargo,Abono) VALUES(Forms!Datos!Fecha_Alta,Forms!Datos!Cod_Cte,Forms!Datos!Nombre_Cte,Forms!Datos!Cargo_Cte,Forms!Datos!Abono_Cte)")

Los conceptos que estan entre los primeros dos parentesis pertenecen a los nombres de las columnas de la tabla.

Los datos con azul pertenecen a los nombres de los textbox independientes del formulario




COMO OCULTAR Y MOSTRAR LAS BARRAS DE HERRAMIENTAS EN ACCESS 2003 Y 2007

Access 2003

Ocultar

For i = 1 To CommandBars.Count
CommandBars(i).Enabled = False
Next i

Mostrar

For i = 1 To CommandBars.Count
CommandBars(i).Enabled = True
Next i

Access 2007

Ocultar

DoCmd.ShowToolbar "Ribbon", acToolbarNo

Mostrar

DoCmd.ShowToolbar "Ribbon", acToolbarYes




COMO OCULTAR Y MOSTRAR LA VENTANA DE BASE DE DATOS EN ACCESS 2003 Y 2007

Esta función es necesaria para ocultar esta ventana en versiones de access 97-2003 por lo que es importante cipiarla y pegarla en un nuevo módulo de Access.

Option Compare Database

Private Const SW_SHOWNORMAL = 1&
Private Const SW_HIDE = 0&

Private Declare Function ShowWindow Lib "user32" _
                (ByVal hwnd As Long, _
                ByVal nCmdShow As Long) As Long
               
Private Declare Function FindWindowEx Lib "user32" _
                Alias "FindWindowExA" _
                (ByVal hWnd1 As Long, _
                ByVal hWnd2 As Long, _
                ByVal lpsz1 As String, _
                ByVal lpsz2 As String) As Long
               
Private Declare Function GetWindowText Lib "user32" _
                Alias "GetWindowTextA" _
                (ByVal hwnd As Long, _
                ByVal lpString As String, _
                ByVal cch As Long) As Long

Function ShowDatabaseWindow(Show As Boolean)
Dim hWndMdi As Long
Dim hWndODb As Long
Dim hWndSDIa As Long
Dim sODb As String
Dim LensODb As Long

    hWndMdi = FindWindowEx(hWndAccessApp, 0&, "MDIClient", vbNullString)

    hWndODb = FindWindowEx(hWndMdi, 0&, "ODb", vbNullString)

    If hWndODb Then
        If Show Then
       
            ShowWindow hWndODb, SW_SHOWNORMAL
        Else
       
            ShowWindow hWndODb, SW_HIDE
        End If

        sODb = String(256, vbNullChar)
       
        LensODb = GetWindowText(hWndODb, sODb, 256&)
        sODb = Left(sODb, LensODb)
       
        hWndSDIa = FindWindowEx(0&, 0&, "MS-SDIa", sODb)
        If hWndSDIa Then
            If Show Then
           
                ShowWindow hWndSDIa, SW_SHOWNORMAL
            Else
       
                ShowWindow hWndSDIa, SW_HIDE
            End If
        End If
    End If

End Function

Una ves ya copiada la funcion en un módulo.

Access 2003

Ocultar

Call ShowDatabaseWindow(False)

Mostrar

Call ShowDatabaseWindow(True)


Ahora para ocultar y mostrar la ventana de base de datos en access 2007

Para Ocultar

1-Creamos una macro  en el argumento le ponemos EjecutarComando, en la propiedad del argumento seleccionamos Ocultar ventana, y la llamamos Oculta_Ventana

2-Desde Visual Basic la ejecutamos asi.

DoCmd.RunMacro ("Oculta_Ventana")

Para Mostrar

1-Creamos una macro en el argumento le ponemos EjecutarComando, en la propiedad del argumento seleccionamos Mostrar Ventana y la llamamos Mostrar_Ventana.

2-Desde Visual Basic la llamamos asi:

DoCmd.RunMacro ("Mostrar_Ventana")




CONSULTAS SQL PARA ENEXAR VARIOS REGISTROS A UNA TABLA

Una consula de se de Insertar (Insert Into) sirve para agregar uno o mas registros a una tabla. en este apartado veremos un ejemplo:

Como Agregar varios registros a una tabla:

Para este ejemplo creamos una tabla que es la que tendra la información.

Extructura de la Tabla

Nombre: Facturas
Columna1: Folio
Columna2: Fecha
Columna3: Cliente
Columna4: Importe_Neto
Columna5: Iva
Columna6 Total

Despues realizamos una copia identica de la tabla anterios y le ponemos como nombre Reporte_Facturas.

Ahora creamos una consulta de la tabla Facturas y le ponemos que filtre los registros por fecha.

Despues creamos una nueva consulta de la tabla Facturas y le ponemos, Agregar_a_Reporte_Facturas.

En esta ultima consulta, entramos en vista diseño, luego presionamos el botón derecho del mause, y seleccionamos SQL, se abrira un editor de texto sql, borramos el código que tiene e insertamos este.

INSERT INTO Reporte_Facturas ( Folio, Fecha, Cliente, Importe_Neto, Iva, Total )
SELECT Consulta_Facturas.Folio, Consulta_Facturas.Fecha, Consulta_Facturas.Cliente, Consulta_Facturas.Importe_Neto, Consulta_Facturas.Iva, Consulta_Facturas.Total
FROM Consulta_Facturas;

Esta consulta sirve para agregar a la tabla Reporte_Facturas todos los registros filtrados en la consulta Consulta_Facturas.

Comprovar proceso:

1-Agregue manualmente en la tabla Facturas 10 registros con diferentes fechas.

2-En la consulta Consulta_Facturas, filtre por fecha, para esto entre en vista diseño de la misma, y en la linea criterio en la columna de fecha ponga #02/12/2010#, esto para filtrar los registros con fecha del 02 de Dic del 2010, aunque se puede poner cualquier otra fecha.

3-Una ves filtrados los registros en la consulta Consulta_Facturas, ejecutamos la consulta Agregar_a_Reporte_Facturas, en este paso pedira dos confirmaciones presione en si a las dos.

4-Abrimos la tabla Reporte_Facturas, debe tener los registros que se agregaron.

Archivo de Ejemplo en el apartado descarga de plantillas, busquelo con el nombre de Consultas.mdb o de click Aqui la clave para descargar es 147258




Con este código podemos importar una hoja de un archivo de excel con extención xls a una base de datos de access 2003 o 2007.

En este caso estoy importando un archivo xls que se encuantra en la ruta c:fact.xls, lo estoy importando a mi base de datos activa que se encuantra en la ruta C:cesarecontabilidad.mdb.

Agregue este código al evento del botón con el que quiere importar.

los textos con azul dentro del código, no son parte del mismo, son comentarios.....


Dim sTablaOrigen As String, sTablaDestino As String
Dim sConnect As String, sSQL As String
Dim cnnActiva As ADODB.Connection

DoCmd.RunSQL "drop table HistoFact"

' Establezco la conexión con la base de datos de Access,
' la cual será la base de datos «Activa»
Set cnnActiva = New ADODB.Connection

cnnActiva.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=c:cesarecontabilidad.mdb;"

sTablaDestino = "[Histofact]" 'nombre de la nueva tabla
sTablaOrigen = "[Sheet1$]"
'hoja uno

' Importo la tabla a la base de datos «Activa»
sConnect = "'C:fact' 'Excel 8.0;HDR=yes;'"

sSQL = "SELECT * INTO " & sTablaDestino & " FROM " & sTablaOrigen & " IN " & sConnect
cnnActiva.Execute sSQL

' Cierro la conexión
cnnActiva.Close




COMO IMPORTAR UNA BASE DE DATOS DBF A UNA TABLA DE ACCESS 2007 O 2003.

Estanto en tu base de datos access, crea un módulo nuevo, una ves creado el modulo pegale esta función

Conceptos

C: = Ruta donde esta la base de datos DBF que vamos a importar
tabla_importada = Nombre de la tabla que se guardara en acces una ves importada.

Function Importar()
On Error GoTo Import_Err

DoCmd.TransferDatabase acImport, "dBase 5.0", "C:", acTable, "FACT.DBF", "tabla_importada", False


Import_Exit:
Exit Function

Import_Err:
MsgBox Error$
Resume Import_Exit

End Function

Una ves hecho eso regresas al formulario desde donde vas a poner el botón para importar, y en el evento al hacer click del mismo llamas esa funcióm asi:    

Call Importar




COMO REALIZAR UNA CONSULTA CON DOS TABLAS

En este ejemplo estamos realizando una con consulta que trae los datos de clientes usando la tabla clientes y la tabla pedidos, en donde en la tabla pedidos la fecha es igual al 02/12/2010 y los Id de Clientes coinsiden con los Id de cliente de la tabla Pedidos.

Realiza una consulta nueva, en vista diseno, presiona el botón derecho del mause, selecciona SQL y pega este código, una ves pagado, adapaptalo a tus necesidades, cambiale los nombres de tablas y de campos segun tu base de datos.

SELECT clientes.Id_Cliente, clientes.Nombre, Clientes.RFC, Clientes.Direccion FROM clientes, pedidos WHERE pedidos.fecha Like '02/12/2010' And pedidos.id_cliente=clientes.id_cliente;




COMO GERERAR UNA NUEVA TABLA EN ACCESS

En este ejemplo veremos como generar una tabla con sentencias SQL para este ejemplo crearemos una nueva tabla con que se llamara Clientes con el campo código de tipo núnerico, el campo nombre de tipo texto con un largo de 50 caracteres y el campo dirección tambien de tipo texto con un largo para 50 caracteres

Realiza una consulta nueva, en vista diseño, presiona el botón derecho del mause, selecciona SQL y pega este código, una ves pagado, adapaptalo a tus necesidades, cambiale los nombres de tablas y de campos segun tu base de datos.

Create Table Prueba ( Codigo byte, Nombre text (50), Direccion text (50) )




COMO VALIDAR FECHAS CON VISUAL BASIC

En visual basic a diferencia de una formula de excel, los datos de fechas los toma como una cadena de texto, para eso usaremos la función DateTime es decir mi fecha es igual a DateTime.Date de esta forma validara si la fecha es igual a la fecha actual ejecute una macro, si no es igual que no la ejecute.

Me.fecha = DateTime.Date




PERMITIR SOLO SELECCIONAR DATOS DE LA LISTA EN UN COMBOBOX

Para impedir que un usuario escriba datos en un combobox, y solo le permita seleccionar los datos de la lista haremos lo siguiente.

En vista diseño del formulario, selecciona propiedades del combobox, en la pestaña Datos, en la propiedad Limitar Lista (List Limit) selecciona Si.




CONDICIONAR LA LISTA DE UN COMBOBOX O LISTBOX DE ACUERDO AL VALOR DE OTRO COMBOBOX O TEXTBOX

Para condicionar la lista de un combobox de acuerdo a un valor que se seleccione en otro combobox o un valor que se escriba en un textbox, haremos lo siguiente.

En vista diseño del formulario, selecciona propiedades del combobox, en la pestaña Datos, en la propiedad Origen de Control, antes de FROM, ponemos esta instrucción Where campo_de_la_tabla = ComboBox_o_TextBox.




MANEJO DE COLORES Y CONDICIONES EN MS ACCESS DESDE VISUAL BASIC

En este tema veremos como podemos aplicar colores tanto de texto como de fondo a un control de un formulario dependiendo de una condición.

Primero daremos una pequeña explicación del codigo de colores que podemos utilizar en access.

Utilizaremos el Modelo RGB por sus siglas en ingles Rojo, Verde y Azul (Red, Green, Blue). que son los tres colores primarios.

La Intensidad del colos va aumentando segun el código planteado por ejemplo:

Negro = RGB(0,0,0)

Blanco = RGB(255,255,255)

Rojo = RGB(255,0,09

Verde = RGB(0,255,0)

Azul = RGB(0,0,255)

Ya depende de nosotros si aumentamos o disminuimos la intensidad del color, ya que el verde el el tremino medio.

Ahora daremos unos ejemplos de como los podemos utilizar en access desde visual basic

Supongamos que tenemos un formulario con tres cuadros de texto, text1, text2 y text3., lo que deseamos hacer es que si escribimos 1 en el text1, el fondo del text2 se colore de rojo y la letra del text3 se colore de azul.

En El Evento al salir del text1 pegamos este código

If not isnull([Text1]) Then
Me.Text2.BackColor = RGB(255,0,0)
Me.Text3.ForeColor = RGB(0,0,255)
End If

De esta forma si nosotros ponemos 1 en el campo text1, el fondo del text2 lo pone de rojo y la letra del text3 la pone de azul.




COMO EJECUTAR SENTENCIAS SQL DESDE VISUAL BASIC EN ACCESS

En esta ocación veremos como podemos ejecutar diferentes sentencia sql desde visual basic para access.

Para los ejemplos siguientes, utilizaremos una tabla que se llamara clientes, esta tabla tendra una columna que se llamara Id, los botones los crearemos en un formulario que se llamara utilerias y que a su ves tenga un cuadro de texto que se llamara Id_Cliente y otro fecha_nueva

En este caso vamos a eliminar un regitro en la tabla clientes donde el id es igual al id_cliente del formulario utilerias.

DoCmd.RunSQL ("Delete from clientes where cd = forms!utilerias!id_cliente")

En este caso vamos a a modificar la fecha de registro del cliente en donde el id de la tabla clientes sea igual a id_cliente del formulario utilerias.

DoCmd.RunSQL ("Update clientes set fecha= forms!utilerias!fecha_nueva where id = forms!utilerias!dd_clientes")

En este caso vamos a seleccionar los registros de la tabla clientes e donde la fecha de registro sea igual a la fecha_nueva del formulario utilerias.

DoCmd.RunSQL ("Select * from clientes where fecha = forms!utilerias!fecha_nueva")




COMO REALIZAR BUSQUEDA DE DATOS EN ACCESS CON VISUAL BASIC

En este caso vamos a desarrollar un ejemplo para que al teclear un dato en un textbox, nos muestre en los demas textbox los datos relacionados al dato escrito.

Vamos a suponer que tenemos una tabla a la que llamamos productos y tiene la sigueinte extructura:

Productos:

Columna1 = Codigo1
Colimna2 = Nombre1
Columna3 = Precio1

Ahora creamos un formulario en blanco y le insertamos tres cuadros de texto, y los llamamos de la siguiente manera:

Cuadro de Texto1 = Codigo2
Cuadro de Texto2 = Nombre2
Cuadro de Texto3 - Precio2

Lo anterior es para diferenciar los nombres de los campos del formulario, con los nombres de las columnad de la tabla.

Ahora en vista diseño del formulario, seleccionamos el cuadro de texto Codigo2 y le con el botón derecho del mause le damos en propiedades, en el cuadro de propiedades, seleccionamos la pestaña de eventos, y en el evento Al Salir (To Exit), le damos click en ese evento y seleccionamos Generar Código.

Estando ya en el editor de visual basic, ponemos la diguiente instrucción.

Nombre2 = Dlookup("Nombre1","Productos","[Codigo1]="&[Codigo2])
Precio2 = Dlookup("Precio1","Productos","[Codigo1]="&[Codigo2])

De esta forma al teclear un código de un producto almacenado en la tabla, en el campo Nombre2 nos pondra el nombre del producto y en el campo Precio2 nos pondra el precio del producto.






COMO VERIFICAR SI UN REGISTRO EXISTE EN UNA TABLA DE ACCESS CON VB

Aqui mostramos un ejemplo en donde podemos verificar si un registro existe en la base de datos.

En este ejemplo vamos a verificar si existe un número de cheque en la tabla cheques, si el cheque existe nos enviara un mensaje con la expresión "El cheque ya existe" de lo contrario nos mandara un mensaje "El Cheque no existe"

Para esto debemos de tener una tabla llamada Cheques con una columna llamada Numero, crear un formulario e insertarle un botón, al botón lo llamamos Buscar luego insertamos un Textbox y lo llamamos Bus, despues copiamos el código y lo pegamos en el evento click del botón, una ves ya pegado, guardamos los cambios y ponemos el número de cheque a buscar en el campo Bus y presionamos el botón.

Private Sub Buscar_Click()

If Not IsNull([Bus]) Then

If DLookup("Numero", "Cheques", "[Numero]=" & [Bus]) <> 0 Then
MsgBox("El Cheque ya existe")

Else

MsgBox("El Cheque no existe")
End If
End If

End Sub




PONER VALORES DEL ELEMENTO ACTIVO DEL LISBOX EN TEXTBOX

En este ejemplO tenemos una tabla a la que llamamos (Catalogo) y tiene dos columnas (codigo y nombre), un formulario con tres controles:

LisBox1 (Le ponemos como nombre Lista1 y tiene las columnas cod y nom de la tabla Catalogo)
TexBox1 (Le ponemos como nombre codigo)
Texbox2 (Le ponemos como nombre nombre)

Lo que vamos hacer es que al momento de seleccionar un elemento en el lisbox (Lista1) nos muestre los datos de las columnas en los textboxs.

En el evento al hacer click del lisbox pegamos este código:


a = Me.Lista1.ListIndex
Me.codigo = Me.Lista1.Value
Me.nombre = Me.Lista1.Column(1, a)




ABRIR UN REGISTRO AL DARLE DOBLE CLICK EN UN LISBOX

En este caso tenemos tres objetos, Tabla1 (la llamamos Catalogo), Formulario1 (Lo llamamos Catalogo1) y Formulario2 (Lo llamamos Catalogo2).

La tabla catalogo a su ves tiene dos columnas (codigo y nombre)

El formulario Catalogo1 tiene un control de listbox llamado Lista1 con las columas codigo y nombre de la tabla catalogo

El formilario catalogo2 tiene dos controles que que son los campos codigo y nombre de la tabla catalogo

Ahora bien, lo que vamos hacer es que al memento de dar doble click en un elemento de la Lista en el formulario catalogo y que nos abra el formulario catalogo2 en el segistro seleccionado.

En el evento al hacer doble click del listbox (Lista1) pegamos este código.

DoCmd.OpenForm "Catalogo2", , , "[Catalogo.codigo] =" & Forms!Catalogo1!codigo




BUSQUEDA HACIA ATRAR O INVERSA EN ACCESS CON VBA

En este tema vamos a ver como podemos buscar un registro especifico hacia atras, es decir que nos busque el último registro que coincida con el valor buscado

En este ejemplo, la búsqueda la realizaremos en una tabla llamada clientes y a la ves esta tabla tiene los campos:

Id (autonumerico)
Cuenta (numerico)
Nombre (Texto)

Ahora creamos un formulario que tenga como orígen la tabla clientes, le agregamos los campos cuenta y nombre, despues le insertarmos un TextBox independiente y un botón de comando y al TextBox lo llamamos buscar

El Formulario quedara asi:

Cuenta (de la tabla)
Nombre (de la tabla)
TexBox1 (Independiente)= buscar

El TextBox3 llamado buscar,es donde vamos a poner el valor a buscar, en este caso vamos a buscar números de cuenta almacenadas en la tabla, y en el campo cuenta y nombre nos mostrara el ultimo registro almacenado con esa cuenta.

por ejemplo si tenemos almacenado en la tabla 5 registros con la cuenta 4000 y deseamos que al momento de buscar nos muestre el ultimo registro almacenado de esa cuenta.

En el evento al hacer click del bóton pegamos este código

If Not IsNull([buscar]) Then
a = DMax("Id", "clientes", "[Cuenta]=" & [buscar])
DoCmd.GoToRecord , clientes, acGoTo, a
Me.Refresh
Else MsgBox "Ponga la cuenta a buscar", vbInformation, "Nombre Negocio"
End If

Ahora bien con este código buscamos el registro anterior en donde la cuenta de la tabla sea igual al valor que se encuantra en el campo buscar del formulario

Para esto, le insertamos otro botón al formulario y le ponemos Anterior, en el evento al hacer click de dicho botón le pegamos el siguiente código

DoCmd.SearchForRecord acDataTable, "clientes", acPrevious, "Cuenta =" & Forms!formclientes!buscar