Foros del Web » Programación para mayores de 30 ;) » Programación General »

Crear tablas Access con ADOX en VB

Estas en el tema de Crear tablas Access con ADOX en VB en el foro de Programación General en Foros del Web. Hola, Usando DAO, para crear una tabla Access y fijar los atributos y propiedades de las columna, se puede hacer con algo así: Dim dbDataBase ...
  #1 (permalink)  
Antiguo 22/03/2003, 20:25
jcl
 
Fecha de Ingreso: enero-2002
Mensajes: 673
Antigüedad: 22 años, 4 meses
Puntos: 1
Crear tablas Access con ADOX en VB

Hola,

Usando DAO, para crear una tabla Access y fijar los atributos y propiedades de las columna, se puede hacer con algo así:


Dim dbDataBase As Database

Dim TableDef1 As TableDef

Set dbDataBase = OpenDatabase(…..)

Set TableDef1 = dbDataBase.CreateTableDef(“MiTabla”)
….

With TableDef1
…….
…….
.Fields.Append .CreateField("Color", dbText, 10)
…….
…….
.Fields("Color").DefaultValue = "Amarillo"
…….
…….
End With

dbDataBase.TableDefs.Append TableDef1


Ello crea “MiTabla” y el “Valor predeterminado” de la columna “Color” se fija en “Amarillo” , es decir, que cada vez que se crea un registro, esa columna tendrá este valor por defecto.

Ahora bien, deseo hace eso mismo pero en lugar de utilizar DAO quiero usar ADOX, pero no se cual es el valor que se debe asignar y tampoco como se llama o cual es esta propiedad en ADOX que me permita hacer eso ¿alguien sabe?

Tengo identificadas (quince) 15 propiedades y las encontré en el forum de

www.freevbcode.com:

colAutoincrement = 0
colDefault = 1
colDescription = 2
colNullable = 3
colFixedLength = 4
colSeed = 5
colIncrement = 6
colValidationText = 7
colValidationRule = 8
colIISNotLastColumn = 9
colAutoGenerate = 10
colOneBlobPerPage = 11
colCompressedUnicode = 12
colAllowZeroLength = 13
colHyperlink = 14


Con ADOX la cosa sería algo así:
....
....
Set Table = New Table
Set Table.ParentCatalog = Catalog

With Table
....
....
.Columns.Append "Color", adVarWChar, 10
….

Bla, Bla, Bla ....

Aquí sólo estoy definiendo la columna pero no se como establecer el “Valor predeterminado”

Por favor, el que no sepa podría aprovechar su tiempo en otra cosa, en lugar de auto invitarse en participar o decir u opinar sobre este tema si conocer sobre el asunto.

(Recuerden, es ADOX y no otra cosa )

Gracias.
  #2 (permalink)  
Antiguo 24/03/2003, 05:25
 
Fecha de Ingreso: abril-2002
Mensajes: 438
Antigüedad: 22 años
Puntos: 2
Tenía ADOX por los suelos, me tocó en su momento pero hacía tiempo que no lo usaba. He revisado el código que tengo y en su momento lo logré así:

Set tuColumna=new Adox.column
with tuColumna
.name="lo que sea"
' continua especificando lo que sea
properties("Default")= ... ' valor por defecto dependiendo del tipo de dato que tengas en la columna
end with
' Y ahora lo añades a la tabla que has definido
tuTabla.Columns.Appende "lo que sea"

Ya dices algo.

Saludos.
  #3 (permalink)  
Antiguo 24/03/2003, 10:19
jcl
 
Fecha de Ingreso: enero-2002
Mensajes: 673
Antigüedad: 22 años, 4 meses
Puntos: 1
Gracias Amigo ...

Gracias Amigo,

Muy gentil de tu parte, lo probaré a ver si salgo de mi tormento ...

Saludos.
  #4 (permalink)  
Antiguo 24/03/2003, 10:58
jcl
 
Fecha de Ingreso: enero-2002
Mensajes: 673
Antigüedad: 22 años, 4 meses
Puntos: 1
No existe esa propiedad en la colección ...

Lo lamento pero me da error, el cual explica que properties("Default") no existe en la colección de los items respectivos.

Suena lógico, pues el nombre de las peopiedades nunca se dan como si fuera un texto cualquiera, quizás deba ser algo así como colDefault , por ejemplo, aunque probé con eso pero igual me dice que no existe.

Creo de debes seguir revisando, tal vez tomaste algún código equivocado ... tu sabes, eso pasa mucho ...

Saludos.
  #5 (permalink)  
Antiguo 25/03/2003, 02:34
 
Fecha de Ingreso: abril-2002
Mensajes: 438
Antigüedad: 22 años
Puntos: 2
Revisaré el código, aunque sigo considerando que es correcto. Eso sí, respecto a tu comentario:

"Suena lógico, pues el nombre de las peopiedades NUNCA se dan como si fuera un texto cualquiera, ...."

Pongo en mayúsculas la palabra nunca ya que demuestra claramente que ADO no es tu fuerte (mira la colección properties de los objetos básicos de ADO: el connection, el recordset, el command y el field). Y no sólo en ADO sino en otros muchos controles tienes colecciones a los que se les pasa el argumento como parámetro de texto. Para usar la palabra nunca tienes que estar muy seguro de lo que dices, o por lo general siempre acabas metiendo la pata.

Lo dicho, reviso el código y te digo algo.

Saludos.
  #6 (permalink)  
Antiguo 25/03/2003, 02:35
 
Fecha de Ingreso: abril-2002
Mensajes: 438
Antigüedad: 22 años
Puntos: 2
De todas maneras y por ahorrarme tiempo:

¿¿Puedes poner el código que estás utilizando (el que te genera el error) ??

Así lo reviso.

Saludos.
  #7 (permalink)  
Antiguo 25/03/2003, 06:00
jcl
 
Fecha de Ingreso: enero-2002
Mensajes: 673
Antigüedad: 22 años, 4 meses
Puntos: 1
Aclaratoria ...

OK,

Sin ánimo de establecer polémica sobre este asunto y de allí mi aclaratoria cuando escribí en el primer mensaje (Recuerden, es ADOX y no otra cosa) , te lo repito NUNCA puedes usar .Properties("UnTexto") por la sencilla razón de que las propiedades se identifican numéricamente. A lo sumo puedes hacer previamente lo siguiente:

Por ejemplo:

Public Enum ColProps
....
....
UnTexto = 4
....
....
End Enum


Para luego usar .Properties(UnTexto), cosa que no le veo mucho sentido si quiero usar la propiedad 4.

Por otro lado, te recuerdo que ADO y ADOX , aunque se parezcan en la escritura (sólo en el nombre) NO ESTAMOS HABLANDO DE LO MISMO.

Te propongo un acuerdo: Yo admito que puedo estar equivocado por ser humano, pero tu por tu lado tratarías de aclarar un poco más las definiciones ...

Aquí no se trata de meter patas, sino de ADIVINAR A VECES lo otros inventan o establecen como verdades absolutas, pues te aseguro que de tener yo la posibilidad de comunicarme con Bill Gates, no estaría escribiendo aquí.

Así de fácil, amigo.

Saludos.
  #8 (permalink)  
Antiguo 25/03/2003, 10:44
 
Fecha de Ingreso: abril-2002
Mensajes: 438
Antigüedad: 22 años
Puntos: 2
Hola jcl,

Sólo una cosa más acerca de nuestra leve discusión: has usado la palabra NUNCA dos veces incorrectamente y en una segunda vez de una manera todavía más incorrecta por repetitiva. Tengo el culo pelado (que se dice por aquí en España) de programar en VB, no soy un experto en ADOX pero sí lo suficiente como para saber que para acceder a las properties del objeto column (por ejemplo y no es el único) se ha de especificar un literal como argumento, aquí van unos cuantos:

- Autoincrement
- Jet OLEDB:Column Validation Rule
- Jet OLEDB:Column Validation Text
- Jet OLEDB:Hyperlink
- Default

No creo por muy principiante que digas que eres que tengas muchas dificultades para encontrar en Internet ejemplos de estas propiedades:

with tuTabla
.Columns("tuColumna").Properties("Jet OLEDB:Column Validation Rule") = "Between 0 And 1"
.Columns("tuColumna").Properties("Jet OLEDB:Column Validation Text") = "Tu texto de validación."
end with

Y así crear una regla y texto de validación.

O bien:

With tuTabla
.Columns("tuColumna").Properties("AutoIncrement") = True
end with

Para hacer un campo de tipo Autonumérico si la BBDD lo soporta.

O bien (y es el ejemplo al que tienes que prestar atención):

with tuTabla
.Columns("tuColumna").Properties("Default") = "No"
end with

Para establecer No como valor por defcto de la columna tuColumna de la tabla tuTabla.


¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Y ESTO ES ADOX Y NO ADO !!!!!!!!!!!!!!!!!!



Y estos ejemplos ya no los he sacado de mis antiguos programas (en los que la primera vez que se instalaba se creaba la BBDD construida a pelo con ADOX y que mi tiempo me costó), esto lo he sacado de un maravilloso libro que tengo que se llama "Programación avanzada en ADO" y que tiene un apéndice que trata sobre ADOX.

Espero te sirva y lo dicho, si sigue sin funcionarte el tema, te repito que aquí estamos para ayudar y aprender, así que si quieres que te ayudemos deberías poner el código que te lanza el error en vez de tratar de justificar algo que no admite justificación.


Saludos amigo.
  #9 (permalink)  
Antiguo 25/03/2003, 11:22
jcl
 
Fecha de Ingreso: enero-2002
Mensajes: 673
Antigüedad: 22 años, 4 meses
Puntos: 1
¡Bravo!

Bien,

Probaré eso a ver y si funciona bien, y si no pues seguiré buscando ...

¿Puedes decirme el nombre de la Editorial de tu libro? ... Eso me evita tener un culo pelado en el futuro, pues muy fácil, para eso están ustedes los que saben.

¿Para qué darse mala vida en esto, si todo está hecho? ... ¡claro! siempre habrá un imbécil rondando por allí en el foro listo y dispuesto a responder cualquier pregunta que hagas ... no lo olvides.

Gracias amigo.
  #10 (permalink)  
Antiguo 25/03/2003, 19:57
jcl
 
Fecha de Ingreso: enero-2002
Mensajes: 673
Antigüedad: 22 años, 4 meses
Puntos: 1
Hola amigo sdnsdlm ,

Lamento tener que contradecirte de nuevo, pero esta vez con pruebas que no sólo te dejarán el C.. Pelao, sino que tendrás que ponerte algo para evitar se te vea el parche que, supongo llevas:

Resulta que como te explicaba, los valores de "Properties" SIEMPRE (ahora el NUNCA lo cambio a SIEMPRE) deben ser numéricos, por la sencilla razón de que ellos forman parte de un arreglo cuyos elementos se identifican (indexa) por dígitos.

Si te queda dudas puedes probar esto:

.Columns("tuColumna").Properties(2).Value = "La descripción de la columna"

.Columns("tuColumna").Properties(7).Value = "Texto de validación"

.Columns("tuColumna").Properties(8).Value = "Regla de validación"


También descubrí que son quince (15) propiedades en total, algunas aceptan .Value="XXX"; otra deben tener .Value=true/faalse ... etc.

Ojalá me digas cual es el título de tu libro para comprarlo y colgarlo como lo peor de lo inservible.

(lástima que no hay el Smilies de los mentirosos)

Adios.
------------------------------------------------------------
PD. Se mo olvidada algo:

Si gustas saber como lo aría con DAO, aquí esta:

With TableDef
.Fields.Append .CreateField("tuColumna", dbText, 7)
.Fields("tuColumna").DefaultValue = "Hola"
End With

Última edición por jcl; 25/03/2003 a las 20:09
  #11 (permalink)  
Antiguo 26/03/2003, 02:41
 
Fecha de Ingreso: abril-2002
Mensajes: 438
Antigüedad: 22 años
Puntos: 2
Me has llamado imbécil, con un parche en el culo, mentiroso, ... y no sé que otras lindeces más me has dedicado. Yo no te había insultado en ningún momento a ti, pero bueno, allá cada cual. Yo lo único que te digo es que eres un ignorante (por tres veces estás equivocado), y a pesar de todo lo "mal" que te he orientado al final creo que gracias a mi ayuda has aprendido a poner el campo con un valor predeterminado. Eso sí, sólo una cosa te digo, por mi parte los mensajes que vea en este foro de jcl están olvidados, no los pienso leer, y te aseguro que leo absolutamente todos los que están relacionados con VB para ver si sé o no sé la respuesta. Y listillo no soy, simplemente con unos cuantos años de experiencia programando, y si eso es lo que piensas de las personas que ayudan a los demás en los foros lo mejor que puedes hacer es dejar de usarlos. De verdad, viendo del palo que vas sé que me vas a responder y me vas a decir cuatro insultos o lo que sea, pero te doy mi PALABRA DE HONOR que yo es el último mensaje que me cruzo contigo.

Te aseguro que si alguien sobra de este foro es gente como tú, que pregunta y exige respuestas sin tener en cuenta que cada uno es libre de responder si le apetece o no, y lo increíble es que a pesar de que les respondan encima insultan y faltan al respeto, cosa que no han hecho contigo.

Por cierto, el libro de Programación Avanzada en ADO es de McGraw Hill y está escrito por un tal David Sceppa, un tío que ha pertenecido al equipo de desarrollo de ADO en Microsoft durante muchos años, en ese maravilloso apéndice que trata sobre ADOX aparece un ejemplo en el que por código ADOX el tío crea la BBDD de NorthWind (¿sabes cual es? Posiblemente no) y todas las propiedades que te he dicho están, y las he ejecutado, y funcionan, si quieres hasta te puedo enviar el ejemplo a tu correo electrónico para que te ilustre un poquito.

Y... vaya que no me apetece seguir, lo dicho, ya estás tardando en responderme, posiblemente en insultarme, pero que sepas que por mí jcl está acabado en este foro.

Saludos (ahora ya no te digo amigo), simplemente saludos.
  #12 (permalink)  
Antiguo 26/03/2003, 04:07
jcl
 
Fecha de Ingreso: enero-2002
Mensajes: 673
Antigüedad: 22 años, 4 meses
Puntos: 1
Cita:
... si quieres hasta te puedo enviar el ejemplo a tu correo electrónico para que te ilustre un poquito.
¿Porqué a mi correo privado y no públicamente? ... ¿Tienes temor a que otros más sabios que tu puedan criticarte? ...

¿Te has fijado que cuando yo afirmo algo lo digo en público? Eso me garantiza dos cosas:

1.- Son comprobables mis afirmaciones debido a que no digo nada sin tener pruebas.

2.- Ello me mantiene fuera de la lista de los imbéciles, piratas y mentirosos.


Cita:
Saludos (ahora ya no te digo amigo), simplemente saludos.
En un país Asiático (me encuentro en uno actualmente) cuando alguien se depide así ... le dicen mariquita. Sí, aunque no lo creas, pues aquí son las mujeres las que se dicen eso cuando una se enfada con la otra, claro que en lugar de decir "amigo" dicen "amiga" ... Pero bueno, como tu dices, cada cual en su tema ... (mas o menos ese fue tu decir).

De ustedes ustedes los gallegos se inventan tantos chistes que hasta en japón se mueren de carcajadas ... eso es a nivel mundial y nunca he sabido por qué ... ¿tu lo sabes?

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:58.