12 de mayo de 2008

Buscar el nombre de un campo en todas las tablas de una DBC

Estas dos maneras de buscar el nombre de un campo en todas las tablas de una base de datos, son respuestas a una pregunta de un usuario del foro de UT, enviadas por por Sergey Berezniker y Luis María Guayán respectivamente.

*** 1 ***
lcDBC = HOME(2) + "NORTHWIND\NORTHWIND.DBC"
USE (lcDbc) ALIAS MyDbc
*-- Campo a buscar
lcFieldName = "City"
SELECT LEFT(db1.ObjectName,50) AS TableName, LEFT(db2.ObjectName,50) AS FieldName ;
  FROM mydbc db1 JOIN mydbc db2 ON db1.ObjectId = db2.ParentId ;
  WHERE db1.ObjectType = "Table" ;
  AND db2.ObjectType = "Field" AND db2.ObjectName = LOWER(lcFieldName) 
USE IN SELECT("MyDbc")

*** 2 ***
lcDBC = HOME(2) + "NORTHWIND\NORTHWIND.DBC"
OPEN DATABASE (lcDbc)
lnTables = ADBOBJECTS(laTables, "TABLE")
*-- Campo a buscar
lcFieldName = "City"
FOR lnI = 1 TO lnTables
  USE (ADDBS(JUSTPATH(lcDBC)) + laTables(lnI)) ALIAS "Tmp"
  lnFields = AFIELDS(laFields, "Tmp")
  IF ASCAN(laFields,lcFieldName,1,ALEN(laFields,1),1,9) > 0
    ? DBF("Tmp")
  ENDIF
  USE IN SELECT("Tmp")
ENDFOR
CLOSE DATABASES

No hay comentarios. :

Publicar un comentario