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 31-07-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Cambio de campo en una consulta

Buenas tardes de nuevo

Primero de todo Delphi 6 y Firebird 1.5, es que a veces se me pasa comentarlo.

A ver si alguien me ilumina otra vez, pues debo tener la bombilla fundida.
Tengo un form de busqueda con un JVdbgrid, un combobox, un edit y una IBSQL.
De entrada el form cuando se inicia hace la primera consulta la cual esta programada en el IBSQL.

El problema lo tengo si introduzco algun caracter en el edit para que busque un registro concreto y despues voy al combobox y cambio el criterio (campo) de busqueda que me lanza un error de index out of bounds.

La linea que falla creo que es la comentada // ya que si la pongo sin comentar falla y asi no, pero claro no da error pero tampoco hace el order by.

Código Delphi [-]
 
procedure TF_BuscarCamio.ComboBox1Select(Sender: TObject);
begin
        Edit1.Text :='';
        OrdenarGrid.Close;
        //OrdenarGrid.SQL[2] := 'ORDER BY '+ ComboBox1.Text;
        OrdenarGrid.Open;
        OrdenarGrid.FieldByName(ComboBox1.Text).Index := 0;
        DBGridBuscar.SetFocus;
end;
procedure TF_BuscarCamio.Edit1Change(Sender: TObject);
begin
        OrdenarGrid.Close;
        OrdenarGrid.SQL.Clear;
        OrdenarGrid.SQL.Add('select * from BOM0001 where upper('+Combobox1.text+') like ''%'+AnsiUpperCase(Edit1.Text)+'%'' order by '+Combobox1.text+'');
        OrdenarGrid.Open;
end;

Si a alguien no le falla el generador y tiene luz.....

Gracias de nuevo

Josep
Responder Con Cita
  #2  
Antiguo 31-07-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Haber haslo así:
Código Delphi [-]
procedure TF_BuscarCamio.ComboBox1Select(Sender: TObject);
begin
        Edit1.Text :='';
        OrdenarGrid.Close;

//ojo la primera fila es la cero(0) y la segunda es uno(1) 
        OrdenarGrid.SQL[1] := 'ORDER BY '+ ComboBox1.Text;// reemplazo la segunda fila de la consulta SQL
        OrdenarGrid.Open;
        OrdenarGrid.FieldByName(ComboBox1.Text).Index := 0;
        DBGridBuscar.SetFocus;
end;

Código Delphi [-]
procedure TF_BuscarCamio.Edit1Change(Sender: TObject);
begin
      OrdenarGrid.Close;
      OrdenarGrid.SQL.Clear;
// agrego la consulta SQL en 2 Filas(Strings) 
      OrdenarGrid.SQL.Add('select * from BOM0001 where upper('+Combobox1.text+') like ''%'+AnsiUpperCase(Edit1.Text)+'%''');
      OrdenarGrid.SQL.Add('order by '+Combobox1.text);
      OrdenarGrid.Open;
end;
Espero te sea de utilidad.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 31-07-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

Hola Jafera

Yo antes usaba un metodo parecido al tuyo para hacer las busquedas, aunque despues me encontre otro mas practico:
Antes usaba este metodo:
1.- un JvDBFindEdit que tiene asociado el datasourse del grid, este compontente que pertence a Jedi Vcl project, hace el trabajo por ti, y tiene 2 modos locate y filter, ademas te permite buscar por fisrtpos o anypos.
2.- un Combo box con los posibles criterios de busqueda (campos)
3.- En el evento OnCloseUp del compo el siguiente codigo:
Código Delphi [-]
procedure TfrmBuscArt.cbbBuscarPorCloseUp(Sender: TObject);
begin
if cbbBuscarPor.ItemIndex=0 then
begin
  JvDBFindEdit1.DataField:='DESCR';
end;
if cbbBuscarPor.ItemIndex=1 then
begin
  JvDBFindEdit1.DataField:='CLV_ART';
end;
if cbbBuscarPor.ItemIndex=2 then
begin
  JvDBFindEdit1.DataField:='CLV_ALTER';
end;
end;

El metodo que utilizo ahora es el siguiente:
1.- un JvDBFindEdit que tiene asociado el datasourse del grid, este compontente que pertence a Jedi Vcl project, hace el trabajo por ti, y tiene 2 modos locate y filter, ademas te permite buscar por fisrtpos o anypos.
2.- Quite el ComboBox ya que este me limita los criterios de busqueda a los que aparecen en el listado y cambie por hacer un evento que cuando hagas click en el titulo de la columna se cambie de criterio de busqueda o sea el campo de la columna que cliqueaste, para esto debes tener activada la propiedad TitleButtons en True en el grid.
3.- En el evento OnTitleBtnClick del grid el siguiente codigo:
Código Delphi [-]
procedure TFORM15.JvDBGrid1TitleBtnClick(Sender: TObject; ACol: Integer;
  Field: TField);
begin
    edtDESCR.DataField:=JvDBGrid1.Columns[Acol].FieldName;
    Caption:='Busqueda de Articulos por '+JvDBGrid1.Columns[Acol].Title.Caption;
    edtDESCR.Find(edtDESCR.Text);
    chkExist.OnClick(Sender);

end;

edtDESCR es el nombre del objeto JvDBFindEdit que utilizo para la busqueda.

Tambien para cambiar el modo de busqueda en cualquier posicion o primera posicion lo hago con un checkbox y el siguiente codigo:
Código Delphi [-]
procedure TFORM15.CheckBox1Click(Sender: TObject);
begin
  if CHECKBOX1.Checked=True then
  begin
    edtDESCR.FindMode:=fmAnyPos;
    edtDESCR.Find(edtDESCR.Text);
  end;
  if CHECKBOX1.Checked=False then
  begin
    edtDESCR.FindMode:=fmFirstPos;
    edtDESCR.Find(edtDESCR.Text);
  end;
end;

Espero te sirvan estas ideas y cualquier duda no mas escribes

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #4  
Antiguo 02-08-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Gracias por vuestras respuestas.

En principio y por comodidad (rapidez) he implantado la de rgstuamigo.

Afunez, la tuya tiene buena pinta y con más calma la voy a implantar seguro, pero ahora no tengo tiempo.

Me ha gustado mucho el tema de hacer click en la barra de titulos.

Solo una cuestion al respecto, si hago un click me sale una flecha arriba y si vuelvo a hacer click me sale la flecha abajo.

Esto se controla en algun sitio? o por defecto es una ordenacion asc y una desc

Gracias

Josep
Responder Con Cita
  #5  
Antiguo 02-08-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

Hola
Lo de que si te sale una flecha hacia arriba o hacia abajo, no tiene ninguna afectacion ya que no hay ningun evento o propiedad configurado para ese efecto, en todo caso yo asumo que se podria usar para temas de ordenamiento, sin embargo yo solamente lo he usado para cambiar el campo de busqueda.

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
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
Cambio de Moneda dentro de una consulta MaMu SQL 2 10-03-2008 04:34:26
Cambio de tipo en campo berfer Firebird e Interbase 0 23-08-2006 18:45:34
Como cambio las vistas de los resultados de una consulta???? yo_coco_py SQL 1 17-06-2005 18:25:52
Problema cuando cambio la dimension de un campo Durbed Firebird e Interbase 1 06-04-2005 14:21:25
Cambio de extensión en campo de paradox AlJasham Conexión con bases de datos 3 16-07-2004 17:20:39


La franja horaria es GMT +2. Ahora son las 22:27: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