Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-10-2014
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
FindKey en TSQLTable

Buenos días, en primer lugar decir que he buscado y no he encontrado nada, así que si repito tema ha sido por torpeza en la búsqueda

Al lio, estoy migrando una aplicación de BDE a dbExpress y me encuentro con 2 problemas, usaba muchos TTable y veo que el TSQLTable no tiene ni el FindNearest (cuyo problema no es tan grande) ni FindKey (Mi dolor de cabeza más grande). Sabéis o habéis conseguido "replicar" o usar alguna función similar en los TSQLTable. El problema del FindKey es que trabajo con formularios "plantilla", y sin cambiar bastantes cosas no se la clave primaria de la tabla. Intentaré mostrarlo gráficamente...

FORMULARIO BASE (Aquí está el TTable) -> En este formulario se define una búsqueda que realiza un FINDKEY

FORMULARIO HIJO 1 - FORMULARIO HIJO 2 - FORMULARIO HIJO 3 ..... FORMULARIO HIJO N

Estos formularios HEREDAN el TTable y es en ellos cuando se asocia el TABLENAME, así pues en el BASE no tengo la PK de la tabla.

Si supiera en el base la PK, obviamente podría hacer un LOCATE, pero ahí viene el problema, modificar el código para ese cambio es muchísimo trabajo (que si no hay más remedio tendré que hacer), pero si puedo
hacerlo todo en el BASE, pues eso, para eso se usa la herencia, no?

Espero me podáis ayudar, ya que estoy bastante "empantanado". Gracias
Responder Con Cita
  #2  
Antiguo 25-10-2014
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cual es la finalidad de la busqueda? Seleccionar un registro en particular y mandarlo a un form hijo? Como mostras los resultados de la busqueda? Algun control enlazado a un DataSource conectado al TTable (estilo DBGrid)?

Si fuera por ejemplo el caso del DBGrid y el usuario tiene que seleccionar un registro, si el DBGrid esta linkeado a un DataSource conectado al TTable, el TTable te queda "magicamente" apuntando a la PK que buscas
Responder Con Cita
  #3  
Antiguo 27-10-2014
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Hola, depende del hijo. Algunos son grids, otros tienen dbedits... Por ello necesito "traducir" el findkey a dbexpress, lo ideal sería obtener de algún modo los campos de la clave primaria de esa tabla (con alguna función) y hacer un locate, pero tampoco encuentro esa "función" que me devuelva los campos.
Responder Con Cita
  #4  
Antiguo 27-10-2014
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Es algo confuso el problema porque decís que en el formulario base tenés una tabla a la que le aplicas una búsqueda, y luego se la pasas a un formulario hijo en donde se define el tablename ??? Como trabajar con un table si no tiene definido tablename?

Por otro lado, cuando haces la búsqueda en tú primer formulario, te queda la tabla apuntando al primer registro que cumpla las condiciones de búsqueda, es decir el registro actual. Proba hacer un show message de los campos en algún botón para que me entiendas

Saludos
Responder Con Cita
  #5  
Antiguo 27-10-2014
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
El tablename es lo primero que se asigna en el create del hijo. Así pues si tiene tablename. O no me estoy explicando bien o es más confuso de lo que parece. Pero como bien he dicho lo que necesito es o bien cambiar ese FindKey por alguna intrucción "semejante" o como creo que no existe, intentar obtener la PK de la tabla para así poder hacer un LOCATE.
Responder Con Cita
  #6  
Antiguo 27-10-2014
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 14
pacopenin Va por buen camino
No se que base de datos usas ni el volumen de datos que utilizas, pero componentes de tipo Table contra BBDD es lo más ineficiente que hay, y el problema se agrava si tabajas desde varios puestos simultaneamente. Yo te recomendaría que lo cambies por un Query y en lugar de FindKey, Locate, etc hagas un 'SELECT * FROM NOMBRE_DE_LA_TABLA WHERE CLAVE = VALOR_A_POSICIONAR'. No es tanto el cambio y en términos de eficiencia, rapidez, veracidad de datos, etc. si tienes cierto volumen, lo notarías mucho. Inconveniente? Tocar algo de código y olvidarte de Siguiente-Anterior desde el formulario de edición (algo normalmente innecesario e inutil, e.m.h.o.).

En todo caso, si no hay equivalente a FindKey, deberás trasladar el posicionamiento en las tablas al método OnCreate, OnShow (o el que creas oportuno) de cada form hijo, así que el cambio no sería tan grande.

Un saludo.
__________________
http://www.gestionportable.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
findkey y fieldkind en sql federicorl Conexión con bases de datos 2 09-04-2008 21:34:57
FindKey elpacua Conexión con bases de datos 1 22-02-2008 22:52:05
ApplyUpdates(0); TSQLQuery ó TSQLTable mramos65 Conexión con bases de datos 0 17-12-2007 19:21:26
Findkey trex2000 Tablas planas 15 01-04-2004 22:35:35
Findkey en ADO !!! vpepen Conexión con bases de datos 3 05-12-2003 12:14:18


La franja horaria es GMT +2. Ahora son las 20:02:28.


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
Copyright 1996-2007 Club Delphi