no encuentra clave principal

24/04/2005 - 17:27 por Elbio Gamio | Informe spam
Hola a todos:
Tengo una tabla Access 2000, que tiene una clave principal : Campos
Serie y Numero.
Tengo una aplicacion Windows VB.NET que lee la tabla Access en
memoria cargandola en un dataset.
En la tabla en memoria, que forma parte del dataset, Aplico el
método Find para encontrar un registro por los valores Serie y Numero.
Obtengo el mensaje de error : "la tabla no tiene una clave
principal", cuando en realidad TIENE clave principal
Agradezco alguna idea.
Lucho

Preguntas similare

Leer las respuestas

#1 A.Poblacion
24/04/2005 - 19:05 | Informe spam
"Elbio Gamio" wrote in message
news:%23q46$
Hola a todos:
Tengo una tabla Access 2000, que tiene una clave principal :


Campos
Serie y Numero.
Tengo una aplicacion Windows VB.NET que lee la tabla Access en
memoria cargandola en un dataset.
En la tabla en memoria, que forma parte del dataset, Aplico el
método Find para encontrar un registro por los valores Serie y Numero.
Obtengo el mensaje de error : "la tabla no tiene una clave
principal", cuando en realidad TIENE clave principal



En cuanto a la clave principal, aunque en la base de datos la tabla tenga
una clave principal, la clave no se configura en la tabla en memoria a no
ser que le pongas el MissingSchemaAction.AddWithKey al DataAdapter que usas
para cargar la tabla.

Pero el método "Find" que dices que aplicas, existía en los recordsets de
ADO pero no existe en las tablas de un dataset de ADO.NET. En ADO.NET lo que
tienes en su lugar es el método Select, que efectivamente te puede servir
para encontrar un registro por Serie y Numero, pero que no necesita para
nada la clave principal. Así que no sé qué es lo que puedes estar haciendo.
¿Puedes ilustrarlo con un pequeño fragmento de código?
Respuesta Responder a este mensaje
#2 Eduardo A. Morcillo [MS MVP VB]
25/04/2005 - 00:55 | Informe spam
Pero el método "Find" que dices que aplicas, existía en los
recordsets de ADO pero no existe en las tablas de un dataset de
ADO.NET. En ADO.NET lo que tienes en su lugar es el método Select,
que efectivamente te puede servir para encontrar un registro por
Serie y Numero, pero que no necesita para nada la clave principal.



Find es un metodo de la coleccion Rows y requiere de una clave principal
definida en el DataTable.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
http://spaces.msn.com/members/emorcillo/
Respuesta Responder a este mensaje
#3 Elbio Gamio
27/04/2005 - 22:04 | Informe spam
Estimado:

Logre mi objetivo al seguir tu consejo de usar el metodo Select en vez de
el metodo Find, ya que el primero permite busquedas por rangos mientras que
en el Find que trate de usar, la busqueda es por valor exacto, por lo tanto
la respuesta de Find consiste en que encuentra y devuelve el valor, o no lo
encuentra. Aparte de exigir la existencia de Clave Principal en la data table.
El método Find existe en .NET como perteneciente a la DataRowCollection,
no se que pasaba en los redordsets de ADO.
El metodo Select devuelve una matriz con los registros que cumplen la
condicion exigida, ¿Como puedo saber a que posicíon de la tabla en memoria
corresponde el o registro encontrado? Es decir si el registro que yo buscaba
es el nro. 105, ¿que variable o propiedad me devuelve ese indice?
Gracias por todo.


"A.Poblacion" escribió:

"Elbio Gamio" wrote in message
news:%23q46$
> Hola a todos:
> Tengo una tabla Access 2000, que tiene una clave principal :
Campos
> Serie y Numero.
> Tengo una aplicacion Windows VB.NET que lee la tabla Access en
> memoria cargandola en un dataset.
> En la tabla en memoria, que forma parte del dataset, Aplico el
> método Find para encontrar un registro por los valores Serie y Numero.
> Obtengo el mensaje de error : "la tabla no tiene una clave
> principal", cuando en realidad TIENE clave principal

En cuanto a la clave principal, aunque en la base de datos la tabla tenga
una clave principal, la clave no se configura en la tabla en memoria a no
ser que le pongas el MissingSchemaAction.AddWithKey al DataAdapter que usas
para cargar la tabla.

Pero el método "Find" que dices que aplicas, existía en los recordsets de
ADO pero no existe en las tablas de un dataset de ADO.NET. En ADO.NET lo que
tienes en su lugar es el método Select, que efectivamente te puede servir
para encontrar un registro por Serie y Numero, pero que no necesita para
nada la clave principal. Así que no sé qué es lo que puedes estar haciendo.
¿Puedes ilustrarlo con un pequeño fragmento de código?





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida