Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-06-2014
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
Consultar Item en Tabla en memoria

Buenas la consulta es como hago para saber si un registro existe en una tabla en memoria, es que no se como hacerle una consulta solo puedo eliminar el registro seleccionandolo con un dbgrid la cual uso este codigo
Código Delphi [-]
procedure TFormAgregarItems.btn1Click(Sender: TObject); 
begin
   if messagedlg ('¿Está seguro que desea eliminar la línea de concepto actual?',mtconfirmation,[mbok,mbcancel],0)=mrok then
     datos.tmhistorias.Delete;
 end;
es para evitar que se repitan registros en la tabla
la estructura es
Código Delphi [-]
codigo:integer;
descripcion:String; 
cant:Currency; 
precio:Currency
quiero evitar que se repitan por el codigo

Última edición por Casimiro Notevi fecha: 26-06-2014 a las 16:27:27.
Responder Con Cita
  #2  
Antiguo 26-06-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Lo mejor, creo yo, es hacer un select del código para ver si te devuelve algo. Si devuelve algo, quiere decir que ya existe y deberás evitar ese insert.
Para esto, los DataSets tiene los métoso onBeforeInsert/onBeforeUpdate

También puedes poner algo en la base de datos que no permita duplicados. Puede ser:
un PrimaryKey
un UniqueKey
un Trigger que se encargue de verificarlo.

Si de todos modos quieres hacerlo mediante el dataset en memoria:

Primero guarda el código de dónde estás.
Luego deshabilitas el dataset, para que no se refresquen los datos mientras hacer el recorrido
Recorres buscando lo el código
Vuelves a posicionarte en el código que guardaste
Habilitas el dataset

Código Delphi [-]
with DataSet do
begin
   DisableControls;
   try
      // Codigo que queremos verificar si está repetido.
      Codigo := DataSet.Codigo;
      // Algo para saber cual es el registro en el que estas
      idRegistro := DataSet.IdRegistro;

      First;
      while ((not EOF) and (DataSet.IdRegistro <> IdRegistro) and (Codigo <> DataSet.Codigo)) do
         Next;

      // Si llegue al final y en este registro no se cumple la condición quiere decir que no existe
      if ((EOF) and (DataSet.IdRegistro <> IdRegistro) and (Codigo <> DataSet.Codigo)) then
         Duplicado := False;

      // Vuelvo a reposicionar el registro
      First;
      while ((not EOF) and (DataSet.IdRegistro <> IdRegistro)) do
         Next;
   finally
      EnableControls;
   end;
end

Nota: Si estás insertando o editando, este método no sirve, porque al moverte deberás hacer un Post o un Cancel
Responder Con Cita
  #3  
Antiguo 28-06-2014
VFont VFont is offline
Registrado
 
Registrado: mar 2008
Posts: 5
Poder: 0
VFont Va por buen camino
Y si ejecutas un query que realice un select de búsqueda del código que se introduce y si el recordcount del query te devuelve > 0 es que ya existe, si 0, lo aceptas.

Es una idea.

Saludos
Responder Con Cita
  #4  
Antiguo 28-06-2014
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
Esataba pensamdo eso pero como le le hago el query

Código Delphi [-]
SQL.add ('Select codigo from ???????????');
SQL.add ('Where codigo =:Codigo');
SQL.Add ('ParamsByname('Codigo').AsInteger:=codigo');
Open;


en from que coloco si es una tabla en memoria?
Responder Con Cita
  #5  
Antiguo 29-06-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.457
Poder: 20
newtron Va camino a la fama
Es que una cosa que todavía, creo, no ha quedado clara es si de lo que hablas es de un dataset en memoria o de una tabla de la base de datos en memoria, que son cosas distintas.

Según lo que cuentas imagino que es un dataset en memoria con lo que tendrías que usar la opción que te propone el colega duilioisola porque dudo que puedas ejecutar una instrucción SQL en un dataset en memoria.

En caso de que fuera una tabla en memoria si que podrías pasarle una instrucción SQL como a otra tabla cualquiera de la base de datos.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #6  
Antiguo 29-06-2014
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
¿Y no se puede usar algo del tipo lookup?

Ahora no tengo delphi aquí pero me suena que los componentes del tipo "dataset" suelen tener una función lookup con la que se sabe si existe un registro que cumpla una condición.
__________________
La Madurez se llama...
~~~Gaia~~~

Última edición por ozsWizzard fecha: 29-06-2014 a las 12:21:28.
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
Consultar Duplicados en una misma tabla o con otra tabla ingabraham SQL 3 13-03-2010 13:26:13
Consultar tabla desde DBCOMBOBOX ZeroHot Conexión con bases de datos 2 23-02-2010 18:43:54
Consultar el primer registro de una tabla Jose Roman SQL 2 11-02-2010 00:30:00
Consultar en memoria Vlady SQL 5 17-12-2008 17:36:36
Consultar los ultimos registros de una tabla FGarcia Firebird e Interbase 18 09-10-2008 19:07:45


La franja horaria es GMT +2. Ahora son las 15:59:52.


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