Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Un indice compuesto por dos campos (https://www.clubdelphi.com/foros/showthread.php?t=5156)

Javier_A 11-11-2003 13:33:53

Un indice compuesto por dos campos
 
Estoy intentando acceder a una tabla, ( por BDE ),que su indice esta --- compuesto por 2 items ---- y no logro acceder a ningun registro a no ser que me monte una lectura secuencial.
Que tengo que ponerle al SetKey o FindKey o Locate o Findnereast para que pueda utilizar ese puñetero indice( formado por dos campos) que me esta poniendo de los nervios.

Un saludo a todos

JavierB 11-11-2003 14:34:28

Hola, Javier_A.
Código:

Has probado con: FindKey(['ValorCampo1','ValorCampo2']);
Saludos, :cool:

Javier_A 11-11-2003 15:26:14

Gracias por contestar JavierB,

Ya he probado .... FindKey(['ValorCampo1','ValorCampo2']);
y no ha habido ningun resultado, quiero decir que Findkey es una funcion boleana que devuelve True , si encuentra el dato y False en caso contrario, y no hay manera, el resultado siempre es False y el registro que me saca es aleatorio.


Gracias de nuevo y un saludo

__cadetill 12-11-2003 09:36:47

Pon un trozo de código para ver en que te estás equibocando, porque FindKey funciona bien :confused:

Mira que la tabla esté indexada por los campos de búsqueda

Javier_A 12-11-2003 13:27:13

Hola Cadetill
Aqui te envio una muestra:

La instruccion Table1.gotokey no la ejecuta porque no encuentra nada en el FindKey

procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Active:=True;
Table1.IndexFieldNames:='EMPRES;CLCODI';
if Table1.FindKey([001,116])then
Table1.gotoKey
end;

Quizas el problema se encuentre en que tanto EMPRES como CLCODI forman un solo indice en el AS400( Un fichero logico ), y no se puede acceder como si fuesen dos indices, ( creo yo, pero no estoy muy seguro).
No obstante, ahora voy a probar mandando SQL's, a ver que tal de velocidad, pues ni la lectura secuencial, (While), ni los filtros son practicos para el software que estoy desarrollando.
Si encuentras o averiguas algo, comentamelo.

Un millon de gracias....Javier

__cadetill 12-11-2003 15:21:41

mmmm, no no, eso funciona muy bien en el As400 ;)

Supongo que el problema será que 'EMPRES' es de tipo alfanumérico, por lo que el FindKey debería de quedar así

Código:

if Table1.FindKey(['001',116])then
osea, encerrado entre comillas.

Nota1: recuerda que cualquier valor de cadena, ha de ir entrecomillado
Nota2: el FindKey, a parte de decirte si existe o no, también se te posiciona en el registro, por lo que no es necesario el GotoKey


La franja horaria es GMT +2. Ahora son las 09:37:18.

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