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 10-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por WHILENOTEOF Ver Mensaje
El poner Código Delphi [-]for cont := 1 to Query6.RecordCount do
o poner Código Delphi [-]for cont := 0 to Query6.RecordCount -1 do

, no te va a cambiar nada ya que la variable cont no la estás utilizando para nada.
Precisamente, aparte de todos los problemas que ya se han comentado por los compañeros que han respondido, ese bucle está claramente mal y es inservible.
Si hay 5 registros, el (0,1,2,3,4), al hacer ese bucle se están tratando los datos del 1 al 4, y el 0 (cero) se pierde y el 5 no leerá nada tampoco, pues no existe.
Responder Con Cita
  #2  
Antiguo 10-03-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Precisamente, aparte de todos los problemas que ya se han comentado por los compañeros que han respondido, ese bucle está claramente mal y es inservible.
Si hay 5 registros, el (0,1,2,3,4), al hacer ese bucle se están tratando los datos del 1 al 4, y el 0 (cero) se pierde y el 5 no leerá nada tampoco, pues no existe.

Entiendo que no es la forma habitual-correcta de hacerlo, pero los dos bucles hacen su trabajo bien, que es recorrer un dataset de 5 registros, el que la variable count vaya del 0 al 4, o del 1 al 5, es indiferente para este caso.
Responder Con Cita
  #3  
Antiguo 10-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por WHILENOTEOF Ver Mensaje
Entiendo que no es la forma habitual-correcta de hacerlo, pero los dos bucles hacen su trabajo bien, que es recorrer un dataset de 5 registros, el que la variable count vaya del 0 al 4, o del 1 al 5, es indiferente para este caso.
Depende de los componentes y de la base de datos. Algunos tratan el primer registro como 0 (cero) y hay que decirle esplícitamente que posicione en el registro 0, en caso contrario ese registro se lo saltaría.
Ignoro el caso este de los componentes que esté usando y la base de datos.
Responder Con Cita
  #4  
Antiguo 10-03-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Depende de los componentes y de la base de datos. Algunos tratan el primer registro como 0 (cero) y hay que decirle esplícitamente que posicione en el registro 0, en caso contrario ese registro se lo saltaría.
Ignoro el caso este de los componentes que esté usando y la base de datos.
Casimiro, creo que estamos hablando de dos cosas distintas, el que al ejecutar la query nos situemos en el primer registro, suele ser el comportamiento habitual, en todo caso si no lo sabemos nos situaríamos con Query.First , como la variable del bucle no la utilizamos dentro del mismo, da igual que empiece por 0 y termine en 4 (hará 5 iteraciones) , o que empiece en 1 y termine en 5 (serán las mismas 5 iteraciones), o que empiece en 10000 y acabe en 10004 (serán las mismas 5 iteraciones).
Responder Con Cita
  #5  
Antiguo 10-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sí, te entiendo, pero aunque te parezca raro, porque a mí me lo parece, me he encontrado con componentes que acceden a bases de datos a los que hay que decirle que se posicione en la posición determinada, ejemplo:
Código:
query.open
for i=0 to query.recordcount -1
  query.position = i
  ...
  ...
  query.next
En este caso, si fuese for i=1 to .... no posicionaría nunca en el primer registro, el cero.
Responder Con Cita
  #6  
Antiguo 11-03-2019
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola


Solo agregar que no siempre recordcount devuelve un valor valido. Eso dependiendo del tipo de componente y base de datos usada.


Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #7  
Antiguo 11-03-2019
JorgeDM JorgeDM is offline
Registrado
 
Registrado: mar 2019
Posts: 8
Poder: 0
JorgeDM Va por buen camino
buenos días

a todos muchas gracias por sus aportes, les entiendo muy bien cada punto que me han colocado y otros puntos que no sabía me han ayudado mucho en conocimiento, bueno pasando más importante
por ahora, he hecho los cambios ya que me han propuesto, pero sigue en lo mismo, hace muy bien el recorrido hasta el ultimo registro, recorro cada linea y al llegar al execSQL, no pasa de ahí, voy al
SQL Server y veo en el monitor de actividades que estoy en Update Suspendido, me toca matar el proceso, o cerrar el programa para que se libere.
Envío el código como lo tengo en estos momentos, seguiré haciendo pruebas

Código Delphi [-]
  with Query6 do
  begin
    Query6.Close;
    Query6.Params[0].AsString := Edit_ano.Text;
    Query6.Params[1].AsString := mes;
    Query6.Open;
  end;

v1 := 0;

Query6.First;
  while not Query6.Eof do
  begin
    v1 := Query6.FieldByName('reversion').AsInteger;
    Table2.Open;
    Table2.Insert;
    Table2.FieldByName('cuenta').Value := '139905';
    Table2.FieldByName('num_mov').Value := '138';
    Table2.FieldByName('tipo_mov').Value := 'DT';
    Table2.FieldByName('consec').Value := cons;
    Table2.FieldByName('ano_mov').Value := Edit_ano.Text;
    Table2.FieldByName('mes_mov').Value := mes;
    Table2.Post;
    Table2.Close;
     
qconsr := TFDQuery.create(nil);

    try
      qconsr.ConnectionName := Md_comun.BD_Tesoreria.ConnectionName;
      qconsr.SQL.Clear;
      qconsr.SQL.Add('UPDATE pago set deter = :P1 ');
      qconsr.SQL.Add('WHERE nrocredito = :P2 AND documento = :P3 ');
      qconsr.SQL.Add('AND consecutivo = :P4');
      qconsr.ParamByName('P1').AsFloat  := v1;
      qconsr.ParamByName('P2').AsString := Query6.FieldByName('nrocredito').AsString;
      qconsr.ParamByName('P3').AsString := Query6.FieldByName('documento').AsString;
      qconsr.ParamByName('P4').AsString := Query6.FieldByName('consecutivo').AsString;
      qconsr.ExecSQL;
    finally
      qconsr.Free;
    end;

    Query6.Next;
  end;

haciendo las pruebas, copio la cadena del update del qconsr en el ultimo registro, y la pruebo directamente en SQLServer y me funciona sin problema.
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
No funciona bien KillFocusByReturn oscjae FireMonkey 2 20-12-2018 21:01:31
Recorrer una Dataset hacia atras IVAND Varios 4 15-05-2012 22:20:15
funciona bien en windows 7 64b pero en XP no funciona ASAPLTDA Varios 5 06-05-2011 16:24:50
Recorrer fichero txt y almacenarlo en un DataSet mamen .NET 2 24-04-2006 19:27:33
QRImage no funciona bien eljinete Impresión 4 16-12-2005 01:02:05


La franja horaria es GMT +2. Ahora son las 21:57:08.


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