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 24-04-2012
vanesa007 vanesa007 is offline
Miembro
 
Registrado: ago 2010
Posts: 12
Poder: 0
vanesa007 Va por buen camino
como hacer una busqueda de un campo en una BD

hola amigos, para mi programita que ando peleando para hacerlo, y despacio va creciendo, llegue a esta parte, que me gustaria cambiarle algo, aunque asi anda bien, pero me gustaria agregarle unos detalles mas

tengo una dase datos que ice de ejemplo,solo para ir probando, la base datos real, que una ves terminado tendra mas campos, pero para empezar y experimentar, alcanza con solo 5 campos, tiene campo ID, NUMERO, NOMBRE, APELLIDO y DIRECCION, lo cual en el form me muestra en un DBGrib los campos que tiene, y puse un EDIT y un boton, con el codigo que esta mas abajo, en el edit escribo un APELLIDO a buscar en la base datos, y con el boton hago la busqueda para ver si esta en la base datos, si encuentra ese apellido en el DBGrib, me indica con un triangulito negro en el renglon donde esta ese apellido,
Bueno.. lo que s eme ocurrio seria.. que a medida que voy escribiendo letra a letra el apellido, me vaya apareciendo los todos los APELLIDOS que empiezan con esa primer letra, despues cuando escribo la segunda letra me aparezcan todos los apellidos que empiezan con esas dos primeras letras, y asi sucesivamente....... creo que me entienden...

y para el caso de que existan dos apellidos iguales, los nombres o la dirección sera diferente, entonces de esos dos apellidos aciendo un doble clic en el me lo mande a otro form nuevo......

esta parte la veo mas complicada, por eso recurro a alguien k me ayude

pero igual.. mientras espero alguna respuesta ire viendo como hacer esto

gracias

//mas abajo pongo el codigo DELPHI de como lo estoy aciendo y una imagen

Código:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, ADODB, Grids, DBGrids, StdCtrls, Mask, DBCtrls;
type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
    temp:integer;
   opcion:TLocateOptions;
begin
     adoTable1.Locate('apellidO',Edit1.Text,[]);
end;

end.
Imágenes Adjuntas
Tipo de Archivo: jpg Dibujo.JPG (38,7 KB, 32 visitas)
Responder Con Cita
  #2  
Antiguo 24-04-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Hola Vanesa: ¿Que tipo de base de datos usas?... Access, Paradox, Interbase, Firebird,....

Saludos
Responder Con Cita
  #3  
Antiguo 24-04-2012
Northern Northern is offline
Miembro
 
Registrado: ene 2006
Posts: 211
Poder: 19
Northern Va por buen camino
Cita:
Empezado por vanesa007 Ver Mensaje
hola amigos, para mi programita que ando peleando para hacerlo, y despacio va creciendo, llegue a esta parte, que me gustaria cambiarle algo, aunque asi anda bien, pero me gustaria agregarle unos detalles mas

...

Lo que quieres hacer no es difícil, es fácil. Lo complicado es que hay muchísimas maneras de hacerlo, muchísimas maneras de diseñarlo y muchísimas maneras de complicarse.

De entrada, poner los componentes de acceso a datos en el Form principal cuando dices que quieres agregarle unos detalles más, y a lo mejor después quieres agregar nuevos Forms, imprimir algunos registros, etc., no es lo más aconsejable. Los componentes de acceso a datos, y en general los componentes no visuales, aconsejan colocarlos en los TDataModule, un tipo de Form contenedor.

Pienso que tendrías que leer este libro "La cara oculta de Delphi 4" y allí hay muchas respuestas.
Responder Con Cita
  #4  
Antiguo 24-04-2012
vanesa007 vanesa007 is offline
Miembro
 
Registrado: ago 2010
Posts: 12
Poder: 0
vanesa007 Va por buen camino
HOLA AMIGOS, GRACIAS POR SUS PRONTAS RESPUESTAS....

para MartinS:
Estoy utilizando acces 2003

para Northern:
Voy a ller sobre TDataModule, por que de eso no tengo ni idea, vere que peudo hacer, pero si me dices que es mejor hacerlo asi, lo estudiare como se hace, mi programita seria sencillo, algo chico, no comercial, solo para alivianarme trabajo, claro que mas adelante agregaria algunos datos, corregiria errores de escritura en apellidos nombres o cosas asi.. pero gracias igual

saludos
Responder Con Cita
  #5  
Antiguo 24-04-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Vanesa:
Como bien dijo Northern existen muchas maneras de hacerlo. Aqui te voy a poner solo una para que vallas viendo mas o menos como seria el procedimiento:

Código Delphi [-]
procedure TPBuscarGral.Edit1Change(Sender: TObject);
begin
   If Edit1.Text <> '' then
   Begin
     With Dm.Internos do
     Begin
      Case ComboBox1.ItemIndex of
       0: Locate('Apellidos',Edit1.Text,[loCaseInsensitive, loPartialKey]);
       1: Locate('Nombres',Edit1.Text,[loCaseInsensitive, loPartialKey]);
       2: Locate('Domicilio',Edit1.Text,[loCaseInsensitive, loPartialKey]);
      end; // Case
     end; // With
   end;
end;

Si bien no sabemos el nivel que tienes en el desarrollo de programas usando delphi voy a tratar de explicarte algo de que es lo que hace el procedimiento de arriba:
El procedimiento se ejecuta cada vez que cambia el contenido del Edit (evento onChange) y verifica que mientras exista algun caracter hace la localizacion del registro de acuerdo al campo que estoy buscando (por medio de un combobox que tengo cargado apellidos, nombres y domicilio (el numero indica el indice del combo)) y las opciones loCaseInsensitive (no deferencia mayusculas y minusculas y el lopartialkey para que busque un parcial (creo que es esa la definicion).

Northern expuso lo del TDatamodule. Siempre se utiliza (Al menos yo) para colocar todos los componentes de acceso a datos y funciona como una unidad adicional del proyecto. Se crea a partir de menu - nuevo - DataModule y lo guardas con el nombre que desees y luego al form1, por ejemplo, le decis que use la unidad recien creada, en el ejemplo se llama DM. (por eso que para la busqueda uso DM.Internos) donde dm es el datamodule e internos seria tu AdoTable.-
El uso del Datamodule es importante porque si quieres hace doble clik en el apellido y lo levante otro formulario ese otro formulario tambien deberas indicarle que use el mismo Datamodule creado y al estar seleccionado el registro correspondiente te lo llevara sin mas preambulo.-

Bueno, Mas o menos esto podrias hacer, pero todo se hace suponiendo que el uso de mas de un formulario lo sabes hacer y tambien recomiendo que leas la cara oculta de delphi 4 que expuso aqui el compañero que de seguro te va a ayudar y mucho.

Saludos y aquí estamos para lo que necesites

Sugerencia: Mira el tutorial de Caral para aprender sobre bases de datos mas robustas en este caso Firebird (ya que quieres aprender, empeza por lo bueno )

PD: y a no desanimarse y preguntar sin miedo porque todos hemos pasado por esto en algún momento y aun seguimos preguntando para continuar aprendiendo.-
Responder Con Cita
  #6  
Antiguo 25-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola vanesa007.

Según entiendo queres hacer una búsqueda incremental, te pongo otra alternativa que hace lo que solicitas usando un TADOQuery :
Código Delphi [-]
procedure TForm1.EditChange(Sender: TObject);
begin
 with ADOQuery do
  begin
    Close;
    SQL.Text:='SELECT * FROM TU_TABLA WHERE APELLIDO LIKE :VALUE';
    Parameters.ParamByName('VALUE').Value:= Edit1.Text + '%';
    Open;
  end;
end;
En el caso de presentarse igualdades, supongo que lo indicado será dejar librada la elección al usuario aprovechando el evento OnClick u OnDblClick del TDBGrid.

Lo que también te comento que este tipo de búsquedas no son muy eficientes, sobre todo cuando se realizan en red ya que provocan mucho tráfico.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 28-04-2012
vanesa007 vanesa007 is offline
Miembro
 
Registrado: ago 2010
Posts: 12
Poder: 0
vanesa007 Va por buen camino
Smile gracias

gracias por responder, estoy estudiando los códigos que me pasaron, me andan bien

gracias
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
Como hacer busqueda en Unit y lo enviar para excel? Paulao Varios 6 29-02-2012 20:42:11
Como hacer una busqueda? Argaon Varios 5 04-06-2007 10:22:13
Como Hacer Una Busqueda En Firebird Y Mostrarla En Un Edit1.text anamaria789 Firebird e Interbase 2 03-06-2006 18:29:49
como hacer busqueda en mi bd (access) jas010 SQL 1 10-02-2005 06:29:56
¿Cómo puedo hacer una Búsqueda de Registros? Grimmy80 Conexión con bases de datos 1 28-10-2003 16:26:44


La franja horaria es GMT +2. Ahora son las 20:36:25.


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