PDA

Ver la Versión Completa : Findkey


trex2000
31-03-2004, 19:17:30
Saludos:
Tengo un sistema con tablas paradox, tengo el problema de que al hacer un findkey a un articulo nunca lo encuentra y siempre trata de agregarlo como nuevo entonces me genera un key violation, en la intruccion que uso tengo que si lo encuantra edite el registro pero nunca entra aqui, la llave de la tabla es el codigo del articulo.

Espero haberme dado a entender.
De antemano muchas gracias. :confused:

roman
31-03-2004, 19:26:31
Pues si no ejecuta la instrucción del condicional es porque no encontró el registro. ¿Por qué no nos pones esa parte del código aquí para tener una mejor idea?

// Saludos

jachguate
31-03-2004, 19:36:32
Pues en mi larga vida, nunca he visto fallar a findKey, salvo que IndexName o IndexFieldNames no apunten a la llave primaria.

Hasta luego.

;)

marcoszorrilla
31-03-2004, 20:00:02
Reitero lo dicho por mis compañeros, además te digo, abre la tabla con el DatabaseDesktop y asegúrate que el código del artículo está escrito igual que el que tu buscas, puede tener un espacio o un caracter extraño que no estás contemplando.

Un Saludo.

trex2000
01-04-2004, 00:52:48
Gracias por sus respuestas lo que hago es lo siguiente:
Articulo:=Query1.FieldByName('CodArt').AsString;
If MdParadx.TbEc.FindKey([Articulo])Then
Begin
MdParadx.TbEc.Edit;
Operaciones...;
MdParadx.TbEc.Post;
End
Else
Begin
MdParadx.TbEc.AppendRecord([Articulo,NumeroPedidos]);
End;

Eso es todo lo que hago.

La llave principal es codart de la tabla ec.db.

Gracias por su ayuda.

jachguate
01-04-2004, 01:02:13
Y que tenes en IndexFieldNames o en IndexName??

trex2000
01-04-2004, 03:24:33
En indexfieldnames es codart(codigo del articulo) y en indexname no tengo nada. :confused:

roman
01-04-2004, 07:24:24
Dale curso a la sugerencia de marcoszorrila. Pon un punto de corte (F5) en la línea


if MdParadx.TbEc.FindKey([Articulo]) then


Cuando pare la ejecución examina el valor de la variable Articulo y asegúrate de que coincide exactamente con el valor en la tabla (usando el Database Desktop para ello).

// Saludos

trex2000
01-04-2004, 18:53:24
El problema es que eso ya lo hice y si coincide el valor de articulo con el que tengo en la tabla.

Gracias por su ayuda. :confused:

Nuria
01-04-2004, 19:06:36
Hola !

¿Siempre te pasa con el mismo artículo o con artículos diferentes?

Saludos!

trex2000
01-04-2004, 19:09:50
Es con cualquier articulo pero nada mas en esa tabla.

Gracias. :confused:

Nuria
01-04-2004, 19:14:38
¿ Has probado si puedes insertar en esa tabla usando el Database Desktop?

Salu2!

trex2000
01-04-2004, 19:24:05
Si ya lo intente, y si me pone los articulos siempre y cuando todavia no esten agregados.

Gracias. :confused:

Nuria
01-04-2004, 19:31:09
Pues entonces no sé que te puede estar pasando... :confused: . Una sugerencia create de nuevo la tabla no sé igual ya funciona.

Un Saludo!

trex2000
01-04-2004, 21:16:04
Ya volvi a crear la tabla y sigue iguel, de todos modos muchas gracias.

roman
01-04-2004, 21:35:35
Hay veces que se tiene que comenzar desde cero (¿A esto se referirá Al González con POC? :p )

Trata de reproducir el caso a su mínima expresión:


Trabaja con una copia de la tabla con, digamos, 10 registros.
Crea un nuevo projecto con un sólo formulario
Coloca en el formulario un Table, un botón y nada más
Configura las propiedades del Table igual a como las tienes ahora.
En el OnClick del botón coloca el código:


Assert(Table.FindKey(['un valor de la clave']), 'Esto es cosa de duendes');



Nota que le pasas al FindKey no una variable sino directamente un string con un valor que sepas que existe.

Si recibes el mensaje 'Esto es cosa de duendes' realmente será cosa de duendes pero puedes enviarnos el proyecto reducido como attachment incluida la tabla de diez registros y a ver si le encontramos algo.

// Saludos