Tutoriales Access
RegresarFUNCION 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 accessUna 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 columnas1-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 columnas1-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 columnas1-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 nueva2-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 TablaUna 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.
Base de Datos.
- 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.
seleccionado por el usuario:
- 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.
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.
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
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:
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