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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2006
servicomp servicomp is offline
Miembro
 
Registrado: oct 2003
Ubicación: Cartago
Posts: 153
Poder: 21
servicomp Va por buen camino
Unhappy Problemas con Locate Usando DBEdit

Hola Compañeros

Estoy tratando de Usar Interbase/Firebird en una pequña base de datos de prueba que es la siguiente

CREATE TABLE UNO (
CODIGO VARCHAR(10) NOT NULL,
NOMBRE VARCHAR(30),
CIUDAD VARCHAR(20),
TELEFONO VARCHAR(15),
EDAD INTEGER
);

/******************************************************************************/
/**** Primary Keys ****/
/******************************************************************************/

ALTER TABLE UNO ADD CONSTRAINT PK_UNO PRIMARY KEY (CODIGO);

He conectado mi tabla gracias a un cuatro componentes IBDatabase, IBTransaction, IBDataset y un DataSource. Hasta aqui muy bien, y leyendo lo poco que se ha escrito y que he teido acceso (si tienen algo más me gustaría).


El problema esta cuando quiero ingresar un codigo que esta repetido. He querido verificar el uso con la funciona LOCATE, pero mepide tres parametros.

El primero el nombre del Campo como es normal.
Lo segundo donde se encuentra la variables pero no se como direccionar mi DBEDit1. Lo e intentado con DBEDit.text, y con BEdit1 y no me funciona

Por otro lado lo he colocado con unntexto fijo, pero no se en que evento colocarlo, para que terminado de escribir el DBEDit1 y salir del foco, este, si esta repetido me traiga la información a los DBEdit restantes.
Responder Con Cita
  #2  
Antiguo 08-04-2006
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Para lo que quieres hacer, te aconsejaría no usar un TDBEdit sino un control TEdit normal (o mejor un TMaskEdit), ya que los TDBEdit, como están enlazados directamente a campos de la base de datos, siempre modificará el valor existente sin darte tiempo a comprobar el valor introducido antes de la modificación. Después, para actualizar el control TEdit, has de servirte de los eventos del DataSource relacionado, más concretamente del evento OnDataChange. Ej:
Código Delphi [-]
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if (Edit1.Text <> '') and not DataSet.Locate('CODIGO', Edit.Text, []) then
  begin
    // Escribe aquí las operacines a realizar si no encuentra el registro
  end;   
end;

procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
  // Actualizamos el contenido del control según la base de datos
  Edit1.Text := DataSet.FieldByName('CODIGO').AsString;
end;

Los DataSources posee dos eventos más: OnStateChange (captura los cambios de estado del DataSet) y OnUpdateData (se ejecuta cuando se van a modificar los campos de la base de datos), revisa la ayuda sobre esta clase para más información.

Por último, tienes la opción de crearte tu propio control TDBEdit que realice lo que quieres!

Saludos!

Última edición por jmariano fecha: 08-04-2006 a las 20:21:41.
Responder Con Cita
  #3  
Antiguo 08-04-2006
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Escribo de nuevo porque se me había olvidado dos pequeños detalles en el ejemplo anterior:

1º No se ha de buscar registros si el DataSet está en modo de edición o inserción.

2º No se ha de buscar registros si, lógicamente, el contenido del control no ha cambiado (tal y como está ahora, lo busca siempre).

Así que mejorando el ejemplo anterior, quedaría así:
Código Delphi [-]
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if Edit1.Modified and (Edit1.Text <> '') and not (DataSource1.State in [dsInser, dsEdit]) 
      and not DataSet.Locate('CODIGO', Edit.Text, []) then
  begin
    Edit1.Modified := False;
    // Escribe aquí las operacines a realizar si no encuentra el registro
  end;   
end;
(La propiedad Modified indica que el control ha sido modificado)

Saludos!
Responder Con Cita
Respuesta



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
problemas con locate halizia Conexión con bases de datos 3 10-04-2006 08:29:14
Problemas con Locate Acker Tablas planas 12 05-08-2005 15:47:46
Problemas con locate Ivanzinho Firebird e Interbase 0 03-05-2005 17:45:57
problemas con locate maui Conexión con bases de datos 19 19-06-2004 07:53:57
Problemas Con Locate gzerox Firebird e Interbase 4 20-05-2004 10:06:14


La franja horaria es GMT +2. Ahora son las 16:45:40.


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