Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   como evitar varios Query.open..? (https://www.clubdelphi.com/foros/showthread.php?t=76221)

Niiña 17-10-2011 17:00:18

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.

oscarac 17-10-2011 17:04:52

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?

Niiña 17-10-2011 17:09:59

no se me paso.! xD

Lo que quiero es no repetir varias veces el mismo código para obtener consultas distintas..!

oscarac 17-10-2011 17:18:20

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

Niiña 17-10-2011 17:52:46

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

oscarac 17-10-2011 18:02:23

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 := .....

fjcg02 17-10-2011 19:03:30

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

Casimiro Notevi 17-10-2011 19:44:42

Amigo, ni que fueses novato ;)
¡¡¡Las etiquetas del código!!! :rolleyes:

oscarac 17-10-2011 20:03:24

al mejor cazador se le va la presa:eek::eek:

abelg 17-10-2011 20:15:10

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

Niiña 17-10-2011 20:35:03

Gracias a todos.. Deja ver que tal sale..


La franja horaria es GMT +2. Ahora son las 17:37:56.

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