Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   seleccionar fila dbgrid stackoverflow (https://www.clubdelphi.com/foros/showthread.php?t=36102)

Ade 02-10-2006 17:33:25

seleccionar fila dbgrid stackoverflow
 
Hola a todos
tengo un Zquery ,datasource, dbgrid ,combobox, edit ,boton(buscar) y boton (modificar).
Seleccionando en el combobox el campo e introduciendo en el edit la sentencia para que busque ( para el like) y pulsando en buscar, me muestra los datos encontrados en el dbgrid, eso funciona.

Pero teniendo activada la opción dgRowSelect del DBGrid mi problema es que si query me devuelve solo un registro me deja seleccionar la fila y tras pulsar modificar en los dbedit me aparecen los datos de ese registro, pero cuando el query me devuelve + de 1 registro, cuando trato de seleccionar una fila ( solo quiero seleccionar una para poder modificar ) me sale un error:

stackoverfow ( creo q lo escribi mal)

alguien sabe a que puede deberse??

Saludos y gracias

Ade 02-10-2006 23:24:53

error en mi codigo?
 
asi realizo la busqueda tras pulsar el boton buscar:
Código Delphi [-]
cadena:='Select cod_proveedores,descripcion_proveedor,tipo_proveedor,telefono from Proveedores where '+PChar(Combo.text)+' Like "%'+PChar(Cadena.Text)+'%" order by '+PChar(Combo.text);
ZQuery1.Sql.Clear;
ZQuery1.Sql.Add(cadena);
y tras mostrarme los datos en el dbgrid y pulsar modificar:
Código Delphi [-]
procedure TProveedores.ModificarClick(Sender: TObject);
begin
     ZTable1.Open;
     ZTable1.Locate('cod_proveedores', ZQuery1.FieldByName('cod_proveedores').AsInteger, []);
     Ztable1.Edit;
end
podria estar ahi mi fallo??
pues el query devuelve varios registros y entonces
Código Delphi [-]
ZQuery1.FieldByName('cod_proveedores').AsInteger
no estaria fijado y por ello no puedo seleccionar la fila en el dbgrid??
si alguien pudiera ayudarme..

Gracias d etodos modos, seguire intentandolo
Saludos

Ade 04-10-2006 02:10:38

Problema solucionado, algunas veces lo mejor es eliminar los componentes y volver a empezar, pues hice tantas modificaciones para q funcionara que no modifique algo q no debia, pues probé en un proyecto nuevo y funcionaba, asi q empece.

Saludos y gracias

Max_E. 07-10-2006 20:43:31

hola a todos:

Ade, quiero hacer la misma aplicacion de busqueda y estoy utilizando los mismo codigos y componentes que tú, quiera por favor le des una mirada a mis codigos pues no funcionan apesar que solo cambio los nombres de los campos y de componentes.

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    ComboBox1: TComboBox;
    DBGrid1: TDBGrid;
    Button1: TButton;
    DataSource1: TDataSource;
    Query1: TQuery;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
query1.Open;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Query1.Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
cadena:string;
begin
cadena:='Select nombre, codigo from busqueda where '+PChar(Combobox1.text)+' Like "%'+PChar(edit1.Text)+'%" order by '+PChar(Combobox1.text);
Query1.Sql.Clear;
query1.SQL.Add(cadena);
end;
end.

y en el SQL del query inicialmente tiene

Código Delphi [-]
Select *
from busqueda

donde: busqueda en el archivo DB


lo curioso es que cuando por directamente en el SQL inicial
Código Delphi [-]
Select nombre, codigo from busqueda where nombre Like "%j%" order by nombre

funciona perfectamente y busca todos los nombre que empiesen con J

Ade 07-10-2006 20:51:23

hola max, activaste el query??, tal vez si haces el open despues..
prueba esto y sino lo vuelvo a mirar.
Código Delphi [-]
                ZQuery1.Active:=true;
                ZQuery1.Sql.Clear;
                ZQuery1.Sql.Add(cadena);
                ZQuery1.Open;

Saludos

Max_E. 07-10-2006 21:15:26

ufff.....
 
hola Ade:

Me faltaba abrir el query despues de cargar la nueva cadena :D , ahora si funciona.

muchas, muchas, muchas gracias.:)

Ade 07-10-2006 21:41:30

y a mi se me olvido ponerlo en el 1º codigo que publique :o
me alegro de que t funcionara, solo comentarte q debes de asegurarte de q el usuario seleccione algo en el combo e introduzca algo en el edit,
antes de hacer el select, sino te dará error, para el combo lo puedes ver con

Código Delphi [-]
if Combo.ItemIndex <> -1 then 
//ha seleccionado alguno
else 
//no selecciono ninguno

Saludos

Max_E. 07-10-2006 21:53:08

ok
 
hola denuevo Ade :)
ok, lo tomare en cuenta:D:D:D


La franja horaria es GMT +2. Ahora son las 12:38:04.

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