Imprimir página | Cerrar ventana

Crear Tablas y campos de access con códig

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Otros Productos Microsoft
Descripción del foro: PowerPoint, Navision, Visio, FrontPage, InfoPath etc
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=42671
Fecha de impresión: 17/Noviembre/2019 a las 06:38


Tema: Crear Tablas y campos de access con códig
Publicado por: mvillagran
Asunto: Crear Tablas y campos de access con códig
Fecha de publicación: 18/Octubre/2007 a las 15:16
Necesito Crear una base de datos, tablas y campos de Access con puro cósigo fuente, sin botones ni Data Grid desde un Form Load de Visual Basic .Net o visual 2005.Cry



Respuestas:
Publicado por: CarCar
Fecha de publicación: 18/Octubre/2007 a las 15:18
Hola:

Pues lo quitamos del foro de Access y lo pasamos al de otros sistemas.


-------------

Si realmente estás agradecido, pásate por http://www.mvp-access.com/foro/foroonline.htm


Publicado por: mvillagran
Fecha de publicación: 18/Octubre/2007 a las 15:24
Ok, muchas gracias es que todavía no me ajusto a como preguntar a los foros.
 
Saludos


Publicado por: raipon
Fecha de publicación: 18/Octubre/2007 a las 19:06
Hay varios caminos que puedes seguir.
 
- Utilizar alguna libreria que te permita interactuar con Access, para crear la base de datos y los demás objetos, mediante los métodos propios de dicha libreia. Caso de Dao, Ado, Adox, etc. 
 
- Utilizando el acceso que brindan al entorno de Access los métodos anteriores, enviar sentencias sql de tipo DDL, (Create Table, Create View, etc) para crear los objetos.
 
Así que lo primero que debes decidir es en qué entorno te sientes más cómodo, para escoger una de las opciones.


-------------
Ramon desde Terrassa.

http://www.sqlraipon.blogspot.com/" rel="nofollow - Mi blog


Publicado por: mvillagran
Fecha de publicación: 19/Octubre/2007 a las 14:14
ANTES QUE NADA GRACIAS POR TU RECOMENDACIÓN, LO HE DECIDIDO DE LA SIGUIENTE MANERA, PERO AHORA MI PROBLEMA ES QUE NO PUEDO AGREGAR LOS CAMPOS A MIS TABLAS, EL CÓDIGO ESTA ASÍ:
 
Public Class Form1
    Dim db As ADODB.Connection
    Dim table As ADODB.Recordset
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim cat As New ADOX.Catalog
        Try
            ' Generamos una nueva base de datos Access 2000, 2002 ó 2003
            ' cat.Create("Provider = Microsoft.Jet.OLEDB.4.0;" & _
            '            "Data Source = C:\Documents and Settings\PERALTA\Mis documentos\PROYECTO ELECTRÓNICA\ELECTRONICA.mdb")
            ' Generamos una nueva base de datos Access 2007
            cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;" & _
                       "Data Source=d:\Nuevo1.accdb")
            ' Cerramos el objeto ADODB.Connection que ímplicitamente
            ' se ha originado al crear el archivo de información.
            CType(cat.ActiveConnection, ADODB.Connection).Close()
            MessageBox.Show("Se ha creado con éxito la base de datos.", _
                            "Crear base de datos", _
                            MessageBoxButtons.OK, _
                            MessageBoxIcon.Information)
        Catch ex As Exception
            MessageBox.Show(ex.Message, _
                            "Crear base de datos", _
                            MessageBoxButtons.OK, _
                            MessageBoxIcon.Error)
        Finally
            ' Quitamos las referencias a las instancias de los objetos creados.
            cat.ActiveConnection = Nothing
            cat = Nothing
        End Try
        db = New ADODB.Connection
        db.CursorLocation = ADODB.CursorLocationEnum.adUseClient
        db.Open("Provider=Microsoft.ACE.OLEDB.12.0;" & _
                       "Data Source=C:\Documents and Settings\PERALTA\Mis documentos\PROYECTO ELECTRÓNICA\ELECTRONICA.accdb")
        table = New ADODB.Recordset
        table.Open("create table clientes", db, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
 
'AQUI ES DONDE DEBO AGREGAR MIS CAMPOS Y NO ENCUENTRO LA FORMA

    End Sub
End Class
 
SI ME TIENES ALGUNA RECOMENDACIÓN O SOLUCIÓN TE LO AGRADECERÍA.
 
MANUEL VILLAGRÁN PRADO


Publicado por: raipon
Fecha de publicación: 20/Octubre/2007 a las 18:11
Bueno, te paso un ejemplo lo más esquemático y claro posible. Es para Access 2000, para otras versiones tendrás que modificar la propiedad Provider.
 
Dim cn As New ADODB.Connection
Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
    cn.Provider = "Microsoft.Jet.OleDb.4.0"
    cn.Properties("Data Source") = "C:\Nueva.mdb"
   
    'Creas la nueva base de datos en el directorio hacia donde apunta
    'la propiedad ConnectionString del objeto Connection
    cat.Create cn.ConnectionString
   
    'Creas la tabla Clientes con dos campos : IdCliente
    '(campo clave autonumérico) y Nombre (texto, de tamaño 50,
    'requerido, no admite cadenas vacias).
   
    With tbl
    Set .ParentCatalog = cat
    .Name = "Clientes"
    .Columns.Append "IdCliente", adInteger
    !IdCliente.Properties("AutoIncrement") = True
    .Columns.Append "Nombre", adVarWChar, 50
    !Nombre.Properties("Nullable") = False
    !Nombre.Properties("Jet OLEDB:Allow Zero Length") = False
    .Keys.Append "Pk_IdCliente", adKeyPrimary, "IdCliente"
    End With
   
    cat.Tables.Append tbl
   
    'Cierras los objetos y liberas las variables :
    cat.ActiveConnection.Close
    Set cat = Nothing
   
Adios, un saludo.


-------------
Ramon desde Terrassa.

http://www.sqlraipon.blogspot.com/" rel="nofollow - Mi blog


Publicado por: mvillagran
Fecha de publicación: 22/Octubre/2007 a las 03:11

Antes que nada te agradezco tu recomendación sobre el ejemplo que me pusiste, el cual funciona perfectamente, lo agregue en un form diferente y si funciona, pero lo resolví de la siguiente manera, espero que mi ejemplo sirva para alguien más necesite realizarla de esa manera:

Public Class CONTRASEÑA

Dim db As ADOX.Catalog

Dim db1 As ADODB.Connection

Dim table1 As ADODB.Recordset

Dim table2 As ADODB.Recordset

Dim table3 As ADODB.Recordset

Dim table4 As ADODB.Recordset

Dim table5 As ADODB.Recordset

Private Sub CONTRASEÑA_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim cat As New ADOX.Catalog

Try

' Generamos una nueva base de datos Access 2000, 2002 ó 2003

' cat.Create("Provider = Microsoft.Jet.OLEDB.4.0;" & _

' "Data Source = C:\Mis documentos\Nuevo1.mdb")

' Generamos una nueva base de datos Access 2007

cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;" & _

"Data Source=C:\Documents and Settings\PERALTA\Mis documentos\PROYECTO ELECTRÓNICA2\APARATOS.accdb")

' Cerramos el objeto ADODB.Connection que ímplicitamente

' se ha originado al crear el archivo de información.

CType(cat.ActiveConnection, ADODB.Connection).Close()

MessageBox.Show("Se ha creado con éxito la base de datos.", _

"Crear base de datos", _

MessageBoxButtons.OK, _

MessageBoxIcon.Information)

Catch ex As Exception

MessageBox.Show(ex.Message, _

"Crear base de datos", _

MessageBoxButtons.OK, _

MessageBoxIcon.Error)

Finally

' Quitamos las referencias a las instancias de los objetos creados.

cat.ActiveConnection = Nothing

cat = Nothing

End Try

db1 = New ADODB.Connection

db1.CursorLocation = ADODB.CursorLocationEnum.adUseClient

db1.Open("Provider=Microsoft.ACE.OLEDB.12.0;" & _

"Data Source=C:\Documents and Settings\PERALTA\Mis documentos\PROYECTO ELECTRÓNICA2\APARATOS.accdb")

table1 = New ADODB.Recordset

table1.Open("create table ADMINISTRADOR (ID COUNTER,ADMINISTRADOR TEXT (35),CONTRASEÑA TEXT(25))", db1, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

table2 = New ADODB.Recordset

table2.Open("create table USUARIOS(ID COUNTER,USUARIO TEXT (35),CONTRASEÑA TEXT (25))", db1, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

table3 = New ADODB.Recordset

table3.Open("CREATE TABLE ARTICULOS (ID COUNTER, CLAVEARTICULO TEXT(25),ARTICULO TEXT (45),PRECIO LONG,LINEA TEXT (30),CANTIDAD LONG)", db1, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

table4 = New ADODB.Recordset

table4.Open("create table NUEVO(ID COUNTER, NOM TEXT(35),APP TEXT (25), APM TEXT(25),DEPTO TEXT (20),CCONTROL TEXT (25))", db1, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

table5 = New ADODB.Recordset

table5.Open("INSERT INTO ADMINISTRADOR (ADMINISTRADOR,CONTRASEÑA) VALUES ('MANUEL',640324)", db1, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

End Sub

Todo esto es para crear base de datos, tablas y sus respectivos campos en Access 2007.

Wink
 
Nuevamente te agradezco la ayuda y seguiremos participando en los foros


Publicado por: mvillagran
Fecha de publicación: 22/Octubre/2007 a las 03:14

Agradezco a los que participaron en este foro, lo he resuelto y aca dejo el código para alguien más le sea de utilidad.Clap



Publicado por: raipon
Fecha de publicación: 22/Octubre/2007 a las 08:36
Me alegro que lo tengas solucionado. De todas formas, y por si quieres optimizarlo algo más, te recomiendo que para consultas de acción e instrucciones DDL, no utilices objetos recordset, sino el método execute de los objetos Connection o Command :
 
db1.Execute "Create Table ...", adExecuteNoRecords
db1.Execute "Create Table ...", adExecuteNoRecords
... etc
 
Como ves, puedes prescindir de todas las variables tableN, y sin duda, el código se ejecutará con mayor rapidez, puesto que no intentará devolverte conjuntos de resultados.


-------------
Ramon desde Terrassa.

http://www.sqlraipon.blogspot.com/" rel="nofollow - Mi blog



Imprimir página | Cerrar ventana