ayuda con bases de datos

alejandro
29 de Abril del 2004
Estoy comenzando en visual basic pero no entiendo como establecer las relaciones entre las tablas de una base de datos acces, Probe con las consulatas sql y ,me plantea el sistema que son de solo lecturalguien me podria poner un ejemplo de codigo de como agrgar registro a mi base con un recordsert y que respete las ralaciones

jorge "el jiujiu" perez
29 de Abril del 2004
no mames

joel perez cardiel
29 de Abril del 2004
n mames tu pendejo eres un hoji de la chingada pinche mediocre

Bartolom
29 de Abril del 2004
Las relaciones tienes que crearlas directamente en Access. En el menú herramientas, relaciones, seleccionas las tablas, los campos a relacionar y el tipo de relaciones. Debes elegir respetar integridad referencial. Y obviamente que el campo que haga de padre no tenga duplicados.

Saludos!
Bartolom

alejandro
29 de Abril del 2004
Si en el caso de Acces realizo las relaciones pero como las mando a llamar desde visual basic

Jose Oscar
29 de Abril del 2004
Alejandro te envie un cadigo a tu casilla de correo pero veo que no lo as recibibo... te pego el codigo que crea una base de datos, indices y dos relaciones.
Por favor amplia tu pregunta sobre las relaciones y que quieres hacer leyendo las relaciones desde visual basic en una base de datos....
Cambia la DbVersion30 por Dbversion40 si tienes Access 2000 y las referencias Dao 3.6 Objet Library en la siguiente linea..... y si quieres el lenguaje DbLangSpanish por DbLangGeneral...

Set BasDat = DbWEspac.CreateDatabase(App.Path & "" & NomBrDB, dbLangSpanish, dbVersion30)


Un saludo
jose oscar


Public Sub CrearBaseDatos()
Dim NomBrDB As String
NomBrDB = "Gimnasio Heredia 2004.mdb"

Dim DbWEspac As Workspace '*** Referencia DbWEspac como espacio de trabajo
Dim BasDat As Database '*** Referencia basdat como base de datos
Dim Tabl As TableDef '*** Referencia Tabl como una tabla
Dim Camp(5) As Field '*** Referencia Matriz de campos
Dim Indx As Index '*** Referencia un indice
Dim Rel As Relation '*** Referencia a una relacion

'*** Si la base de datos existe la elimina
'*** Sirve para corregir las propiedades y ver que pasa
If FileSystem.Dir(App.Path & "" & NomBrDB) <> "" Then
Decido = MsgBox("La base de datos de prueba existe. " & "[ " & NomBrDB & " ]" & Chr(10) & _
"¿¿Desea eliminarla??" & Chr(10) & Chr(10) & _
"Si - Se elimina y se crea nuevamente..." & Chr(10) & _
"No - Se sale de la ejecucion..." & Chr(10) & _
"Cancel - Pues tambien...Se sale de la ejecucion..." _
, vbYesNoCancel + vbDefaultButton2, "!!!Guarda canejooo!!!")

Select Case Decido
Case vbYes
FileSystem.Kill (App.Path & "" & NomBrDB)

Case vbNo
Exit Sub

Case vbCancel
Exit Sub
End Select
End If

'*** Prepara el espacio de trabajo que requiere la creacion de la Base de Datos
Set DbWEspac = DAO.DBEngine.Workspaces(0)

'*** Con el espacio de trabajo ya listo se crea la Base de Datso
Set BasDat = DbWEspac.CreateDatabase(App.Path & "" & NomBrDB, dbLangSpanish, dbVersion30)

'*** Se crea la pimer tabla [ Alumnos ]
Set Tabl = BasDat.CreateTableDef("Alumnos")

'*** CreatyeField(Nombre del campo, Tipo de datos, Longitud del campo)
'*** se crea el primer campo [ Nombre y apellido ]
Set Camp(0) = Tabl.CreateField("Nombre y Apellido", dbText, 60) '** DbText, Es campo sera texto

With Camp(0)
.Required = True '*** Se establece que es requerido a true
'*** Si Requery se omite se opta por "no requerido"
End With

Set Indx = Tabl.CreateIndex("PK_Nombre y Apellido Alumno")
With Indx
.Fields = "Nombre y Apellido"
.IgnoreNulls = False
.Required = True
.Unique = False
.Primary = True
End With
Tabl.Indexes.Append Indx

'*** Segundo campo !!no olvidar que es una matriz
'*** Si puusieramos With Camp(0) modificariamos la anterior, pero no esta
Set Camp(1) = Tabl.CreateField("Edad", dbInteger, 2) '*** DbInteger, sera numerico
'*** Size=2, de longitud 0 a 99
With Camp(1)
.Required = True
End With

Set Indx = Tabl.CreateIndex("IDX_Edad")
With Indx
.Fields = "Edad"
.IgnoreNulls = False
.Required = True
.Unique = False
End With
Tabl.Indexes.Append Indx

'*** 3° campo
Set Camp(2) = Tabl.CreateField("Importe Cuota", dbCurrency) '*** Dbcurrency, sera Moneda
With Camp(2)
.DefaultValue = "25.00" '*** Si se omite importe, se toma 25.00 por defecto
End With
Set Camp(3) = Tabl.CreateField("Tipo Entrenamiento", dbText)
With Camp(3)
.AllowZeroLength = True '*** se permite longitud zero
End With
Set Camp(4) = Tabl.CreateField("Rutinas", dbMemo) '*** DbMemo, soporta 32.767 caracteres
'*** !!!Flor de rutina!!!!
Camp(4).AllowZeroLength = True

Set Camp(5) = Tabl.CreateField("Observasiones", dbMemo) '*** DbMemo, 32767 caracteres
'*** Unas largas "Observasiones"
'*** Tabl.Field.Append "Nombre del Campo" significa....
'*** tabla.Compos.Agregar "Nombre del campo a agregar"

'*** Bucle For Next para agregar La matriz de campos creados "Dim Camp(5) As Field " ....

For G = 0 To 5
Tabl.Fields.Append Camp(G)
Next

'*** Una vez agregados Los Canpos a la tabla...
'*** se agrega la tabla creada a la base de datos "Dim Tabl as Tabledef"

BasDat.TableDefs.Append Tabl

'*** Otro metodo de creacion...
'*** tabla.Campo.Agregar tabla.CrearCampo()
'*** Y queda agregada inmediatamente, lo que reduce lineas de codigo

Set Tabl = BasDat.CreateTableDef("Entrenadores")
With Tabl
.Fields.Append Tabl.CreateField("Nombre Entrenador", dbText)
.Fields("Nombre entrenador").Required = True
.Indexes.Append .CreateIndex("PK_Nombre Entrenador")

With .Indexes("PK_Nombre Entrenador")
.Fields = "Nombre Entrenador"
.IgnoreNulls = False
.Required = True
.Unique = False
.Primary = True
End With
End With

'*** cuando se trabaja asi se requiere especificar tabla y Campo.....
'*** tabla("Nombre tabla").Field("Nombre Campo").propiedad a asignar
'*** en este caso no se requiere Tabla("Nombre"), porque "Set Tabl = BasDat.CreateTableDef("Entrenadores") hace referencia al objeto

With Tabl
.Fields.Append Tabl.CreateField("Sueldo Entrenador", dbCurrency)
.Fields("Sueldo Entrenador").Required = True
End With

With Tabl
.Fields.Append Tabl.CreateField("Tipo entrenamiento", dbText, 60)
.Fields("Tipo entrenamiento").Required = True
.Fields("Tipo entrenamiento").DefaultValue = "Culturismo"
End With



With Tabl
.Fields.Append Tabl.CreateField("Direccion Entrenador", dbText)
.Fields("Nombre entrenador").Required = True
End With

With Tabl
.Fields.Append Tabl.CreateField("Telefono Entrenador", dbText)
.Fields("Nombre entrenador").AllowZeroLength = True
End With

BasDat.TableDefs.Append Tabl

'*** De un saque creamos 1 tabla "Ejercicio de Alumnos" .....
'*** Con 5 campos [ alumno, Edad, Entrenado por, Rutina, indicaciones complementarias ]

Set Tabl = BasDat.CreateTableDef("Ejersicio de Alumnos")
With Tabl
.Fields.Append .CreateField("Alumno", dbText)
.Fields("Alumno").Required = True

.Fields.Append .CreateField("Edad", dbInteger, 2)
.Fields("Edad").Required = True

.Fields.Append .CreateField("Entrenado por", dbText)
.Fields("Entrenado por").Required = True

.Fields.Append .CreateField("Rutina", dbMemo)
.Fields("Rutina").Required = True

.Fields.Append .CreateField("Indicaciones complementarias", dbMemo)
.Fields("Indicaciones complementarias").AllowZeroLength = True
End With
BasDat.TableDefs.Append Tabl

'*** Las relaciones se crean "sobre" la Base de datos, no "sobre" la tabla...
'*** Creamos la relacion "Rel_Ejercicio alumnos"

Set Rel = BasDat.CreateRelation("Rel_Ejersicio alumnos") ' *** Entre parentesis nombre de la relacion
With Rel
.Table = "Alumnos" '*** Table: es la tabla que pide los datos
.ForeignTable = "Ejersicio de Alumnos" '*** ForeignTable: es la tabla que aporta los datos
.Fields.Append .CreateField("Nombre y Apellido") '*** se agrega un campo a la relacion....
'*** basado en Campo valido de Tabla="Alumnos"
.Fields("Nombre y Apellido").ForeignName = "Alumno" '*** Tabla "nombre y Apel..".Asiste="Alumno"

'** .Fields("nombre de un campo de Table="Alumnos").ForeignName="Nombre de un campo de ForeignTable="Ejercicio de Alumnos"

End With
BasDat.Relations.Append Rel

Set Rel = BasDat.CreateRelation("Rel_Entrenador")
With Rel
.Table = "Entrenadores"
.ForeignTable = "Ejersicio de Alumnos"
.Fields.Append .CreateField("Nombre Entrenador")
.Fields("Nombre Entrenador").ForeignName = "Entrenado por"
End With

BasDat.Relations.Append Rel


'*** Y cerramos la base de datos....
'*** !!!que alguien en tienda esta base de datos!!!... eso es otro cantar...

BasDat.Close


End Sub