Como Detectar Primary Key En Tabla?


Objetivo: 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?

Objetivo: 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.


última edición por shordi el Viernes, 15 May 2015, 21:12; editado 1 vez
Perfil MP  
Objetivo: Re: Como Detectar Primary Key En Tabla?
shordi escribió: [Ver mensaje]
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)

5511

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



última edición por v3ctor el Viernes, 15 May 2015, 23:00; editado 1 vez
Objetivo: 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


9988

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

última edición por v3ctor el Viernes, 15 May 2015, 22:37; editado 3 veces
Objetivo: 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.

última edición por shordi el Sabado, 16 May 2015, 10:11; editado 1 vez
Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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.


Página 1 de 1


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 1.094s (PHP: -88% SQL: 188%)
Consultas SQL: 49 - Debug off - GZIP Activado