Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-08-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
operator not applicable to this operand type

buenas tardes,dias y noches a todos...tengo un problemita y no si alguien pudiera ayudarme...
hago un SQL para una consulta en un IBquery pero el primer QuotedSTR(fecini) me marca el siguiente error:

operator not applicable to this operand type

este Query lo tengo en el modulo datos, y lo ajusto de acuerdo a la consulta del usuario, para sacar un rango de fechas
de abonos de XX cobrador... La sentencia SQL es la siguiente :

Código Delphi [-]
       modulodatos.QryRepXCobYRango.SQL.Text:='Select * From Abonos '+
       +'where (fecha_cap>='+Quotedstr(fecini)+') and (fecha_cap<='+
       QuotedStr(fecfin)+') and (cod_cobrador='+QuotedStr(codcobstr)+
       ') order by fecha_cap';

le ha pasado esto a alguien, gracias por su tiempo y ayuda, y que mi Dios me los bendiga
Responder Con Cita
  #2  
Antiguo 12-08-2015
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Buenas tardes.

Porque no usas parametros para pasar los datos a la consulta?

Código SQL [-]
modulodatos.QryRepXCobYRango.SQL.Text:='Select * From Abonos where fecha_cap>= :FECHA_INI and fecha_cap<= :FECHA_FIN and cod_cobrador= :COD_COBRADOR order by fecha_cap';

Saludos
Responder Con Cita
  #3  
Antiguo 12-08-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
Lo he intentado pero se me hace mas dificil especialmente a la hora de manejar las variables de fecha...ya lo intente...ademas, en la consulta tengo tres opciones:
1.-un Cobrador
2.-Todos los cobradores
3.-Solo rango de fechas
por lo que la sentencia SQL debo cambiarla....me explico... como lo harias tu con los parametros especialmente con las fechas..gracias por tu tiempo JAFERA

Última edición por alexglez1255 fecha: 12-08-2015 a las 18:00:55.
Responder Con Cita
  #4  
Antiguo 12-08-2015
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Un ejemplo que uso yo (adaptalo a tus necesidades)

Código SQL [-]
SELECT DISTINCT ID_MECANIC, SUM(HORES) AS HORES, SUM(HORES_B) AS HORES_B, SUM(HORES_E) AS HORES_E,SUM(FIX) AS FIX FROM H0003
WHERE DATA >= ESDEDATAI
AND DATA <= :FINSDATAF
AND ID_MECANIC= :ID_MECANIC
AND PAGAT = 'N'
GROUP BY ID_MECANIC

Como lo modifico desde Delphi:

Código Delphi [-]
SQLL_Paga.Close;
SQLL_Paga.ParamByName('DESDEDATAI').AsString := DateToStr(JvDateEdit1.Date);
SQLL_Paga.ParamByName('FINSDATAF').AsString := DateToStr(JvDateEdit2.Date);
SQLL_Paga.ParamByName('ID_MECANIC').AsInteger := F_ModulDades.ActualitzaPID_Mecanic.Value;
SQLL_Paga.Open;

A ver si te sirve

Saludos
Responder Con Cita
  #5  
Antiguo 13-08-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
Gracias JAFERA voy a intentar hacerlo asi, ... luego te digo como m fue..una pregunta los parametros de fechas inicio y final los defines como ftdate...? o como string.?

Última edición por alexglez1255 fecha: 13-08-2015 a las 01:35:55.
Responder Con Cita
  #6  
Antiguo 13-08-2015
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Las fechas en los motores de datos son una lata, si lo pasas como string, intentará cotejarlo con la forma "yyyy-mm-dd", si no casa, pues normalmente lo intenta con el formato "mm-dd-yyyy" y si tampoco casa, normalmente da error. Si el formato lo pasas con formato "dd.mm.yyyy" (al usar puntos como separadores, lo interpreta como fecha española).

Pero lo más normal para dejarse de rollos es:
- BBDD en dialecto 3
- campo en formato date o timestamp
- Los sqls los hace como ha dicho salvo un detalle, las fechas que sean TDate o TDatetime y usando:
Código Delphi [-]
SQLL_Paga.Close;
SQLL_Paga.ParamByName('DESDEDATAI').AsDate := Trunc( DateTimePicker1.DateTime ); // trunc quita la parte horaria de una fecha
SQLL_Paga.ParamByName('FINSDATAF').AsDate := Trunc( DateTimePicker2.DateTime );
SQLL_Paga.ParamByName('ID_MECANIC').AsInteger := F_ModulDades.ActualitzaPID_Mecanic.Value;
SQLL_Paga.Open;

De esa forma es Delphi quien "se pelea con el motor de bases de datos" y le pasa la fecha en el formato correcto, sin tú saber cual es, ni tener que pelearte tú.

Ten mucho cuidado al usar DateToStr y StrTodate, porque lo codificará en el formato que delphi se le ocurra, (en realidad se basa en los formatos que tengas definidos en SysUtils y en la configuración regional de windows), para dejarte de rollos, usa FormatDatetime ('dd/mm/yyyy hh:nn', CampoFechaHora.AsDateTime).


Recuerda que en Delphi un TDateTime es un float donde la parte entera son los días transcurridos desde el día cero (30/12/1899) y la parte decimal es la hora, minutos, segundos y milisegundos.

También aconsejo usar esta otra variante en los sql:
Código SQL [-]
WHERE (DATA between :ESDEDATAI AND :FINSDATAF)
porque a la larga es más legible, aunque si quieres quitar la igualdad de fechas, acabas haciéndolo como antes con el ">" y el "<".


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 13-08-2015 a las 17:48:37.
Responder Con Cita
  #7  
Antiguo 13-08-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
muchas gracias LEPE tus sugerencias me seran de mucha ayuda....sinceramente gracias
Responder Con Cita
  #8  
Antiguo 13-08-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
cuando paso lo parametros como me lo suguieres...

Código Delphi [-]
procedure TFrmRepdeCobr.BtHacereporteClick(Sender: TObject);
 var
  fecfin,fecini:TDateTime;
  codcobstr:String;
begin
 With logicanegocio do
  begin
   codcobstr:=IntToStr(Coddecobr);
     CDSREpxCobYrango.Close;
      case Tpickrepcobr.ItemIndex of
      0:begin
        If Coddecobr=0 then
          begin
            ShowMessage('No ha escogido el cobrador ');
            EdCodCobr.SetFocus;
          end;
         CDSREpxCobYrango.Params.ParamByName('Fdesde').value:=trunc(TPFechini.Datetime);
         CDSREpxCobYrango.Params.ParamByName('Fhasta').value:=trunc(TPFechfinal.Datetime);
         CDSREpxCobYrango.Params.ParamByName('Cod_cobrador').value:=Coddecobr;
         end;
    end;
    CDSREpxCobYrango.open; //MARCA EL ERROR AL ABRIR EL CLIENDATASET
    CDSREpxCobYrango.DisableControls;
  end;
end;

TPFechini y TPFechfinal son de pickdates...
En la linea que indico da el siguiente error..

Invalid variant type conversion

tienes alguna idea por que..?
Responder Con Cita
  #9  
Antiguo 14-08-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola alexglez1255
Cita:
Empezado por alexglez1255 Ver Mensaje
...
TPFechini y TPFechfinal son de pickdates...
En la linea que indico da el siguiente error..

Invalid variant type conversion

tienes alguna idea por que..?
Intenta de este modo:
Código Delphi [-]
...
var
  cds: TClientDataSet;
begin
  // (La línea siguiente es configurable desde el Object Inspector)
  DataSetProvider1.Options := DataSetProvider1.Options + [poAllowCommandText]; 

  cds := CDSREpxCobYrango;
  cds.Close;
  cds.CommandText:= 'SELECT * FROM ABONOS WHERE COD_COBRADOR = :CODCOB' + ' ' +
     'FECHA >= :FDESDE AND FECHA <= :FHASTA';
  cds.Params.ParamByName('CODCOB').Value := Coddecobr;
  cds.Params.ParamByName('FDESDE').Value := DateToStr(DateTimePickerDesde.Date);
  cds.Params.ParamByName('FHASTA').Value := DateToStr(DateTimePickerHasta.Date);
  cds.Open;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 14-08-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
gracias ecfisa lo intentare
Responder Con Cita
  #11  
Antiguo 17-08-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
operator not applicable to this operand type

disculpen que vuelva a tocar el tema pero no logro encontrar por que me da este error, ya formatie la compu..instale una version delhi mas nueva (tenia la 6 enterprise y puse la 7), y no se por que me da este error al alguien le ha aparecido..? trate de usar otras alternativas que me sugirieron pero esta se me hace la mas practica por que no necesito pasar parameters...y se usa como una consulta libre...

hago un SQL para una consulta en un IBquery pero el primer QuotedSTR(fecini) me marca el siguiente error:

operator not applicable to this operand type

este Query lo tengo en el modulo datos, y lo ajusto de acuerdo a la consulta del usuario, para sacar un rango de fechas
de abonos de XX cobrador... La sentencia SQL es la siguiente :

Código Delphi [-]
       modulodatos.QryRepXCobYRango.SQL.Text:='Select * From Abonos '+
       +'where (fecha_cap>='+Quotedstr(fecini)+') and (fecha_cap<='+
       QuotedStr(fecfin)+') and (cod_cobrador='+QuotedStr(codcobstr)+
       ') order by fecha_cap';

gracias y que mi Dios los bendiga por su ayuda...
Responder Con Cita
  #12  
Antiguo 17-08-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
No es necesario tomar medidas tan drasticas como formatear, reinstalar delphi, es un error de compilacion nada mas

Segundo, porque no usar parametros? En realidad deberias tratar de usar siempre parametros, ya las ventajas las enumeramos miles de veces por el foro

Y por ultimo de que tipo es la variable "fecini"?

Tenes que tener en cuenta que QuotedStr recibe como parametro un string. Es decir, esto no te va a compilar:

Código Delphi [-]
var
  i: Integer;
begin
  ShowMessage(QuotedStr(i));
end;
Responder Con Cita
  #13  
Antiguo 17-08-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
este es el proceso tratando de usar parameters, no me da error me pero no me arroja ningun resultado la consulta
los parameters FDESDE y FHASTA son de tipo fecha y el cod_cobrador es entero...


Código Delphi [-]
procedure TFrmRepdeCobr.BtHacereporteClick(Sender: TObject);
 var
  fecfin,fecini:TDate;
  codcobstr:String;
begin
 With logicanegocio do
  begin
  CDSREpxCobYrango.Close;

    fecini:=strtodate(formatdatetime('mm/dd/yy',TPFechini.Date));
    Fecfin:=strtodate(FormatDateTime('mm/dd/yy',TPFechfinal.Date));
   codcobstr:=IntToStr(Coddecobr);
   ShowMessage('datos a buscar en inicial:'+DateToStr(fecini)+' final:'+datetostr(fecfin)+' cobrador :'+IntToStr(Coddecobr));
      case Tpickrepcobr.ItemIndex of
      0:begin

        If Coddecobr=0 then
          begin
            ShowMessage('No ha escogido el cobrador ');
            EdCodCobr.SetFocus;
          end;
        CDSREpxCobYrango.Params.ParamByName('Cod_cobrador').Value := Coddecobr;
        CDSREpxCobYrango.Params.ParamByName('FDESDE').Value := fecini;
        CDSREpxCobYrango.Params.ParamByName('FHASTA').Value := fecfin;
        CDSREpxCobYrango.Open;

//         modulodatos.TAbonConsultar.SelectSQL.Text:='Select * From Abonos '+
//        +'where (fecha_cap>='+QuotedStr(fecini)+') and (fecha_cap<='+QuotedStr(fecfin)+') and (cod_cobrador='+QuotedStr(codcobstr)+
//       ') order by fecha_cap';
//      modulodatos.TAbonConsultar.ExecSQL;
//      CDSAbonoConsulta.open;
         end;

    end;
  end;
end;
Responder Con Cita
  #14  
Antiguo 17-08-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
No mandes los parametros como string; manda directamente las fechas y "que se las arregle" el motor sql. Eso es justamente lo bueno de los parametros, seteas el valor y a cobrar
Responder Con Cita
  #15  
Antiguo 17-08-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
si ves AGUSTINORTU es lo que hago extraigo la fecha (un string) y la convierto a date (strtodate) y asigno directamente las fechas
a los parametros pero no me sale nada...algo no estoy haciendo bien...gracias de antemano
Responder Con Cita
  #16  
Antiguo 17-08-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola alexglez1255.

Por favor no abras otro hilo con la misma consulta, de ese modo evitamos los resultados redundantes en las búsquedas.
Si lo que buscas es destacar nuevamente la consulta, basta con que agregues un nuevo mensaje al final del hilo inicial y este pasa automáticamente a encabezar la lista de nuevos mensajes.

Combiné ambos mensajes, con idéntico título y mismo contenido, en el primero.

Saludos y gracias por tu colaboración
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #17  
Antiguo 19-08-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
quiero agradecer sinceramente a TODOS especialmente a mi Dios JEHOVA...pero tambien a todos ustedes...ecfisa, AgustinOrtu,Lepe, jafera, por todas sus aportaciones y ideas y con gran gusto les dire que ya logramos hacerlo funcionar y la sugerencia que al final logro hacerlo fue la de ECFISA...

Código Delphi [-]
var
  cds: TClientDataSet;
begin
  // (La línea siguiente es configurable desde el Object Inspector)
  DataSetProvider1.Options := DataSetProvider1.Options + [poAllowCommandText]; 

  cds := CDSREpxCobYrango;
  cds.Close;
  cds.CommandText:= 'SELECT * FROM ABONOS WHERE COD_COBRADOR = :CODCOB' + ' ' +
     'FECHA >= :FDESDE AND FECHA <= :FHASTA';
  cds.Params.ParamByName('CODCOB').Value := Coddecobr;
  cds.Params.ParamByName('FDESDE').Value := DateToStr(DateTimePickerDesde.Date);
  cds.Params.ParamByName('FHASTA').Value := DateToStr(DateTimePickerHasta.Date);
  cds.Open;
end;
ME HACE LA CONSULTA DE LAS FECHAS...Y NO ME DA NINGUN ERROR...PERO SI FUE UN DOLOR DE CABEZA..GRACIAS A TODOS ESPCIALMENTE A MI CREADOR JEHOVA...
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
[Error] Missing operator or semicolon delphi wolfran_hack Varios 12 02-05-2013 15:23:28
Operacion Not applicable Yun-i Varios 5 25-04-2012 22:58:05
Operation Not Applicable koalko84 Conexión con bases de datos 2 29-03-2011 17:45:14
Could not convert variant of type (Null) into type (Integer) Alejo15x Varios 2 30-11-2010 17:35:50
Mensaje Operation no applicable zugazua2001 Varios 5 05-04-2006 10:01:30


La franja horaria es GMT +2. Ahora son las 14:35:51.


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