Delphi - Ayuda con SQL

 
Vista:

Ayuda con SQL

Publicado por ismael (136 intervenciones) el 02/11/2004 11:52:53
Hola, El asunto es que no puedo obtener la siguiente consulta....
tengo 1 Query, 1boton, 1 Dbgrid, 1 Edit, 1 DataSource...

Yo tengo hasta ahora:
Proced.... Boton(...);
begin
ConslQuerySql.Close;
ConslQuerySql.SQL.Clear;
ConslQuerySql.SQL.Add('SELECT Apellido_Pat FROM mibaseparadox');
ConslQuerySql.Open;
end;
hasta ahi comprendo que estoy generando una consulta con todos los apellidos paternos de la base de datos mibaseparadox.

Pero lo que busco es mediante el edit teclear el apellido paterno a buscar(si apellido es X, traer todos los que se apelliden X) y esto lanzarlo con un click del boton(buscar)...

ah.. pero me parece que solo estaria obteniendo el apellido paterno, como obtendria los demas campos(nombre, telefono,etc)
espero me entiendan, y por su ayuda muchas gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con SQL

Publicado por Elena (330 intervenciones) el 02/11/2004 13:28:08
Ok.. enlazas tu dbGrid con el DataSource del Query y en el onclic del botón pones
with Query, SQL do
begin
Close; Clear;
Add('SELECT nombre, telefono, Apellido_Pat FROM mibaseparadox'+
' Where Apellido_Pat ' +#39+Trim(Edit.Text)+#39 );
end;

Espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SQL

Publicado por nadie (43 intervenciones) el 03/11/2004 08:15:43
Para los que utilizan cosas como

#39 + Trim(Edit1.Text) + #39

tengo buenas noticias.

Existe una función llamada QuotedStr() que te devuelve una cadena de texto correctamente entrecomillada, incluso aunque la cadena contenga comillas:

Entonces escribiríamos:

'where apellido_pat = ' + QuotedStr(edit1.text);

Aunque una solución MEJOR sería escribir la consulta con parámetros:

SELECT
LOQUESEA
FROM
UNATABLA
WHERE
APELLIDO_PAT = :Apellido

Luego, en el código:

Consulta.Close;
Consulta.ParamByName('Apellido').AsString := Edit1.Text;
Consulta.Open;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SQL

Publicado por Ismael (4 intervenciones) el 07/11/2004 07:54:42
Muchas gracias, el asunto ya esta solucionado....
gracias a elena, tus respuestas anteriores referentes a sql en este foro me ayudaron a resolver mi problemita, la funcion de QuotedStr aun no la pruebo, y la de shannon parece igual de buena, ya la utilizare....
gracias por su ayuda, ya que al ayudarme ayudan a muchos que igual que tienen estas dudas...
atte. Ismael
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SQL

Publicado por shannon devenish (31 intervenciones) el 04/11/2004 22:35:21
ConslQuerySql.Close;
ConslQuerySql.SQL.Clear;
ConslQuerySql.SQL.Add(\'SELECT Apellido_Pat FROM mibaseparadox\');
ConslQuerySql.SQL.Add(\'Where APELLIDO like '+quotedstr(trim(edit1.text)+'%'));
ConslQuerySql.Open;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SQL

Publicado por bigluis (713 intervenciones) el 07/11/2004 10:49:05
Esto es lo mas practico, sin desmerecer el resto de respuestas:
En el evento OnChange de un TEdit escribes lo siguente.Cada vez que introduzcas un nuevo caracter a partir del tercero o del que tu quieras te reliza la busqueda y te trae los datos
procedure TFormPrincipal.Edit10Change(Sender: TObject);
var
campo,Sentencia:String;
begin
if Length((sender as TEdit).Text)>=3 then
begin
//eliges el campo de un RadioGroup creado por ti
Campo:=RadioGroup4.Items[RadioGroup4.ItemIndex];
//o de la regilla al escoger el campo a la vista
//campo:=DbGrid1.SelectedField.Fieldname;
try
begin
Modulo.Query1.Close;
Modulo.Query1.SQL.Clear;
Modulo.Query1.SQL.Add('Select * from mitabla where '+Campo+' Like (:Tira)'+
' order by apellido');
//Sentencia:='%'+(sender as TEdit).Text+'%';//Todo el campo
Sentencia:=(sender as TEdit).Text+'%';//Principio Igual
//Sentencia:='%'+(sender as TEdit).Text;//Final igual
Modulo.Query1.Parambyname('Tira').Value:=Sentencia;
Modulo.Query1.Open;
end;
except
exit;
end
end;//if
end;
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SQL

Publicado por Elena (330 intervenciones) el 19/11/2004 19:44:20
Aunque sea ya un poco tarde para seguir con este tema, si me gustaría informarle que en informática existe una palabra llamada PERFORMANCE y por la cual debemos velar especialmente los programadores.
En el caso de usar parámetro, este es más lento que escribir directamente el Query, esto porque funcionan de la sigte manera: Cierra el query, cuando se encuentra con el parametro busca su valor y luego va al intérprete SQL de la base de datos, entonces abre el query y te dice si hay algún error, si lo pasas directamente, cierra el query, interpreta y abre, por lo que es más rápido.
Y lo del OnChange en el Edit, te confirmo que es una idea de lo peor a medida que tengas más registros, más lenta se hará, porque irá buscando cada vez que presiones una tecla, imagínate buscando letra a letra en 1 millón de registros.... sería un caos.
Esto me lo ha enseñado la experiencia de 5 años en esto,.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SQL

Publicado por BigLuis (713 intervenciones) el 20/11/2004 13:18:12
Vamos por partes Elena.Ya me has enmendado la plana en un par de ocasiones y en ambas tienes razón, pero como la razón nunca es absoluta, y sin animo de entrar en polemicas Y NO TE QUEPA LA MENOR DUDA DE QUE NO ESTOY MOLESTO, voy a hacer un par de puntualizaciones.
En cuanto a los parámetros, he leido en libros de autores que sabe mas que yo (aunque para ello no hace falta saber mucho) que las consultas con parámetros ofrecen una mayor PERFORMANCE (nunca habia profundizado en saber porque, digamos que lo creía y unto.Ahora si intentaré saber porque),y no digamos nada en bases de datos que admiten el llamado REQUERY.
En lo relativo al evento Onchange del TEdit, puede ser cierto lo que dices del caos con un millon de registros, pero es una solucion válida para aplicaciones que manegen una cantidad aceptable de registros(yo lo empleo y me va muy bien).
Doy por sentado que los que acudimos a los foros con consultas no
implementamos aplicaciones que manegen MILLONES DE REGISTROS ya que estas cantidades no son normales en, por ejemplo pequeñas empresas, y en las grandes supongo que no encargarían un software a nadie como yo, que tiene que acudir a foros para saber como se imprime un informe o como se implementa una consulta SQL (entiendes el concepto?).Por ello en ocasiones las soluciones que a priori parecen malas son perfectamente válidas.Luegoestá en el criterio del programador aceptarlas o no.
Podría segruir, pero no quiero que se me malinterprete.
Saludos y Suerte.
PD.:Por cierto yo llevo algun año mas de 5 en esto, aunque debo ser un poco tarado pues veo que no avanzo lo suficiente...Quizas sea la edad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar