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 14-11-2007
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Update SQL

Hola amigos... estoy teniendo un problemita con el componente TIBDataset

necesito actualizar un registro... para ello quiero utilizar la propiedad modify del componente.

estoy utilizando el siguiente codigo...

Código Delphi [-]
IBdataset1.Close;
IBdataset1.modifySQL.CLEAR;
IBdataset1.modifySQL.ADD('update PRESUPUESTO');
IBdataset1.modifySQL.ADD('set monto='+quotedstr(form2.sedit1.Text));
IBdataset1.modifySQL.ADD('WHERE EMPRESA ='+QUOTEDSTR(EMPRESA));
IBdataset1.modifySQL.ADD('AND PERIODO between :FECHA1 AND :FECHA2'); IBdataset1.ParamByName('fecha1').asdatetime :=encodedate(calendar1.year, calendar1.month, 1);
IBdataset1.ParamByName('fecha2').asdatetime :=encodedate(calendar1.Year, calendar1.Month,DaysInAMonth(calendar1.year, calendar1.month));
ibdataset1.open;
ibdataset1.Edit;
ibdataset1.UpdateRecord;

.. me tira un error de que no existe el el campo 'fecha1'.. obviamente este no existe en la table... anteriormete ocupaba este mismo codigo con un TIBQuery y me funcionaba perfecto...

que podra ser... alguna idea

saludos
Responder Con Cita
  #2  
Antiguo 14-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me puedo equivocar, lo que ultimamente no seria de extrañar, pero bueno, que tal asi:
Código Delphi [-]
IBdataset1.Close;
IBdataset1.modifySQL.CLEAR;
IBdataset1.modifySQL.Text:= 'update PRESUPUESTO set monto='+quotedstr(form2.sedit1.Text)+
                           'WHERE EMPRESA ='+QUOTEDSTR(EMPRESA)+
                           'AND PERIODO between :FECHA1 AND :FECHA2';
 IBdataset1.ParamByName('FECHA1').asdatetime :=encodedate(calendar1.year, calendar1.month, 1);
IBdataset1.ParamByName('FECHA2').asdatetime :=encodedate(calendar1.Year, calendar1.Month,DaysInAMonth(calendar1.year, calendar1.month));
ibdataset1.ExecSQL;
Saludos
Responder Con Cita
  #3  
Antiguo 14-11-2007
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
mmm.... me sigue tirando el mismo error.... 'field "fecha1" not found'

se pueden usar parametros con el dataset...
el campo fecha1 no existe en la tabla... lo ocupo para darle los valores que pueden tener el campo periodo.. entre fecha1 y fecha2...

se puede ocupar esto....

Explico mejor en que consiste mi problema....

tengo que actualizar un registro en el campo 'MONTO'. el valor periodo puede tener cualquier valor entre el 1 y el ultmo dia de algun mes. EJ (1-11-2007 hasta 30-11-2007)... el valor del registro puede ser cualquier entre estos valores.

es por eso que al buscar el registro necesito hacer una busqueda entre dos valores.... fecha1 y fecha2.

alguna idea para resolver el problemita....
Responder Con Cita
  #4  
Antiguo 14-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me parece que entiendo mejor
No tienes nungun valor de fecha en la tabla, lo que intentas es que actualice pero en un rango de fechas adjuntadas o sacadas de otro lado.
Si es asi, mi pregunta es:
Por que usas el parametro como si fuera un campo de la tabla.?
Por supuesto que te dice que no existe el campo, no lo encuentra.
Si estoy en lo cierto me dices y te muestro como hacerlo con gusto.
Saludos
Responder Con Cita
  #5  
Antiguo 14-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
A ver asi:
Código Delphi [-]
IBdataset1.Close;
IBdataset1.modifySQL.CLEAR;
IBdataset1.modifySQL.Text:= 'update PRESUPUESTO set monto='+quotedstr(form2.sedit1.Text)+
                           'WHERE EMPRESA ='+QUOTEDSTR(EMPRESA)+
                           'AND PERIODO >=' +encodedate(calendar1.year, calendar1.month, 1)+ 
                           'AND PERIODO <=' +encodedate(calendar1.Year, calendar1.Month,DaysInAMonth(calendar1.year, calendar1.month)); 
ibdataset1.ExecSQL;
Bueno, es una idea mas.
Saludos
Responder Con Cita
  #6  
Antiguo 14-11-2007
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
mi tabla tiene los siguientes campos: empresa, monto, periodo, etc...

necesito actualizar el campo 'monto', por un valor que ingreso en un TEdit.

busco el registro que quiero actualizar segun los campos 'empresa y periodo'
el registro del campo empresa es fijo (empresa1 o empresa2), no asi el registro del campo periodo que puede es cualquier fecha entre el primer y ultimo dia en algun mes. Por eso cuando busco segun el campo periodo tengo que hacerlo con respecto a los fechas, el primer y ultimo dia de algun mes.

ojala me entiendas

saludos
Responder Con Cita
  #7  
Antiguo 14-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Sigamos con esto para que quede mejor, a mi entender.
Coloca en el form dos DateTimePicker (para mi es el componente que mejor se ajusta aqui).
Modifiquemos el codigo asi:
Código Delphi [-]
IBdataset1.Close;
IBdataset1.modifySQL.Text:= 'update PRESUPUESTO set monto='+quotedstr(form2.sedit1.Text)+
                           'WHERE EMPRESA ='+QUOTEDSTR(EMPRESA)+
                           'AND PERIODO >=' +DateToStr(DatetimePicker1.Date)+ 
                           'AND PERIODO <=' +DateToStr(DatetimePicker2.Date); 
ibdataset1.ExecSQL;
Estoy entendiendo que el campo PERIODO es de tipo Date, Verdad?
Saludos
Responder Con Cita
  #8  
Antiguo 14-11-2007
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
HOLA
justamente el campo periodo es de tipo DATE.

utilixe el codigo que me recomendaste, pero me tira el siguiente error
'use Open for a Select Statement'

que es lo que hace exactamente la sentencia --> ibdataset1.ExecSQL

Saludos
Responder Con Cita
  #9  
Antiguo 14-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Lo que hace (ExecSQL) es ejecutar la sentencia sql, se usa nada mas para ejecutarla en el caso de que no se necesiten ver los resultados.
No se si IB te este dando ese problema, puede ser que no la reconozca, cámbiala por open a ver que pasa.
en vez de (ibdataset1.ExecSQL) usas (ibdataset1.Open).
Ya comentaras.
Saludos
Responder Con Cita
  #10  
Antiguo 14-11-2007
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
hola... cambie (ibdataset1.ExecSQL) por (ibdataset1.Open), pero me ejecuta lo que esta en el el Select SQL...

el comando ibdataset1.execSQl cual sentencia SQL me ejecuta... todas??

como hago para que me ejecute lo que tengo escrito en modifySQL o en insertSQL... se pueden ejecutar cada una por separado....

no se que hacer.... ayuda porfa

saludos
Responder Con Cita
  #11  
Antiguo 14-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Vamos por partes:
La sentencia sql que se ejecuta siempre sera la que este ligada al procedimiento, ninguna otra (cual podria ser?).
Usas estos parametros al final de tu sentencia (estaban en tu primera intervención):
Código Delphi [-]
ibdataset1.open;
ibdataset1.Edit;
ibdataset1.UpdateRecord;
Lo que pense es que eran innecesarios en un update y por eso puse esta (que lo que hace es solamente ejecutar la sentencia sql, sin mostrar los resultados):
Código Delphi [-]
ibdataset1.ExecSQL;
Para mi puedes usar los parametros que tenias (los primeros):
Código Delphi [-]
bdataset1.open;
ibdataset1.Edit;
ibdataset1.UpdateRecord;
Veremos que pasa.
Saludos
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
RTL update 3 santiago14 Varios 1 30-06-2007 10:49:32
UPDATE con seccion llamada UPDATE sql's MyDAC karlaoax SQL 4 25-04-2007 22:10:50
SQL Update Gustavo Gowdak SQL 1 29-06-2006 23:11:07
Update con sql miguelb SQL 8 25-07-2003 16:30:30


La franja horaria es GMT +2. Ahora son las 18:29:42.


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