Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-01-2010
Mystery Mystery is offline
Miembro
 
Registrado: jul 2007
Ubicación: Santiago de Cuba
Posts: 69
Poder: 17
Mystery Va por buen camino
Obtener lista de campos llaves...

Hola a todos...
Estoy haciendo una aplicacion que trabaja con bases de datos en access y SQL Server. me hace falta saber cual es la estructura de una tabla en access y en SQL desde mi delphi con el proposito de sabes cuales son los campos llaves de esta tabla... que recalco puede estar en access o SQL Server.
estube leyendo en el foro pero no pude sacar nada en claro
http://www.clubdelphi.com/foros/showthread.php?t=28183
lo de las tablas de sistema en SQL he podido mirar algo y aunque no he logrado sacar nada por lo menos he encontrado algo... no asi en access porque en ninguna tabla de sistema encuentro las columnas de la Base de Datos como en SQL Server... si existiese algun metodo.. o alguna manera le estare eternamete agradecido....
muchas gracias de antemano... sin mas
Mystery
Responder Con Cita
  #2  
Antiguo 26-01-2010
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
En SQL Server podrias usar el siguiente Select para obtener los campos

Código SQL [-]
select     c.COLUMN_NAME 
    from     INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
    where     pk.TABLE_NAME = Nombre_Tabla
    and    CONSTRAINT_TYPE = 'PRIMARY KEY'
    and    c.TABLE_NAME = pk.TABLE_NAME
    and    c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME

Lo pones en un TQuery (o TADOQuery) y reemplazas Nombre_Tabla por parametros y te devolvera la lista de los campos clave.

Lastimosamente no uso Access asi que no puedo ayudarte con eso.

Saludos.
Responder Con Cita
  #3  
Antiguo 26-01-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Investiga un poco el diccionario de datos de SQLServer, ahí esta toda la información!... navegando muy poquito encontré esto:

Código SQL [-]
SELECT keys.xtype, keys.name, syscolumns.name, sysindexkeys.indid, sysobjects.type
  FROM syscolumns
  LEFT JOIN sysobjects ON syscolumns.id = sysobjects.id
  LEFT JOIN sysindexkeys ON (syscolumns.id = sysindexkeys.id AND 
                             syscolumns.colid = sysindexkeys.colid)
  JOIN sysobjects keys on keys.parent_obj = sysindexkeys.id
 WHERE sysobjects.name = TableName
   AND keys.type = 'K'
   AND sysindexkeys.indid IS NOT NULL
ORDER BY keys.id, sysindexkeys.indid, sysindexkeys.keyno

PD: Que raro que me suena "llaves"!

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 26-01-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.284
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Conectando con ADO puedes llegar a obtener la información de las Tablas de la Base de Datos. A partir de ahí utilizando ADOTable puedes llegar a obtener información de los campos de esa tabla.

Estoy pensando en Access, ya que como han dicho para SQL Server puedes acceder directamente al diccionario.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 26-01-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.284
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si colocas un ADOTable en un formulario, y haces el Open, puedes programar algo así:

Código Delphi [-]
  for i := 0 to (ADOTable1.FieldDefList.Count - 1) do begin
    Memo1.Lines.Add(ADOTable1.FieldDefList[i].Name);
    Memo1.Lines.Add('  ' + IntToStr(Ord(ADOTable1.FieldDefList[i].DataType)));
    Memo1.Lines.Add('  ' + IntToStr(ADOTable1.FieldDefList[i].Size));
  end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 26-01-2010
Mystery Mystery is offline
Miembro
 
Registrado: jul 2007
Ubicación: Santiago de Cuba
Posts: 69
Poder: 17
Mystery Va por buen camino
gracias...!!!

hola otra vez...
si como dices neftalí ahora el problema esta en access gracias a jcarteagaf y a delphi.com.ar (Federico Firenze).... por sus aportes ademas encontre en la RED este articulo bastante interzante...
http://www.sqlmax.com/procnodoc.asp
...he probado el codigo ese que me das esta bastante bueno pero para las claves serian el indexfieldcount y el IndexFields... pero no se si es porque acabo de crearlas me dice que el indexfieldcount=0... y la tabla tiene al menos una llave... entonces ahi es donde esta el lio OK ire por la pista que me diste y despues te cuento... claro que si se les ocurre algo les agradeceria que me lo comenten gracias y chaoooo

define llave: http://www.google.com.cu/search?hl=e...G=Buscar&meta=
Responder Con Cita
  #7  
Antiguo 27-01-2010
Mystery Mystery is offline
Miembro
 
Registrado: jul 2007
Ubicación: Santiago de Cuba
Posts: 69
Poder: 17
Mystery Va por buen camino
Cool

Aquí les dejo una función que me resuelve el problema expuesto.....
Código Delphi [-]
function keys(Conn: PConn; Tabla: String): string;
var
  i:integer;
  CAD:String;
begin
  CAD:='';
  with TADOTable.Create(nil)do
  try
    Active:=False;
    Connection:=Conn^;
    IndexName:='PrimaryKey';
    TableName:=Tabla;
    Active:=True;
    for i:=0 to IndexFieldCount-1 do
      if ithen
        CAD:=CAD+IndexFields[i].FieldName+';'
      else
        CAD:=CAD+IndexFields[i].FieldName;
  finally
    Free;
    Result:=CAD;
  end;
end;


los parámetros son un puntero a la conexión el nombre de la Tabla de la cual queremos obtener el listado de Claves y esta función nos devuelve una cadena con las llaves de la tabla separadas por ';', lista para usar en un locate jejejejee...
algo así... CAD:=key1;key2;etc...

bueno muchas gracias por su ayuda. Sin más
Mystery

Última edición por Mystery fecha: 27-01-2010 a las 14:51:46.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Obtener una lista de los archivos de un directorio David OOP 3 27-03-2009 02:25:30
Obtener una lista del hardware instalado vroa74 API de Windows 0 16-05-2008 17:53:15
Obtener lista de procedimientos de un objeto JavierSotillos OOP 15 09-06-2006 17:53:52
Obtener lista de ocx registrados rsantosr API de Windows 0 08-10-2005 17:50:47
Obtener la lista de canciones de un Cd mp3 Diana Varios 1 30-11-2004 02:45:26


La franja horaria es GMT +2. Ahora son las 10:35:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi