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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-11-2012
angel.sosa angel.sosa is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 22
Poder: 0
angel.sosa Va por buen camino
update del query4 dentro de un while

hola amigos tengo un problema que no tengo idea de que hacer, tengo un cliclo while que se encarga de recorrer los datos desplegados en un DBgrid, el cual utiliza una combinación de datos de varias tablas mediante un IBQuery1. todo eso se despliega mediante un boton "Consultar".
el problema es q tengo un boton modificar que debe recorrir la informacion filtrada y desplegada en el DBgrid.
Pero al intentar Actualizar con otro IBQuery4 al cumplirse la condicion deseada me marca "Token UNkNOWn" Line 2.1

Código Delphi [-]
while not IBQuery1.Eof do
begin
  if((StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) > 50) And (StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) <= 10000) And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> '7') And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> 'TELEMARKETING')) then
   begin
   ShowMessage('Encontre uno Sin Descuento ' + IBQuery1.FieldByName('CLAVE_CTE').AsString);
   IBQuery4.SQL.Add('UPDATE PRECIOS_CLI_CLI');
   IBQuery4.SQL.Add('SET POLITICA_DSCTO_ART_CLI_ID = '+ Char(39)+'48'+Char(39)+' ');
   IBQuery4.SQL.Add('WHERE CLAVE_CLIENTE ='+Char(39)+ IBQuery1.FieldByName('CLAVE_CTE').AsString +Char(39)+ ' ');
   IBQuery4.Open;
   end;
    if((StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) > 40) And (StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) <= 50) And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> '7') And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> 'TELEMARKETING')) then
   begin
   ShowMessage('Encontre un DESCUENTO 4' + IBQuery1.FieldByName('CLAVE_CTE').AsString);
   IBQuery4.SQL.Add('UPDATE PRECIOS_CLI_CLI');
   IBQuery4.SQL.Add('SET POLITICA_DSCTO_ART_CLI_ID = '+ Char(39)+'11246'+Char(39)+' ');
   IBQuery4.SQL.Add('WHERE CLAVE_CLIENTE ='+Char(39)+ IBQuery1.FieldByName('CLAVE_CTE').AsString +Char(39)+ ' ');
   IBQuery4.Open;
   end;
   if((StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) > 30) And (StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) <= 40) And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> '7') And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> 'TELEMARKETING')) then
   begin
   ShowMessage('Encontre un DESCUENTO 3' + IBQuery1.FieldByName('CLAVE_CTE').AsString);
   IBQuery4.SQL.Add('UPDATE PRECIOS_CLI_CLI');
   IBQuery4.SQL.Add('SET POLITICA_DSCTO_ART_CLI_ID = '+ Char(39)+'11245'+Char(39)+' ');
   IBQuery4.SQL.Add('WHERE CLAVE_CLIENTE ='+Char(39)+ IBQuery1.FieldByName('CLAVE_CTE').AsString +Char(39)+ ' ');
   IBQuery4.Open;
   end;

 IBQuery1.Next;
end;
Responder Con Cita
  #2  
Antiguo 27-11-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
DIAS_EN_PAGA,
POLITICA_DSCTO_ART_CLI_ID,
CLAVE_CLIENTE,
CLAVE_CTE

Todos estos campos son Numéricos creo yo, porque lo pasa a Alfanuméricos y sino es así, porque defines campos Alfanuméricos cuanto tenían que ser Numéricos.

Creo que el problema está en SET y WHERE de cada uno de los UPDATE
Código Delphi [-]
IBQuery4.SQL.Add('SET POLITICA_DSCTO_ART_CLI_ID = '+ Char(39)+'48'+Char(39)+' ');

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #3  
Antiguo 27-11-2012
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
Sólo tienes que poner un breakpoint en las sentencias .open y mirar lo que contiene antes de ejecutarlo.
Responder Con Cita
  #4  
Antiguo 27-11-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
También puede poner un ShowMessage(IBQuery4.SQL.Text) antes del .Open haber lo que muestra.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #5  
Antiguo 27-11-2012
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
Cita:
Empezado por olbeup Ver Mensaje
También puede poner un ShowMessage(IBQuery4.SQL.Text) antes del .Open haber lo que muestra.
Hombre, sí, puede hacer eso, que es precisamente lo que se hacía hace 20 ó 30 años, cuando yo empezaba y no teníamos herramientas ni utilidades como las de ahora, en las que no tienes que teclear nada para depurar un programa, como el caso este en el que estamos, ¿para qué sirve el depurador, los puntos de ruptura, la posibilidad de avanzar paso a paso el programa, etc.?, se lo podían ahorrar
Responder Con Cita
  #6  
Antiguo 27-11-2012
angel.sosa angel.sosa is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 22
Poder: 0
angel.sosa Va por buen camino
listo ya esta resuelto

Código Delphi [-]
while not IBQuery1.Eof do
begin
  if((StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) > 50) And (StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) <= 10000) And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> '7') And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> 'TELEMARKETING')) then
   begin
   ShowMessage('Encontre uno Sin Descuento ' + IBQuery1.FieldByName('CLAVE_CTE').AsString);
   IBQuery4.SQL.Add('UPDATE PRECIOS_CLI_CLI');
   IBQuery4.SQL.Add('SET POLITICA_DSCTO_ART_CLI_ID = '+ Char(39)+'48'+Char(39)+' ');
   IBQuery4.SQL.Add('WHERE CLAVE_CLIENTE ='+Char(39)+ IBQuery1.FieldByName('CLAVE_CTE').AsString +Char(39)+ ' ');
   IBQuery4.ExecSQL;
   end;
    if((StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) > 40) And (StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) <= 50) And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> '7') And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> 'TELEMARKETING')) then
   begin
   ShowMessage('Encontre un DESCUENTO 4' + IBQuery1.FieldByName('CLAVE_CTE').AsString);
   IBQuery4.SQL.Add('UPDATE PRECIOS_CLI_CLI');
   IBQuery4.SQL.Add('SET POLITICA_DSCTO_ART_CLI_ID = '+ Char(39)+'11246'+Char(39)+' ');
   IBQuery4.SQL.Add('WHERE CLAVE_CLIENTE ='+Char(39)+ IBQuery1.FieldByName('CLAVE_CTE').AsString +Char(39)+ ' ');
  IBQuery4.ExecSQL;
   end;
   if((StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) > 30) And (StrToInt(IBQuery1.FieldByName('DIAS_EN_PAGAR').AsString) <= 40) And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> '7') And (IBQuery1.FieldByName('POLITICA_ACTUAL').AsString <> 'TELEMARKETING')) then
   begin
   ShowMessage('Encontre un DESCUENTO 3' + IBQuery1.FieldByName('CLAVE_CTE').AsString);
   IBQuery4.SQL.Add('UPDATE PRECIOS_CLI_CLI');
   IBQuery4.SQL.Add('SET POLITICA_DSCTO_ART_CLI_ID = '+ Char(39)+'11245'+Char(39)+' ');
   IBQuery4.SQL.Add('WHERE CLAVE_CLIENTE ='+Char(39)+ IBQuery1.FieldByName('CLAVE_CTE').AsString +Char(39)+ ' ');
   IBQuery4.ExecSQL;
   end;

 IBQuery1.Next;
  IBQuery4.SQL.Clear;
end;

tenia que limpiar el IBQuery4 para cada una de las vueltas. y en vez de usar IBQuery4.Open use IBQuery.ExecSQL.
Responder Con Cita
  #7  
Antiguo 27-11-2012
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Hombre, sí, puede hacer eso, que es precisamente lo que se hacía hace 20 ó 30 años, cuando yo empezaba y no teníamos herramientas ni utilidades como las de ahora, en las que no tienes que teclear nada para depurar un programa, como el caso este en el que estamos, ¿para qué sirve el depurador, los puntos de ruptura, la posibilidad de avanzar paso a paso el programa, etc.?, se lo podían ahorrar
jeje, yo suelo hacerlo aún amigo Casi, normalmente genero las consultas (que normalmente son kilométricas) en tiempo de ejecución y coloco un showMessage() para hacer un "copy & paste" y evaluarla en un manejador de consultas.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 27-11-2012
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
Con el 'breakpoint' puedes también copiar y pegar, y te ahorras de escribir código
Responder Con Cita
  #9  
Antiguo 27-11-2012
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Con el 'breakpoint' puedes también copiar y pegar, y te ahorras de escribir código
Si, claro, pero a veces.... no regresa completo el valor.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #10  
Antiguo 27-11-2012
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
Cita:
Empezado por egostar Ver Mensaje
Si, claro, pero a veces.... no regresa completo el valor.
Eso me pasaba con sqls muuuuy largos, en delphi 5, pero con versiones superiores no me ha pasado nunca.
Responder Con Cita
  #11  
Antiguo 27-11-2012
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Eso me pasaba con sqls muuuuy largos, en delphi 5, pero con versiones superiores no me ha pasado nunca.
Cita:
Empezado por mi mismo
normalmente genero las consultas (que normalmente son kilométricas)
Yo uso D2007 y a veces me pasa, además de que la depuración en mi máquina es terrible y mientras no me la cambien pues seguiré usando el arcaico showMessage(), nada pasa pues, una linea no es nada

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #12  
Antiguo 28-11-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Hombre, sí, puede hacer eso, que es precisamente lo que se hacía hace 20 ó 30 años, cuando yo empezaba y no teníamos herramientas ni utilidades como las de ahora, en las que no tienes que teclear nada para depurar un programa, como el caso este en el que estamos, ¿para qué sirve el depurador, los puntos de ruptura, la posibilidad de avanzar paso a paso el programa, etc.?, se lo podían ahorrar
El depurador, una herramienta muy necesaria en la programación, pero cuando el problema está delante de ti y no lo ves, pues recurres al ShowMessage(), para saber que es lo se esconde, es una manera arcaica de resolver el problema, ¿cual es el problema? o ¿es que nunca has utilizado el ShowMessages() en tús aplicaciones?, pues yo un h...vo, para descubrir donde esta la rata cuando no he podido hacerlo con el depurador y he tenido que recurrir al ShowMessage() con mucho gusto y no retrocedo 30 años.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #13  
Antiguo 28-11-2012
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
Cita:
Empezado por egostar Ver Mensaje
Yo uso D2007 y a veces me pasa, además de que la depuración en mi máquina es terrible y mientras no me la cambien pues seguiré usando el arcaico showMessage(), nada pasa pues, una linea no es nada Saludos
Claro, cada uno tiene sus gustos y necesidades. Lo comentaba por si acaso el forero olbeup desconocía esa característica.


Cita:
Empezado por olbeup Ver Mensaje
El depurador, una herramienta muy necesaria en la programación, pero cuando el problema está delante de ti y no lo ves, pues recurres al ShowMessage(), para saber que es lo se esconde, es una manera arcaica de resolver el problema, ¿cual es el problema? o ¿es que nunca has utilizado el ShowMessages() en tús aplicaciones?, pues yo un h...vo, para descubrir donde esta la rata cuando no he podido hacerlo con el depurador y he tenido que recurrir al ShowMessage() con mucho gusto y no retrocedo 30 años. Un saludo.
Con el depurador lo puedes ver directamente también, y muchos más detalles. Sólo es pulsar F5 en la línea.
No sé con qué tono lo has dicho, supongo que "bueno", aunque parece que estuvieses recriminando algo.
Aunque lo decía por si desconocías esa opción, no tengo ni idea de tus conocimientos, pero no he dicho nada malo, es que es verdad que antes no había depuradores y había que hacerlo de esa manera, todo el programa lleno de showmessages por todos lados para encontrar errores. Desde hace años ya no hace falta, pero a quien le guste... pues que lo haga así.
Responder Con Cita
  #14  
Antiguo 28-11-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Lo he dicho en un tono normal, que yo utilizo el ShowMessage() cuando algo no veo, utilizo mucho el depurador cuando algo no funciona como debería, el F5 es para marcar la línea y cuando la ejecución este en esa línea se pare e ir comprobando con F8

Te decía que utilizo ShowMessage() cuando ya no veo el error y si has pensado que te estaba recriminando pues no era mi intención y si lo has interpretado así pues mil disculpas.

Estamos aquí para comentar, aprender y hacer amigos, no para recriminar, pues resulta muy desagradable.



Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 28-11-2012 a las 12:37:02.
Responder Con Cita
  #15  
Antiguo 28-11-2012
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
Cita:
Empezado por olbeup Ver Mensaje
Estamos aquí para comentar, aprender y hacer amigos
Eso, eso
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
Que es el update 3? Debo descargar el update 3? Nicomaco Varios 4 23-04-2009 00:53:24
deadlock update conflict with concurrent update! JuanErasmo Firebird e Interbase 6 10-07-2008 20:58:10
Update SQL mjjj SQL 10 14-11-2007 22:09:31
UPDATE con seccion llamada UPDATE sql's MyDAC karlaoax SQL 4 25-04-2007 22:10:50
Insert y Update al mismo tiempo dentro de php analondo Firebird e Interbase 3 20-02-2007 20:40:56


La franja horaria es GMT +2. Ahora son las 02:11:03.


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