Académique Documents
Professionnel Documents
Culture Documents
Actualizado el 05-Oct-1999
Contenido:
1.Copiar la estructura de una tabla con Access
2.Ordenes SQL para cambiar los datos de una tabla.
3.Caracteres no "standards" en los nombres de los campos
4.Procesar una consulta SQL (Execute)
5.Procesar una consulta SQL creando un Recordset
6.Evitar el error al asignar un Null
7.Comprobar si un registro se est editando
8.Asignar a un Recordset los registros deseados
9.Compactar una base de datos, usando cdigo VB (27/Feb)
10.Crear una base de datos, usando cdigo VB (18/Abr)
11.Como crear un Formulario de Datos con un Grupo de Registros Subyacente (18/Abr)
12.Cambiar los caracteres extraos por ? (para usar en las consultas a bases de datos con LIKE) (20/Abr)
13.Procesar el resultado de una consulta con varias tablas para evitar registros duplicados (13/Jul)
14.Programacin sobre la seguridad de Access (31/Ago)
15.Un mtodo rpido para efectuar bsquedas (8/Sep)
16.Enumerar las tablas de una base de datos (17/Sep)
17.Capturar errores de ODBC (9/Abr/98)
18.Acceso a bases de datos SQL Server...
19.Cargar Imagenes de una base de datos sin usar el DataControl
20.Acceder a bases de Access 2000 (usando el datacontrol de ADO) (31/Ago/99)
21.Acceder a bases de datos usando ADO (sin el data control) (31/Ago/99)
22.Acceder a bases de datos de Access 2000 con el VB5 (05/Oct/99)
Por ejemplo si tenemos una base de datos con nuestra coleccin discogrfica, podramos hacer una
consulta
con todos los CD's de Phil Collins
Suponiendo que el formato de los discos (CD, LP, etc.) es Formato y el Nombre del Autor est en
Cantante, la
orden a ejecutar sera:
SQLTmp = "SELECT * FROM mis_discos WHERE Formato Like '*CD*' AND Cantante Like '*Phil
Collins*'"
Por supuesto se puede usar = en lugar de Like, si estamos seguros de que no necesitamos los comodines,
ya
que la consulta es "bastante" ms rpida. Es decir quedara as:
SQLTmp = "SELECT * FROM mis_discos WHERE Formato = 'CD' AND Cantante = 'Phil Collins'"
'Ejecutar orden SQL con los datos solicitados
'Db ser una base de datos:
'Dim Db As Database 'Variable para las Bases de Datos
'Set Db = OpenDatabase("Nombre_Base_Datos")
Dim SQLTmp As String
Dim MySnap As Recordset
SQLTmp = "select * from " & Nombre_Tabla & " <Consulta> " & " order by " & Clasificar
Set MySnap = Db.OpenRecordset(SQLTmp, dbOpenSnapshot)
Err = 0
MySnap.MoveFirst
If Err Then
Err = 0
'no hay datos, avisar
MsgBox "No hay datos que coincidan con la bsqueda especificada," & vbCrLf & "(o no est bien
realizada)", 64, "Listados"
Exit Sub
End If
'Aadir el resultado a un List
List1.Clear
MySnap.MoveFirst
Do Until MySnap.EOF
'Procesar los datos...
'
List1.AddItem MySnap("Cantante") & " " & MySnap("[Cancin]") '...y dems datos
MySnap.MoveNext
Loop
MySnap.Close
Data1.RecordSource = "SELECT * FROM Clientes WHERE Provincia = 'Mlaga' AND Coche = 'Si'
ORDER
BY [Poblacin]"
Fijate que Poblacin est entre corchetes, esto es necesario, porque la (o acentuada) es un caracter
"extrao" y se debe poner entre corchetes para que el Jet lo entienda. Lo mismo hay que hacer si el
nombre
del campo incluye espacios.
Otra cosa a tener en cuenta es que si usas =, el contenido del campo "debe coincidir exactamente", si en
Provincia tienes algo como: Mlaga (Andaluca), no lo "encontrar". Para que lo incluya tambin, cambia
el
signo igual por LIKE:
Data1.RecordSource = "SELECT * FROM Clientes WHERE Provincia LIKE '*Mlaga*' AND Coche =
'Si'
ORDER BY [Poblacin]"
Ms cosas, en la parte ORDER BY, se pueden incluir ms de un campo, separados por comas.
El asterisco (*) que hay despus de SELECT, es para que incluya todos los campos de la tabla.
Si slo quieres incluir algunos campos, especificalos en lugar del asterisco y separalos con comas:
Data1.RecordSource = "SELECT Nombre,Apellidos, [Poblacin], Provincia, Coche FROM Clientes
WHERE
Provincia LIKE 'Mlaga' AND Coche = 'Si' ORDER BY [Poblacin]"
'
'Primero la tabla de las tareas
Set Tb = Db.CreateTableDef("Tareas")
'Vamos a crear cada uno de los campos
Set Fd = Tb.CreateField("ID", dbLong)
'Ahora vamos a asignar las propiedades de contador, etc.
Fd.Attributes = dbAutoIncrField Or dbUpdatableField Or dbFixedField
Tb.Fields.Append Fd
'El resto de los campos
Set Fd = Tb.CreateField("Fecha", dbDate)
Tb.Fields.Append Fd
Set Fd = Tb.CreateField("Asunto", dbText, 255)
Tb.Fields.Append Fd
Set Fd = Tb.CreateField("Descripcion", dbMemo)
Tb.Fields.Append Fd
Set Fd = Tb.CreateField("FechaInicio", dbDate)
Tb.Fields.Append Fd
Set Fd = Tb.CreateField("FechaTermino", dbDate)
Tb.Fields.Append Fd
Set Fd = Tb.CreateField("Terminada", dbInteger)
Tb.Fields.Append Fd
'Creamos un ndice con el ID
Idx.Name = "PrimaryKey"
Idx.Unique = True
Idx.Primary = True
Idx.Fields = "ID"
Tb.Indexes.Append Idx
'Aadimos la tabla a la base
Db.TableDefs.Append Tb
'
'Creamos la otra tabla: Anotaciones
Set Tb = Db.CreateTableDef("Anotaciones")
'El campo ID, es el contador, etc.
Set Fd = Tb.CreateField("ID", dbLong)
Fd.Attributes = dbAutoIncrField Or dbUpdatableField Or dbFixedField
Tb.Fields.Append Fd
'El resto de los campos
Set Fd = Tb.CreateField("Fecha", dbDate)
Tb.Fields.Append Fd
Set Fd = Tb.CreateField("Tema", dbText, 50)
Tb.Fields.Append Fd
Set Fd = Tb.CreateField("Asunto", dbText, 255)
Tb.Fields.Append Fd
Set Fd = Tb.CreateField("Medio", dbText, 255)
Tb.Fields.Append Fd
Set Fd = Tb.CreateField("Localizacion", dbText, 255)
Tb.Fields.Append Fd
Set Fd = Tb.CreateField("Descripcion", dbMemo)
Tb.Fields.Append Fd
Set Fd = Tb.CreateField("Detalle", dbLongBinary)
Tb.Fields.Append Fd
'Creamos un ndice con el ID
Set Idx = Nothing
'Quitar la referencia anterior
Idx.Name = "PrimaryKey"
Idx.Unique = True
Idx.Primary = True
Idx.Fields = "ID"
Tb.Indexes.Append Idx
'Aadimos la segunda tabla a la base
Db.TableDefs.Append Tb
'Cerramos la base
Db.Close
MsgBox "Nueva base de datos " & sBase & " creada.", vbInformation
End Sub
End Function
Esto es un ejemplo de cmo se llamara a esta funcin, usando el dilogo de buscar y reemplazar:
iFFAtras = True
If gsBuscar(sBuscar, cFFAc_Buscar + cFFAc_Atras, "Buscar datos") > cFFAc_IDLE Then
sBuscar = Trim$(sBuscar)
If Len(sBuscar) Then
buscAtras = iFFAtras
'buscCompleta = iFFCompleta
YaEstoyAqui = True
LblStatus(1) = "Buscando " & sBuscar & "..."
DoEvents
'Usar una rutina del tipo consulta (SQL)
qID = BuscarEnBase(Text1(ControlActual).DataField & " LIKE '" & sBuscar & "*'")
If qID Then
Data1.Recordset.FindFirst "ID = " & CStr(qID)
If Data1.Recordset.NoMatch Then
qID = 0&
End If
End If
If qID = 0& Then
Beep
MsgBox "No se ha hallado el dato buscado en el campo: " _
& Text1(ControlActual).DataField, vbOK + vbInformation, "Buscar"