Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   como mostrar un query en un dbgrid? (https://www.clubdelphi.com/foros/showthread.php?t=76540)

carlosjaraba 08-11-2011 14:00:08

como mostrar un query en un dbgrid?
 
hola gente de clubdelphi

estoy creando una aplicacion en delphi pero necesito mostrar una tabla de una base de datos, !pero no mostrar todos los registros!, solo necesito que aparezcan los registros que concuerden con una palabra que voy a ir escribiendo en un edit

por ejemplo

escribo lamp

y me muestra todo lo que contenga lamp

lampara fluorecente
lampara para fotocopiadora
lampara para escaner

etc

pero no se como mostrar solo el query

tengo un adoconection, un adotable, un adoquery, un datasource y un dbgrid

si conecto el dbgrid al datasource salen todos los registros, pero eso no es lo que quiero, solo quiero mostrar lo que contenga lo que se valla escribiendo en el edit.

cordialmente
carlos german jaraba camacho

posdata, la tabla solo tiene una columna que se llama articulo. lo he hecho asi para simplificar pero una vez capte la idea lo tratare de hacer algo mas complejo y si no me sale pues a preguntar! feliz dia

se me olvidaba uso sql 2005 para almacenar la base de datos!

ecfisa 08-11-2011 14:35:13

Hola Carlos y bienvenido a los foros de Club Delphi. :)

Como a todos los que escriben en los foros por vez primera, te invitamos a que leas nuestra Guía de estilo

Sobre tu consulta, revisá este enlace

Un saludo.

MartinS 09-11-2011 02:30:39

Carlos: creo que el datasource debe hacer referencia al ADOQuery, no al ADOTable

yo uso interbase y los componentes son similares. En mi caso la busqueda parcial la realizo asi:

Buscar es un IBQuery
Ape es la variable que toma el valor del TEdit e incluyo las propiedades Upper para que no diferencie entre mayusculas y minusculas.... ahh el #39 es la ' ;

Código Delphi [-]
Buscar.sql.clear
Buscar.SQL.Add('SELECT ID,NHIST,APELLIDOS,NOMBRE,NDOC,FULTCONSULTA FROM PACIENTES where Upper(APELLIDOS) like '+#39+'%'+UpperCase(Ape)+'%'+#39;
Buscar.active := true;

En tu caso seria la instruccion SQL:
Código Delphi [-]
     Select articulo FROM NOMBRE_TABLA where Upper(Articulo) like ''%UpperCase('lamp')%"
el like es para que busque parcialmente.

Espero haberte ayudado y mas aun haber entendido tu pregunta.. Saludos

Casimiro Noteví 09-11-2011 10:34:08

Bienvenido a clubdelph, MartinSi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.

Recuerda poner etiquetas al código, ejemplo:



.

carlosjaraba 10-11-2011 14:36:35

muchas gracia
 
muchas gracias amigos, ya lo estoy probando cuando tenga un resultado les escribo a ver como me fue!! :):):)

carlosjaraba 10-11-2011 16:12:31

todavia me falta.
 
buenos dias, el codigo que adapte es el siguiente

procedure TForm1.Edit1Change(Sender: TObject);
begin
if Edit1.Text <> '' then
with ADOQuery1 do
begin
Close;
SQL.Text:= 'SELECT modelo, insumo, compatible FROM compatibilidad'+
' WHERE modelo LIKE '+QuotedStr(edit1.Text+'%');
Open;
end;

pero solo aparecen bien cuando comienzan por lo que estoy escribiendo. hasta ahi todo bien pero por la naturaleza de lo que estoy buscando es recomendable que en la busqueda aparezca lo que contenga no que estoy escribiendo no importa en que parte de la palabra lo contenga

osea para dar un ejemplo

si escribo az en el edit me tienen que aparecer

folder azul
pintura azul
folder az organizador

etc.

les agradeceria si me pueden ayudar hasta ahora ya es un avance porque antes no tenia ni idea de que hacer!!! gracias por compratir todo su conocimiento gratis Dios se lo multiplique!!:p:p

Casimiro Noteví 10-11-2011 17:08:39

Tal y como te dije antes, recuerda poner el código entre etiquetas para que se vea correctamente, gracias.


oscarac 10-11-2011 17:17:40

Cita:

Empezado por carlosjaraba (Mensaje 418109)
buenos dias, el codigo que adapte es el siguiente

procedure TForm1.Edit1Change(Sender: TObject);
begin
if Edit1.Text <> '' then
with ADOQuery1 do
begin
Close;
SQL.Text:= 'SELECT modelo, insumo, compatible FROM compatibilidad'+
' WHERE modelo LIKE '+QuotedStr(edit1.Text+'%');
Open;
end;

pero solo aparecen bien cuando comienzan por lo que estoy escribiendo. hasta ahi todo bien pero por la naturaleza de lo que estoy buscando es recomendable que en la busqueda aparezca lo que contenga no que estoy escribiendo no importa en que parte de la palabra lo contenga

osea para dar un ejemplo

si escribo az en el edit me tienen que aparecer

folder azul
pintura azul
folder az organizador

etc.

les agradeceria si me pueden ayudar hasta ahora ya es un avance porque antes no tenia ni idea de que hacer!!! gracias por compratir todo su conocimiento gratis Dios se lo multiplique!!:p:p

intenta esto en el where
Código SQL [-]
 
WHERE modelo LIKE '+QuotedStr('%' + edit1.Text+'%');

MartinS 10-11-2011 20:39:41

Eso es, te esta faltando el % delante del Edit para que te muestre lo buscado en cualquier lugar. Repito en ocasiones es bueno usar las clausulas upper para SQL y UpperCase en Delphi para que convierta todo a mayusculas para realizar las comparaciones. Esto no modifica la visualizacion solo la busqueda ya que AS, aS, As o as son distintos para SQL. Saludos

Casimiro Noteví 10-11-2011 21:32:54

Cita:

Empezado por MartinS (Mensaje 418150)
.. ya que AS, aS, As o as son distintos para SQL. Saludos

¿A qué base de datos te refieres?

MartinS 10-11-2011 22:34:28

ahhh... yo uso Firebird. y las busquedas las debo hacer asi porque solo me muestra los caracteres como los ingreso haciendo distincion entre mayusculas y minusculas (As es mi cadena de busqueda, no la instruccion). Pense que era para todas las bases que usan sentencias SQL igual...

Casimiro Noteví 10-11-2011 22:55:10

También uso firebird, creo que no he entendido bien lo que has dicho, con "(As es mi cadena de busqueda, no la instruccion)"
¿Quiéres decir que si estás buscando 'as' con like, debes escribirlo tal y como esté grabado, mayúsculas o minúsculas?, entonces... sí, es así.
Hay una forma de buscar sin importar mayúsculas/minúsculas, es usando 'containing', ejemplo:

Código SQL [-]
select Codigo, Nombre, Telefono from tbClientes where Nombre containing 'as'

En ese caso devolverá todos los as, AS, As, aS, etc.

MartinS 10-11-2011 23:59:11

Exacto casimiro... ahi se nota entonces la diferencia de mi SQL de 1 mes de uso vs tu experiencia jajaja... habia visto por algun lado el tema del containing pero no sabia para que usarlo... Saludos...

PD espero que Carlos no se haga mucha ensalada con esto

carlosjaraba 11-11-2011 14:41:25

y para grabar un registro nuevo?
 
amigos, hasta ahora todo excelente nunca podría haber salido mejor todo funciona a full pero tengo una preguntica

hasta ahora para agregar campos a la tabla me ha tocado entrar por el sql y escribirlos en la tabla directamente como seria para grabar los capos desde la misma aplicación? iniciando porque mi dbgrid quiero que sea de solo lectura (y así lo tengo) pues puse que saliera un nuevo frame con los edits suficientes para escribir los nuevos campos. me podrían hacer el favor de decirme como agregar una nueva fila ? se los agradecería de todo corazón

bueno, encontre esto en los foros
Código Delphi [-]
With query1 do
begin
  Sql.Text:='Insert into tabla (campo1,campo2) values(:variable1,:variable2)';
  ParamByName('variable1').AsString:='blablablabla';
  ParamByName('variable2').AsInteger:=543;
  ExecSql;
end;
pero no veo los edits por ningún lado como seria en ese caso??

ecfisa 11-11-2011 15:46:23

Hola Carlos.

Pero si ya lo tenés cocinado... :)
Código Delphi [-]
  With query1 do
  begin
    Sql.Text:='Insert into tabla (campo1,campo2) values(:variable1,:variable2)';
    ParamByName('variable1').AsString:= Edit1.Text;
    ParamByName('variable2').AsInteger:= IntToStr(Edit2.Text);  // (*) 
    ExecSql;
  end;
(*)En el caso de un campo numérico, también se puede hacer:
Código Delphi [-]
  ParamByName('variable2').AsString:= Edit2.Text; 
  //o  
  ParamByName('variable2').Value:= Edit2.Text;
Siempre, claro está, que estes seguro que el contenido de Edit2.Text sea un valor convertible al tipo de número esperado. Si nó, recibirás un error de conversión.


Edito:
Ya me olvidaba... Por favor, usa TAG's para encerrar el código que adjuntes a tu mensaje:



Un saludo.

carlosjaraba 11-11-2011 22:31:35

amigos, todo parecia ir muy bien hasta que me tope con lo siguiente
me sale un error

undechlared identifier ParamByName
undechlared identifier AsString

este es mi codigo

:D por fin cai en cuenta de lo de ponerle el tag yo quedaba :confused::confused:


Código Delphi [-]
With ADOQuery1 do
  begin
    Sql.Text:='Insert into COMPATIBILIDAD (MODELO,INSUMO,COMPATIBLE) values(:variable1,:variable2,:VARIABLE3)';
    ParamByName('VARIABLE1').AsString:= EDTMODELO.Text;
     ParamByName('VARIABLE2').AsString:= EDTINSUMO.Text;
      ParamByName('VARIABLE3').AsString:= EDTCOMPATIBLE.Text;

    ExecSql;
  end;

ecfisa 11-11-2011 22:38:24

Hola.

Es que con un TADOQuery, sería:
Código Delphi [-]
 ADOQuery1.Parameters.ParamByName('VARIABLE1').Value:= Edit1.Text;

Un saludo.

carlosjaraba 11-11-2011 23:09:00

Finalmente Completo El Proyecto!
 
muchas gracias amigos de clubdelphi sin su ayuda estaría perdido


todo solucionado. lo que escribieron todo funciona y a todas las preguntas le dieron respuestas!!!!:):):):):):)


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

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi