|
Página 1 de 1
|
Como Detectar Primary Key En Tabla?
Autor |
Mensaje |
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Como Detectar Primary Key En Tabla?
buenas, en el programa infodatabasesql quiero agregarle que muestre si el campo seleccionado es primary key o no.
e buscado y no he tenido resultados, tampoco se como funciona bien table.primarykey
alguna orientación?
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#1 Viernes, 15 May 2015, 19:58 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Como Detectar Primary Key En Tabla?
Table.Primarykey te devuelve un string[] con los nombres e los campos que forman la clave primaria.
Sencillo.
=================== No podemos regresar
última edición por shordi el Viernes, 15 May 2015, 21:12; editado 1 vez
|
#2 Viernes, 15 May 2015, 21:12 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Como Detectar Primary Key En Tabla?
Table.Primarykey te devuelve un string[] con los nombres e los campos que forman la clave primaria.
Sencillo.
jajaj que burro soy no me daba cuenta, yo creia que devolvia un string(sinceramente falta info en las ayudas por esto me pasa esto)
Dim campo As Field
Dim tabla As Table
Dim CamposPK As String[]
Dim NomCampo As String
QueTablas = ListaCampos.Current.Text
SentenciaSQL = "select " & QueTablas & " from " & NombreTabla
txtSql.Text = SentenciaSQL
For Each tabla In Conexion.Tables
If tabla.Name = NombreTabla Then
CamposPK = tabla.PrimaryKey
For Each NomCampo In CamposPK
Print NomCampo
Next
For Each campo In tabla.Fields
If campo.Name = ListaCampos.Current.Text Then
' campo.Type
LabLargo.Text = "Largo: " & campo.Length
typeEs(campo.Type)
Endif
Next
Endif
Next
End
que te parece el codigo que agregue shordi?
toy salao programando
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
última edición por v3ctor el Viernes, 15 May 2015, 23:00; editado 1 vez
|
#3 Viernes, 15 May 2015, 21:52 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Como Detectar Primary Key En Tabla?
al final quedo asi mostrando un icono cuando es primary key
Public Sub RegistrosCampos()
Dim campo As Field
Dim tabla As Table
Dim CamposPK As String[]
Dim NomCampo As String
QueTablas = ListaCampos.Current.Text
SentenciaSQL = "select " & QueTablas & " from " & NombreTabla
txtSql.Text = SentenciaSQL
For Each tabla In Conexion.Tables
If tabla.Name = NombreTabla Then
CamposPK = tabla.PrimaryKey
For Each campo In tabla.Fields
If campo.Name = ListaCampos.Current.Text Then
For Each NomCampo In CamposPK
If NomCampo = campo.Name Then
PicbPK.Visible = True
Else
PicbPK.Visible = False
Endif
Next
LabLargo.Text = "Largo: " & campo.Length
typeEs(campo.Type)
Endif
Next
Endif
Next
End
Print tabla.PrimaryKey cuando puse esto y me dio este resultado:
( String[] 0xa405fa4)
era obvio que retornaba un string[] y no un string (un array de cadena y no una cadena)
pero no me daba cuenta jajaj
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
última edición por v3ctor el Viernes, 15 May 2015, 22:37; editado 3 veces
|
#4 Viernes, 15 May 2015, 22:17 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Como Detectar Primary Key En Tabla?
Tepongo unos comentarios:
Public Sub RegistrosCampos() 'Èsta función supongo que se dispara al hacer click en el la lista de campos
Dim campo As Field
Dim tabla As Table
Dim CamposPK As String[]
Dim NomCampo As String
QueTablas = ListaCampos.Current.Text 'Quetablas supongo que es una variable privada. No la necesitas, que ya tienes el valor del control listacampos (a parte de eso el nombre es confuso QueCampo sería más correcto)
SentenciaSQL = "select " & QueTablas & " from " & NombreTabla ' Esto es precipitado. con ello sólo puedes hacer una consulta de un solo campo. Deberías coleccionar primero todos los campos que el usuario quiere ver antes de construir la sentencia
txtSql.Text = SentenciaSQL
For Each tabla In Conexion.Tables '¿para qué recorrer todas las tablas si ya sabemos de cuál estamos hablando?
If tabla.Name = NombreTabla Then
CamposPK = tabla.PrimaryKey '¿para qué crear una variable que contiene información que ya tenemos?
For Each campo In tabla.Fields '¿Para qué recorrer todos los campos... etc. etc.?
If campo.Name = ListaCampos.Current.Text Then
For Each NomCampo In CamposPK 'desde aquí....
If NomCampo = campo.Name Then
PicbPK.Visible = True
Else
PicbPK.Visible = False
Endif
Next 'hasta aquí, es demasiado código para cosas que el lenguaje ya te da resueltas
LabLargo.Text = "Largo: " & campo.Length
typeEs(campo.Type)
Endif
Next
Endif
Next
End
En resumen, la función que te pone el largo, el tipo y el icono si es clave primaria, podría quedar así:
Public Sub RegistrosCampos()
PicbPK.visible= (conexion.tables[listatablas.current.text].primarykey.find(listacampos.current.text) > -1)
LabLargo.Text = "Largo: " & campo.Length
typeEs(campo.Type)
end
Más aún, yo la eliminaría por completo y pondría en el evento click de listacampos las tres líneas de código. Luego, una vez que tuviese claro qué campos, no sólo uno, quiero ver en la ejecución de la sentencia SQL crearía la sentencia y la ejecutaría.
=================== No podemos regresar
última edición por shordi el Sabado, 16 May 2015, 10:11; editado 1 vez
|
#5 Sabado, 16 May 2015, 10:10 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Como Detectar Primary Key En Tabla?
Aclarar aquí, que yo, cuando me enfrento a un problema así, primero hago cosas como las que tú has hecho. Lo llamo "Diseccionar" el problema, y lo divido en tantas partes y con tantas redundancias como tú lo has hecho. Luego, una vez que funciona viene la labor de poda y optimización que, por un lado es una maravilla (¡mira he reducido 100 líneas a sólo 10!) y por otro una depresión (¡Toda la mañana trabajando para al final haber escrito sólo 10 líneas!)... pero es lo que hay.
Lo más difícil de todo es la simpleza, la concisión y la pulcritud del código.
Lo más importante es que funcione. Si el tuyo funciona, es válido... el nivel de exigencia de todo lo demás lo marcas tú.
Saludos
=================== No podemos regresar
|
#6 Sabado, 16 May 2015, 10:17 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Como Detectar Primary Key En Tabla?
Excelente aporte shordi, excelentes conceptos, muy instructivo.
el código es de un aprendiz, el objetivo mio siempre es comprender como funcionan las clases, en este caso todo lo referido a clases sobre bases de datos
como ser la clase table, field etc.
jaja si supieran el motivo por el cual me inspire para hacer un programa que te mostrara la estructura y datos de una base sqlite.
el motivo fue que cuando hacia pruebas de crear tablas en gambas y quería corregirlas no podía obtener la sentencia para copiarla y pegarla del gambas
de la tabla maestra sqlite_master. Buen podría guardar la sentencia en un txt antes de ejecutarla pero en fin ese fue el motivo por el cual estoy programando infodatabasesql.
estoy metido de lleno en base de datos sqlite para poder hacer el programa del taller a medida y cumpla con todas mis necesidades.
también me doy cuenta que saber sobre base de datos es casi imprescindible para un programador pues casi todo programa necesita una base de datos de algo.
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#7 Sabado, 16 May 2015, 14:09 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|