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 23-01-2007
Avatar de zcatzz
zcatzz zcatzz is offline
Miembro
 
Registrado: dic 2006
Posts: 48
Poder: 0
zcatzz Va por buen camino
Porque me marca error en mis querys si utilizo el mismo para diferentes consultas

Hola como estan todos.. Una pregunta estoy utilizando Delphi 5, informix y adoconexion, y adoqurerys y todo lo ado jeje.. en este foro queiro hacer 2 preguntas

1.- Por que si utlizo por ejemplo:
Código Delphi [-]
            DataModulo.QBuscar.Active:=false;
             DataModulo.QBuscar.SQL.Clear;
             DataModulo.QBuscar.SQL.Text:='select * from ciclo    
             where   ciclo=:cic';
                        DataModulo.QBuscar.Parameters.ParamByName('cic').Value:=ciclob;
            DataModulo.QBuscar.Active:=true;
            DataModulo.QBuscar.ExecSQL;

y despues quiero usar el mismo query en otra busqueda:

            DataModulo.QBuscar.Active:=false;
             DataModulo.QBuscar.SQL.Clear;
             DataModulo.QBuscar.SQL.Text:='select * from periodo    
             where   periodo=er';
                DataModulo.QBuscar.Parameters.ParamByName('per').Value:=perio.text;
            DataModulo.QBuscar.Active:=true;
            DataModulo.QBuscar.ExecSQL;

Y si tengo varios querys en el programa haciendo diferentes instrucciones de sql en algun momento del programa cuando estoy ejecutandolo y ulizando las difentes formas me marca un error en el query diceindome que no encontro un parametro o una instruccion que anteriormente se utlio en otra busqueda...

porque me sucede esto si incializo,si desactivo el query lo limpio antes cada vez de usarlo.

2.-
por esta situacion que si por favor me pueden ayudar a liberar .. para hacer el programa estuve haciendo muchos querys con difernetes nombres,, ya saben qbuscar,qbuscar2.....qbuscar55..
he hecho un monto de querys y ahora el problema es que ahorita que ya lo estan trabajando en tiempo real con conexiones en una parte donde su velocidad de ancho de banda no es muy libre.. el programa es lentisimo

para abrir cada forma tardan como un minuto.. la verdad no se si es por lo que les digo.. o si se los ocurre alguna otra cosa por lo que el programa es lento ahii.. ya que si lo corren po ejemplo en un edificio donde esta el duenio el programa esta bien pero si nada mas se van a los edificios donde van a estar haciendo uso del prpgrama se alenta..

que se les ocurre?

Última edición por marcoszorrilla fecha: 23-01-2007 a las 23:20:31.
Responder Con Cita
  #2  
Antiguo 23-01-2007
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Hola,

Código Delphi [-]
DataModulo.QBuscar.Active:=false;
DataModulo.QBuscar.SQL.Clear;
DataModulo.QBuscar.SQL.Text:='select * from periodo 
where periodo=er';
DataModulo.QBuscar.Parameters.ParamByName('per').Value:=perio.text;
DataModulo.QBuscar.Active:=true;
DataModulo.QBuscar.ExecSQL;

Aquí hay un problema, y es que usas el Active := True y luego el ExecSQL. Eso se ha tratado muchas veces en este foro y es un error muy común. Usar la propiedad Active o llamar al método Open, sólo debe usarse (como en este caso) en las SELECT; para todo lo demás (INSERT, UPDATE, DELETE, CREATE, .etc) debes usar el ExecSQL, pero nunca los dos juntos, de lo contrario siempre te dará problemas.
El otro punto que veo, que puede dar problemas es que no limpias los parámetros entre una consulta y otra.

Código Delphi [-]
DataModulo.QBuscar.Active:=false;
DataModulo.QBuscar.SQL.Clear;
DataModulo.QBuscar.SQL.Text:='select * from ciclo 
where ciclo=:cic';
DataModulo.QBuscar.Parameters.Clear;
DataModulo.QBuscar.Parameters.ParamByName('cic').Value:=ciclob;
DataModulo.QBuscar.Active:=true;
//DataModulo.QBuscar.ExecSQL;
DataModulo.QBuscar.Active:=false;
DataModulo.QBuscar.SQL.Clear;
DataModulo.QBuscar.SQL.Text:='select * from periodo 
where periodo=er';
DataModulo.QBuscar.Parameters.Clear;
DataModulo.QBuscar.Parameters.ParamByName('per').Value:=perio.text;
DataModulo.QBuscar.Active:=true;
//DataModulo.QBuscar.ExecSQL;

Respecto a tú segundo problema, el de la lentitud, comentas que los forms tardan un minuto en arrancar, sería bueno que pusieras el código de los eventos de llamada a esos forms, así como los eventos Create, Activate y/o show para ver porque tarda.

Saludos
Responder Con Cita
  #3  
Antiguo 23-01-2007
Avatar de zcatzz
zcatzz zcatzz is offline
Miembro
 
Registrado: dic 2006
Posts: 48
Poder: 0
zcatzz Va por buen camino
Revisando... Sigue lento

Muchas Gracias Bicho voy a revisar como me dijiste para borrar todos los querys que tengo y hacer pruebas con esos 2 cambios que me dijste y al rato te dij si ya con eso me funciono..

Con respecto a la forma como tengo organizado el programa..
Tengo la forma de validacion de usuario de contrasena, la forma principal, el datamodulo y las demas formas... la forma que ahortia tiene que usar y que te digo que cuando ya quieren trabajar con el programa estan utilizando mas es esta:

este es su evento formactivate
Código Delphi [-]
procedure TFidio121.FormActivate(Sender: TObject);
var ciclob,tam:string;
begin
 DModulo.TAlumnos.Active:=true;
DModulo.TAlumnosCurso.Active:=true;
DModulo.TMaterias.Active:=true;
DModulo.THorario.Active:=true;
DBMatricula.Text:='';
 DBAPaterno.Text:='';
 DBAMaterno.Text:='';
 DBNombre.Text:='';
 DBFechaNac.Text:='';
 DBSexo.Text:='';
 DBEstadoCivil.Text:='';
 DBCategoria.Text:='';
 DBEmail.Text:='';
 DBTelefono.Text:='';
 DBEstudios.Text:='';
 //DBFicha.Text:='';
 //DBCurso.Text:='';
// DBHorario.Text:='';
 //DBPeriodo.Text:='';

    DModulo.QBuscar40.Active:=false;
     DModulo.QBuscar40.SQL.Clear;
    DModulo.QBuscar40.SQL.Text:='SELECT * from periodos where vigencia=:vig';
     DModulo.QBuscar40.Parameters.ParamByName('vig').Value:=1;

    DModulo.QBuscar40.Active:=true;
    DModulo.QBuscar40.ExecSQL;
    DBPeriodo.DataSource:=DModulo.DSBuscar40;
    DBIdperiodo.DataSource:=DModulo.DSBuscar40;

     ciclob:=separaciclo(DBPeriodo.text);

             //busca descripcion
             DModulo.QBuscar41.Active:=false;
             DModulo.QBuscar41.SQL.Clear;
             DModulo.QBuscar41.SQL.Text:='select * from ciclo where ciclo=:cic';
             DModulo.QBuscar41.Parameters.ParamByName('cic').Value:=ciclob;
            DModulo.QBuscar41.Active:=true;
            DModulo.QBuscar41.ExecSQL;
            DBDEs.DataSource:=DModulo.dsbuscar41;

            tam:= separaperiodo(DBPeriodo.text);
            DES_Periodo.text:=DBDES.text + ' ' + tam;



end;

y este el evento close

procedure TFidio121.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DModulo.TAlumnos.Active:=false;
DModulo.TAlumnosCurso.Active:=false;
DModulo.TMaterias.Active:=false;
DModulo.THorario.Active:=false;
end;
como les comente arriba trabaja muy lento en el lugar donde lo van a utilizar pero en el lugar donde se hace pruebas esta mas agil.

Última edición por marcoszorrilla fecha: 23-01-2007 a las 23:19:26.
Responder Con Cita
  #4  
Antiguo 23-01-2007
Avatar de zcatzz
zcatzz zcatzz is offline
Miembro
 
Registrado: dic 2006
Posts: 48
Poder: 0
zcatzz Va por buen camino
Unhappy no se pudo

bicho hice lo que me dijiste lo puse asi:
Código Delphi [-]
DataModulo.QBuscar.Active:=false;
DataModulo.QBuscar.SQL.Clear;
DataModulo.QBuscar.SQL.Text:='select * from ciclo 
where ciclo=:cic';
DataModulo.QBuscar.Parameters.Clear;
DataModulo.QBuscar.Parameters.ParamByName('cic').Value:=ciclob;
DataModulo.QBuscar.Active:=true;
//DataModulo.QBuscar.ExecSQL;


pero al momento de correrlo me marca un error de que el paramerto cic no existe
entonces lo cambie de lugar lo pase arriba de qbuscar.sql.text:='...';
y me vuelve a decir el error de que no encuentra un parametro de otro qbuscar que use anteriormente.. que estoy haciendo mal..
necesito usar menos querys para que mi programa no se cargue tanto.. o que otra cosa puede afectar diganme please

Última edición por marcoszorrilla fecha: 23-01-2007 a las 23:19:51.
Responder Con Cita
  #5  
Antiguo 23-01-2007
aledieb aledieb is offline
Miembro
 
Registrado: jun 2005
Ubicación: Buenos Aires, Argentina
Posts: 141
Poder: 19
aledieb Va por buen camino
Hola, proba así:

Código Delphi [-]
DataModulo.QBuscar.Active:=false;
DataModulo.QBuscar.SQL.Clear;
DataModulo.QBuscar.Parameters.Clear;
DataModulo.QBuscar.SQL.Text:='select * from ciclo where ciclo=:cic';
DataModulo.QBuscar.Parameters.ParamByName('cic').Value:=ciclob;
DataModulo.QBuscar.Active:=true;
//DataModulo.QBuscar.ExecSQL;
__________________
Suerte
Alejandro
Responder Con Cita
  #6  
Antiguo 23-01-2007
Avatar de zcatzz
zcatzz zcatzz is offline
Miembro
 
Registrado: dic 2006
Posts: 48
Poder: 0
zcatzz Va por buen camino
tambien me marca error

Hola Alejandro , mira tambien ya le hice asi como me dices y es cuando me marca error sobre unos parametros de otros querys .

Es decir estoy vuelta loca ya que si lo pongo arriba de
Código SQL [-]
DataModulo.QBuscar.SQL.Text:='select * from ciclo where ciclo=:cic';

no me lo limpia por que me dice errores de otros parametros que estuve usando en otras sentencias y si lo pongo inmediatamente abajo de la linea me dice que no encuentra el parametro por ejemplo en este caso: el paramtro cic.. osea que onda?
quiere decir que si lo limpio se borra y ahora tengo que crear el parametro.. pero que no precisamente lo estoy creando?
Responder Con Cita
  #7  
Antiguo 24-01-2007
aledieb aledieb is offline
Miembro
 
Registrado: jun 2005
Ubicación: Buenos Aires, Argentina
Posts: 141
Poder: 19
aledieb Va por buen camino
Es raro, yo utilizo el mismo sistema en algunos procedimientos con la diferencia que utilizo close y open

Código Delphi [-]
DataModulo.QBuscar.close;
DataModulo.QBuscar.SQL.Clear;
DataModulo.QBuscar.SQL.Add('select * from ciclo where ciclo=:cic');
DataModulo.QBuscar.Parameters.ParamByName('cic').asinteger:=ciclob;
DataModulo.QBuscar.open;

Fijate con esta forma tal ves el problema sea en el sql.text, yo lo utilizo de esta manera.
A y le digo que tipo de parametro le paso con asTIPODATO

Espero que te sirva
__________________
Suerte
Alejandro
Responder Con Cita
  #8  
Antiguo 27-01-2007
FOURIER FOURIER is offline
Miembro
 
Registrado: dic 2005
Posts: 40
Poder: 0
FOURIER Va por buen camino
Yo te recomiendo que Uses Open para Select y ExecSQL para Delete,insert y update en el caso de que ocupes ADO sería algo más o menos así

Código SQL [-]
 
DataModulo.QBuscar.SQL.Text:='select * from ciclo where ciclo=:cic';
DataModulo.QBuscar.Parameters.ParamValues['cic'].Value:=ciclob;
DataModulo.QBuscar.Open;

En caso de BDE
Código SQL [-]
DataModulo.QBuscar.SQL.Text:='select * from ciclo where ciclo=:cic';
DataModulo.QBuscar.Params.ParamValues['cic'].Value:=ciclob;
DataModulo.QBuscar.Open;

Espero que te sirva
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
Problema al enlazar un dbgrid con dos querys diferentes MiGuEJeReZ Varios 7 20-06-2006 10:56:22
2 o más querys en el mismo QUICKREPORT oscarsanta Impresión 4 27-04-2006 14:23:46
Querys entre 2 BBDD diferentes CHiCoLiTa Conexión con bases de datos 9 16-11-2005 14:30:15
Abrir a la vez el mismo form con diferentes datos Sayuri Varios 7 12-08-2005 17:28:41
consultas con muchos querys gabynuñez Conexión con bases de datos 0 10-06-2005 17:59:02


La franja horaria es GMT +2. Ahora son las 19:23:29.


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