Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/08/2002, 18:04
jasistemas
 
Fecha de Ingreso: mayo-2001
Mensajes: 452
Antigüedad: 24 años, 3 meses
Puntos: 1
Re: Identificación de clave primaria (urgente)

Con un openSchema sobre la conexion, mas o menos con este codigo:
'Agregado por Juan Arturo [email protected]
'Encuentra la llave primaria de una tabla dada
dim aPrimaryKeys
set rsX = conn.openSchema(adSchemaPrimaryKeys)

do while not rsX.eof
if (rsX("table_name") = sTableName) then
if sPrimaryKeyFieldName = "" then
sPrimaryKeyFieldName = rsX("column_name")
else
sPrimaryKeyFieldName = sPrimaryKeyFieldName & "," & rsX("column_name")
end if
end if
rsX.movenext
loop
rsX.close

if (sPrimaryKeyFieldName = "") and (bQuery = False) then
sSoWhat = "(<a title=""Editor de Tabla necesita al menos un campo de llave unica para diferenciar los registros. El campo llave para esta tabla no existe o no puede ser detectado automaticamente. TableEditoR usara el primer campo como llave. (Click sobre de imágen de la pagina en la columna Accion para editar el registro de cualquier forma)."">Entonces?</a>)"
if arrType(lConnID) = tedbDsn then
response.write "La Detección automatica de llaves primarias Automatic no es posible en conexiones DSN. " & sSoWhat & "<br><br>"
else
response.write "Esta tabla no tiene ninguna llave primaria. " & sSoWhat & "<br><br>"
end if
else
'response.write "Primary key(s): " & sPrimaryKeyFieldName & "<br><br>"
end if

'Set the primary key field to first field in the list by default
if sPrimaryKeyFieldName = "" then sPrimaryKeyFieldName = 0



y los valores constantes son:
'---- SchemaEnum Values ----
Const adSchemaTables = 20
Const adSchemaPrimaryKeys = 28
Const adSchemaIndexes = 12
const adSchemaViews = 23
Const adSchemaForeignKeys = 27
Const adSchemaProcedures = 16

Este codigo funciona bien (si tienes todas las variables claro), pero como comenta por alli, no es posible usarlos con DSN, solo con DSNLess.

Otra cosa mejor es que en CADA TABLA EL PRIMER CAMPO SEA EL PRIMARY KEY y entonces solo agarras el recordset.fields(0) y con eso ya tienes.