Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   DataField clave primaria doble (https://www.clubdelphi.com/foros/showthread.php?t=58393)

franfl 18-07-2008 19:59:35

DataField clave primaria doble
 
Hola
Necesito encontrar en una tabla un valor, el problema es q esta tabla es una relacion n:m, es decir, la clave primaria la forman 2 campos, entonces no soi capaz de encontrarla. Hago lo siguiente:

BuscarDatos(tabla,"IDPROGRAMA;IDENTRENO",MD->qIBInforme1->FieldValues["IDPROGRAMA;IDENTRENO"]);

void BuscarDatos(TIBTable *tabla, const AnsiString &campo, const AnsiString &dato){
// Limpiamos las opciones de búsqueda
TLocateOptions().Clear();
// Situamos el puntero sobre la fila adecuada
tabla->Locate(campo,dato,TLocateOptions());
}

pero el FieldValues creo q solo es para buscar un valor concreto, no dos registros. Entonces no se que usar.
Muchas gracias
Un saludo

TOPX 18-07-2008 21:48:42

Hola franfl,

Primero, trate de evitar FieldValues para evaluar un campo de un DataSet; mejor use algo como:

Código:

MiTabla->FieldByName("CampoX")->As...TipoDeDato
Segundo, para hacer Locate() por llave compuesta, sería con:

Código:

MiTabla1->Locate("Campo1;Campo2",
                  VarArrayOf(MiTabla2->FieldByName("CampoA")->AsVariant,
                            MiTabla2->FieldByName("CampoB")->AsVariant),
                  TLocateOptions());

--
"constructive mind, destructive thoughts"

franfl 19-07-2008 12:07:51

Hola
Estoy haciendo un proyecto bastante grande y ahora no me compila otra parte por otros errores,pero entre hoy y mañana los arreglo, hago lo que me dijiste y ya te comento
Muchisimas gracias Topx
Un saludo

franfl 23-07-2008 20:04:29

Despues de mucho tiempo ya soluciones los otros errores, y por desgracia esto tambien me casca:
Yo tengo dos enteros que forman la clave primaria entonces hago:

VarArrayOf(ent, ejer); //Que ya da error pq tiene q ser const variant y no se como hacerlo

tabla->Locate("IDENTRENO;IDEJERCICIO", VarArrayOf(ent, ejer); ,TLocateOptions());

Muchas gracias

franfl 24-07-2008 07:48:36

Hola
Ya lo solucione, lo que hago es:

Variant V[2]; // la creo con 2 posiciones

V[0] = ent;
V[1] = ejer;

tabla->Locate("IDENTRENO;IDEJERCICIO", VarArrayOf(V,1) ,TLocateOptions());

Es decir el VarArrayOf tiene como parametros el dato Variant, y hasta que posicion cojo.

Muchas gracias y a ver si sirve para otros con dudas.
Un saludo


La franja horaria es GMT +2. Ahora son las 06:45:11.

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