Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Buscando una cadena dentro de una tabla (https://www.clubdelphi.com/foros/showthread.php?t=68532)

carlos v.p.l. 18-06-2010 23:49:53

Buscando una cadena dentro de una tabla
 
saludos, espero me puedan ayudar, el problema que tengo es que necesito buscar una cadena en una tabla, estuve buscando como entonces llegue a este codigo:
[
Código Delphi [-]
procedure TForm5.Button1Click(Sender: TObject);
begin
     Unit2.DataModule2.cliente.Locate('nombre','carlos',[]);
end;
El problema que tengo es que funciona con enteros por ejemplo:
[
Código Delphi [-]
procedure TForm5.Button1Click(Sender: TObject);
begin
     Unit2.DataModule2.cliente.Locate('idnombre',5,[]);
end;
y si me ubica pero deplano con cadenas pues me marca un error que dice asi:
unsopported feature , espero que haya otra manera de hacer la busqueda y me puedan ayudar o ya si deplano es asunto de mi delphi o mmm alguna recomendación,gracias y saludos de nuevo

carlos v.p.l. 19-06-2010 01:27:09

Encontre por ahi que tengo que modificar el archivo IBSQL.pas , pero no lo encuentro por ningun lado, alguien lo ha utilizado ya? xD podria decirme donde encontrarlo por favir y grax

Casimiro Notevi 19-06-2010 01:47:31

Hola, carlos v.p.l., por favor, echa un vistazo a la guía de estilo de clubdelphi, así será más fácil ayudarte.

No has explicado nada de qué base de datos, componentes, etc. estás usando.

La pregunta, además, es algo confusa, supongo que quieres buscar un texto en un campo de una tabla.

Hay varias formas, pero sería conveniente que explicaras qué componentes usas y base de datos, eso como mínimo.


p.d.: No sé de dónde has sacado eso, pero ni si te ocurre modificar ibsql.pas :confused:

carlos v.p.l. 19-06-2010 01:55:13

1 Archivos Adjunto(s)
ok disculpa , lo que pasa es que encontre una respuesta a una pregunta con el mismo problema igual al mio , no kisiera confundir pero kisiera aprovechar esa respuesta por ke parece que si le funciono al otro amigo , pero por alguna razon no puedo pegar el link aqui en el mensaje , ahi viene la solucion a mi problema y pues ahi indica ke se debe modificar el archivo IBSQL.pas
Adjunto un txt con el link del tema del foro donde entre dicha respuesta por ke todavia no tengo permitido poner un link por aca segun esto, grax por adelantado

Casimiro Notevi 19-06-2010 02:08:16

El caso que indicas es un tema de caracteres unicode con los últimos delphi.

En tu caso, todavía no has dicho nada de qué usas y qué quieres hacer.

carlos v.p.l. 19-06-2010 02:13:17

hola , pues como tu lo indicas yo quiero buscar un texto en una tabla, y pues me aparece el mismo error que tiene el otro amigo en el link que adjunte, en el mismo caso que puso el que es cuando usa located para buscar un nombre por ejemplo, el error es el :
"unsupported feature", pero solo me pasa cuando busco cadenas , con enteros me funciona bien, que puedo hacer ??, yo queria probar con la respuesta que le dieron pero que me recomiendas? por favor y grax ,jeje se me estaba escapando de new : uso interbase y delphi 2009 grax

Casimiro Notevi 19-06-2010 02:25:31

Bueno, pues si quieres hacer lo mismo, ¿qué te lo impide?.
De todas formas no es muy recomendable modificar esos componentes.

carlos v.p.l. 19-06-2010 02:28:07

mmm je je je no kisiera regarla y no se donde esta el archivo no lo encuentro por ningun lado ,me puedes ayudar? por favor? o podrias recomendarme alguna otra manera de atacar mi problema por favor y grax

Casimiro Notevi 19-06-2010 02:39:12

Es algo complejo cuando no has explicado detalladamente qué quiéres hacer, pero si no voy muy mal equivocado, sólo pretendes buscar un texto y usas interbase con los componentes ibx?

Lo más lógico es usar sql, un componente IBDataSet y en su propiedad selectsql.text pones la sentencia de búsqueda, algo así:

Añade al form un tibdataset, un tedit y un botón
Código:

QR1: TIBDataSet;
bt1: TButton;
ed1: TEdit;

En el edit ponemos lo que queremos buscar y en el onclick del botón:

Código:

procedure TForm1.bt1Click(Sender: TObject);
begin
  qr1.Close;
  qr1.SelectSQL.Text := 'select campo from tutabla where campo containing '+quotedstr(ed1.text);
  qr1.Open;
  ShowMessage( QR1.fields[0].AsString );
end;

Es sólo un ejemplo para que te sirva de referencia.

Caral 19-06-2010 02:53:58

Hola
:confused::confused:
No entiendo nada.:D
Saludos

carlos v.p.l. 19-06-2010 03:02:43

ok, uso una unidad 2 como modulo de datos ahi tengo mi TIBDatabse mi TIBtransaction y por ejemplo
mi tabla TIBTable "clientes", en una unidad 5
tengo un TDatasource hacia clientes, en mi form de la unit 5 tengo un tDbgrid conectado al
datasourc , tons mi tabla clientes tiene un campo nombre y un campo idcliente por ejemplo,.

soy bastante novato en esto asi ke pues en donde esta el uses de mi form5 inclui mi unit2 entonces para acceder a mi tabla accedo de esta manera:
Unit2.DataModule2.cliente y ya por ejemplo para usar alguna propiedad pues:
Unit2.DataModule2.cliente.FieldbyName ,y funciona bien , si kisiera bsucar un 'carlos' por ejemplo en el campo 'nombre' siguiendo tu ejemplo esta bien esta sintaxis? o me ekivoke en algo por ke me marcar un error:
Código Delphi [-]
procedure TForm5.Button1Click(Sender: TObject);
begin
    IBDataSet1.Close;
    IBDataSet1.SelectSQL.Text:='select nombre from Unit2.DataModule2.cliente where nombre containing'+quotedstr(Edit2.Text);
    IBDataSet1.Open;
    ShowMessage( IBDataSet1.fields[0].AsString );

end;
donde IBDataSet1 es mi dataset
espero me puedas seguir ayudando grax

Caral 19-06-2010 03:16:43

Hola
Vamos por partes:
1: datamodule = unit2
tienes: TIBDatabse1, TIBtransaction1 y TIBTable1
2: form5 = unit5
tienes: datasource1, dbgrid1, button1, Edit2.
Todo conectado correctamente.
3: Unit2 esta en el uses del unit5??. suponemos que si.
4: en el boton1:
Código Delphi [-]
procedure TForm5.Button1Click(Sender: TObject);
begin
    DataModule2.TIBTable1.Close;
    DataModule2.TIBTable1.SQL.Text:='select * from tutabla where nombre like '+quotedstr(Edit2.Text);
    DataModule2.TIBTable1.Open;
  //  ShowMessage( IBDataSet1.fields[0].AsString ); // no entiendo para que?

end;
Voy bien?
Saludos

carlos v.p.l. 19-06-2010 03:21:29

Cita:

Empezado por Caral (Mensaje 367722)
Hola
Vamos por partes:
1: datamodule = unit2
tienes: TIBDatabse1, TIBtransaction1 y TIBTable1
2: form5 = unit5
tienes: datasource1, dbgrid1, button1, Edit2.
Todo conectado correctamente.
3: Unit2 esta en el uses del unit5??. suponemos que si.
4: en el boton1:
Código Delphi [-]procedure TForm5.Button1Click(Sender: TObject); begin DataModule2.TIBTable1.Close; DataModule2.TIBTable1.SQL.Text:='select * from tutabla where nombre like '+quotedstr(Edit2.Text); DataModule2.TIBTable1.Open; // ShowMessage( IBDataSet1.fields[0].AsString ); // no entiendo para que? end;

Voy bien?
Saludos

En lugar de * seria el campo nombre y no le habia puesto like le habia puesto containing ya probe pero = tiene error y vas bien grax

Caral 19-06-2010 03:23:37

Hola
Tiene error????.
Que error????, donde, cuando, como?.
Saludos

carlos v.p.l. 19-06-2010 03:28:56

al parecer tiene un problema con mi punto despues de Unit2 en la siguiente instruccion
Código Delphi [-]
procedure TForm5.Button1Click(Sender: TObject);
begin
    IBDataSet1.Close;
    IBDataSet1.SelectSQL.Text:='select nombre from Unit2.DataModule2.cliente where nombre like'+quotedstr(Edit2.Text);
    IBDataSet1.Open;
end;

end.
Y es que por ejemplo en otros form cuando tengo que acceder a un campo de mi tabla por ejemplo para saber el valor accedo asi:
Código Delphi [-]
Unit2.DataModule2.nombredelatabla.FielByName('campo').value;
por ejemplo
de ke otra manera puedo acceder ami tabla y grax

Caral 19-06-2010 03:31:46

Hola
Cliente es el nombre del TIBTable1 o de la tabla???
Saludos

carlos v.p.l. 19-06-2010 03:34:04

De la TIBTABLE y de la tabla que hice en interbase , acostumbro ponerles el mismo nombre para no confundirme je

Caral 19-06-2010 03:38:24

Hola
1
Código Delphi [-]
procedure TForm5.Button1Click(Sender: TObject);
begin
    DataModule2.cliente.Close;
    DataModule2.cliente.SQL.Text:='select nombre from cliente where nombre like'+quotedstr(Edit2.Text);
    DataModule2.cliente.Open;
end;
2
Código Delphi [-]
procedure TForm5.Button1Click(Sender: TObject);
begin
    IBDataSet1.Close;
    IBDataSet1.SelectSQL.Text:='select nombre from cliente where nombre like'+quotedstr(Edit2.Text);
    IBDataSet1.Open;
end;
3
pasame el programa la bd y todo y lo veo.:)
Saludos

carlos v.p.l. 19-06-2010 03:46:26

orale con tu opcion uno ya no me marca error , como puedo ver el resultado es decir si kisiera ver en un Edit3 por ejemplo el nombre que encontro (xD que obviamente es el ke ingrese je je je), com puedo hacer eso y grax de new o por ejemplo en un tdbgrid que se encuentre = en mi form5 que se posicione en la fila del nombre encontrado(el dbgrid estaria conectado con un datasourc hacia la tabla cliente =)

Caral 19-06-2010 03:49:17

Hola
Código Delphi [-]
procedure TForm5.Button1Click(Sender: TObject);
begin
    DataModule2.cliente.Close;
    DataModule2.cliente.SQL.Text:='select nombre from cliente where nombre like'+quotedstr(Edit2.Text);
    DataModule2.cliente.Open;
   Edit3.text:= DataModule2.cliente.fields[0].AsString;
end;
Saludos


La franja horaria es GMT +2. Ahora son las 12:11:05.

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