Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2011
Niiña Niiña is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 36
Poder: 0
Niiña Va por buen camino
como evitar varios Query.open..?

Hola.. tengo un problemitaa quisieraa disminuir mi codigo. estoy trabajando la base de datos en firebird
y tengo varios select ejemplo:

los componentes que estoy utilizando son: TIBconnection, TSQLtransaction,TSQLQuery, TDataSource.

Cita:
Código SQL [-]
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SELECT tabla2.campo  from tabla1, tabla2,tabla3 where tabla1.campo=tabla2.campo1  );
Query.Open;
variable:=Query.FieldByName('campo').AsInteger;

tengo varios select de esta manera, hay una manera de evitar colocar varias veces este mismo código para obtener una consulta.
la razon de cambiarlo es porque realizo el mismo codigo para las 4 consultas y empezo a darme error:

El error es:

conexion:PrepareStatement
Dynamic sql error
sql error code= -104
Token unknown - line 1 column 280
and.
Responder Con Cita
  #2  
Antiguo 17-10-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Query.SQL.Add('SELECT tabla2.campo from tabla1, tabla2,tabla3 where tabla1.campo=tabla2.campo1' );
Query.Open;

No se si lo has colocado asi a proposito o asi esta en tu modulo... pero le falta una comilla al final
asobre lo otro que comentas... podrias se un poco mas explicita?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 17-10-2011
Niiña Niiña is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 36
Poder: 0
Niiña Va por buen camino
no se me paso.! xD

Lo que quiero es no repetir varias veces el mismo código para obtener consultas distintas..!
Responder Con Cita
  #4  
Antiguo 17-10-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
tu ejemplo es algo ambiguo.. no creo que las tablas se llamen asi... no sabemos cual es el objetivo de los querys..
da mas detalles y quiza alguien pueda orientarte
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 17-10-2011
Niiña Niiña is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 36
Poder: 0
Niiña Va por buen camino
oks. necesito realizar varias consultas select y no quisiera repetir varias veces el mismo codigo.

este es el primero:
Cita:
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('select max(Tabla1.id)+1 FROM tabla1');
Query.Open;
variable1:= Query.Fields[0].AsInteger;
El segunto select es:
Cita:
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SELECT tabla2.id2 from tabla2,tabla3,tabla4,tabla5 where tabla2.id2=tabla3.id3 and tabla4.id4=tabla5.id5 ');
Query.Open;
variable2:=Query.FieldByName('id2').AsInteger;
El nombre de las tablas es un ejemplo.
Asi realizo 4 consultas select pero es mucho. Como puedo hacer para realizar las 4 consultas y no repetir el mismo procedimiento 4 veces.. o una consulta select se tiene que realizar ajuroo con esos pasos osea colocar el Query.close, luego el SQL.clear, el ADD, el open y para otra consulta lo mismo y asi sucesivamente
Responder Con Cita
  #6  
Antiguo 17-10-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mmmm podrias usar arrays
ejemplo
array[0] := 'Select.....'
array[1] := 'Select.....'
array[2] := 'Select.....'
array[3] := 'Select.....'

cuando quieras invocarlas haces un for
algo asi...

Código Delphi [-]
 
For x := 0 to 3
Query.Close;
Query.SQL.Clear;
Query.SQL.Add(Array[x]);
Query.Open;
If x=0 then
variable1:= Query.Fields[0].AsInteger
if x = 1 then
Variable2:= Query.FieldByName('id2').AsInteger; 
if x= 2 then
variable3 := ......
if x=3 then
Variable4 := .....
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #7  
Antiguo 17-10-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Haz una función... y utilizala en cada caso.

Código Delphi [-]
function Pedirdato ( SQL, Resultado:string): integer;
begin
  Query.Close;
  Query.SQL.Clear;
  Query.SQL.Add(SQL);
  Query.Open;
  return:= Query.FieldbyName.(resultado).AsInteger;
end;

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -

Última edición por Casimiro Notevi fecha: 17-10-2011 a las 19:45:16.
Responder Con Cita
  #8  
Antiguo 17-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Amigo, ni que fueses novato
¡¡¡Las etiquetas del código!!!
Responder Con Cita
  #9  
Antiguo 17-10-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
al mejor cazador se le va la presa
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #10  
Antiguo 17-10-2011
abelg abelg is offline
Miembro
 
Registrado: jul 2004
Posts: 50
Poder: 20
abelg Va por buen camino
Mira, puedes crearte un procedimiento asi:

Código Delphi [-]
procedure ExecuteQuery(qry:TQuery; Sql : String);
begin
  qry.Close;
  qry.SQL.Clear;
  qry.SQL.Add(Sql);
  qry.Open;
end;

Luego a este lo llamas desde los diferentes lugares asi:

Código Delphi [-]
var Sql : string;
begin
  if CheckBox1.Checked then
    sql := 'Select * from inv_clipro'
  else
    sql := 'Select * from inv_productos';
  ExecuteQuery(Query1, Sql);
end;

solo a manera de ejemplo, espero te ayude.
salu2
Responder Con Cita
  #11  
Antiguo 17-10-2011
Niiña Niiña is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 36
Poder: 0
Niiña Va por buen camino
Gracias a todos.. Deja ver que tal sale..
Responder Con Cita
Respuesta



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
qreport y varios query calco_hugo Varios 3 30-07-2010 15:27:45
en query -- ExcecSQL y Open marareta SQL 4 21-07-2010 03:01:54
Error en Query.Open : Invalid field type (BLOB) natalinuyo Gráficos 4 15-10-2008 20:16:29
Declarar variable y select en la misma llamada a Query.Open Lord Delfos SQL 5 20-02-2008 01:05:19
¿Cómo se puede evitar que se seleccionen varios campos en un CheckListBox? nuri Varios 7 27-07-2005 17:36:11


La franja horaria es GMT +2. Ahora son las 00:41:25.


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