Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-12-2016
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
Como realizar multiples UPDATE desde un TStringlist

Hola,
e vuelto despues de un tiempo de ausencia, al foro que me hizo crecer como programador.
les tengo una consulta.

Tengo dos tablas mysql "tipomayor" y "tipomenor" la primera tiene los primeros 4 números con que empiezan los registros de la tala menor...

Tabla mayor
1101010000
1102010000
1103010000

Tabla menor
1101010001
1101010002
1101010003
1102010001
1102010002
1102010003
1103010001
1103010002
1103010003


Lo que yo hago es extraer los primeros 6 números de todos los registros de la columna id asi:


Código Delphi [-]

var
guardar,guardar2:TStringlist;
          
begin
guardar:= TStringlist.Create;
guardar2:= TStringlist.Create;


ZQUERY1.Close;
ZQUERY1.SQL.Clear;
 ZQuery1.SQL.Add('SELECT id from tipomayor') ;
      Try
        ZQuery1.Open;
     while not ZQuery1.Eof do
             begin

              guardar.Add(copy(ZQuery1.Fields[0].AsString,0,6));




               ZQuery1.Next;

             end;
           ComboBox1.Items:=guardar;



     except
        ComboBox1.Items:=guardar;

      End;
      ZQuery1.Close;


Y me da todos los registros, con sus respectivos 6 numeros iniciales..
para actualizar sus valores de acuerdo a sus primeros 6 numeros, que los reconoce como hijos, yo lo hago asi..


Código Delphi [-]

ZQUERY1.SQL.ADD('UPDATE tablamayor Set SALDO='2561150.25' where id='1101010000');

para saber cuales son sus hijos yo uso la esto

Código Delphi [-]

id regexp '+char(39)+'^'+1101+char(39));

pero debo hacerlo de de la suma de los valores de sus ·hijos",..
puedo hacer uno por uno,pero debo hacerlo automático.
actualizar todos los registros mayores, de acuerdo a los valores de sus hijos, de forma secuencial, uno tras otro.
para no tener que digitar manualmente la cuenta mayor a la que le sumare los valores de sus hijos..

gracias de antemano.

Última edición por elmago00 fecha: 06-12-2016 a las 07:54:12.
Responder Con Cita
  #2  
Antiguo 06-12-2016
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.
Cita:
Empezado por elmago00 Ver Mensaje
....
Lo que yo hago es extraer los primeros 6 números de todos los registros de la columna id asi:
Podrías simplemente hacer:
Código Delphi [-]
...
begin
  ComboBox1.Items.Clear;
  ZQuery1.Close;
  ZQuery1.SQL.Text := 'SELECT SUBSTRING(ID FROM 1 FOR 6) AS DATO FROM TIPOMAYOR';
  ZQuery1.Open;
  while not ZQuery1.Eof do
  begin
    ComboBox1.Items.Add( ZQuery1.FieldByName( 'DATO' ).AsString );
    ZQuery1.Next;
  end;
  ZQuery1.Close;
  ...

Cita:
Empezado por elmago00 Ver Mensaje
para actualizar sus valores de acuerdo a sus primeros 6 numeros, que los reconoce como hijos, yo lo hago asi..
Código Delphi [-]
ZQUERY1.SQL.ADD('UPDATE tablamayor Set SALDO='2561150.25' where id='1101010000');
Sería mejor así:
Código Delphi [-]
begin
  ZQuery1.Close;
  ZQuery1.SQL.Text := 'UPDATE TABLAMAYOR SET SALDO = :SALDO WHERE ID = :ID';
  ZQuery1.ParamByName('SALDO').AsCurrency := valor_saldo;
  ZQuery1.ParamByName('ID').AsString      := valor_id;
  ZQuery1.ExecSQL;
...

Cita:
Empezado por elmago00 Ver Mensaje
...
para saber cuales son sus hijos yo uso la esto

Código Delphi [-]
id regexp '+char(39)+'^'+1101+char(39));
pero debo hacerlo de de la suma de los valores de sus ·hijos",..
puedo hacer uno por uno,pero debo hacerlo automático.
actualizar todos los registros mayores, de acuerdo a los valores de sus hijos, de forma secuencial, uno tras otro.
para no tener que digitar manualmente la cuenta mayor a la que le sumare los valores de sus hijos..
Aqui ya no entiendo el planteo del problema.

La otra duda que me queda es el papel que juega en todo esto TIPOMENOR (o TABLAMENOR ? ) , ya que no aparece en ninguna parte del código.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 06-12-2016 a las 16:08:24.
Responder Con Cita
  #3  
Antiguo 06-12-2016
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
gracias por responer ecfisa.

yo tengo esto:
Código Delphi [-]
tabla mayor
id               Nombre                   valor..
11010000    ingresos por alquiler   0.00
11020000    gasto de ventas         0.00

tabla menor
id             nombre                       saldo
11010001  alquiler de terreno          45154.15
11010002  alquiler de oficina           8951.15
11010003  sucursal uno                   0.00
11020001  impuesto sobre la renta    1450.15
11020002  otros costos                    751.15


lo que debo hacer es sumar, la columna de la tabla menor, cuyos primeros 6 números sean iguales al registro de la tabla mayor.
y guardarlo en ese registro de la tabla mayor..


yo lo hago uno por uno...
pero debo hacerlo, sin tener que digitar a que cuenta mayor voy a actualizar sus valores... sino que busque los datos en la tabla menor y me actualice todos los registros de la mayor de acuerdo a la suma de la columna de la tabla menor.. automáticamente.. todo esto desde delphi

Última edición por elmago00 fecha: 06-12-2016 a las 17:45:17.
Responder Con Cita
  #4  
Antiguo 06-12-2016
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
recuerden yo guardo los primeros 6 numeros de cada registro de la tabla mayor en un stringlist..
como hago, para que recorra todos los valores del stringlist en la sentencia mysql... para que actualice toda la tabla mayor de forma automática.
siempre de acuerdo a los valores iniciales, que estan en la tabla menor... desde delphi
Responder Con Cita
  #5  
Antiguo 06-12-2016
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.

Entonces, y si te he entendido bién, la solución se puede reducir a este código:
Código Delphi [-]
...
begin
  ZQuery1.Close;
  ZQuery1.SQL.Clear;
  ZQuery1.SQL.Add('UPDATE TABLA_MAYOR MA');
  ZQuery1.SQL.Add('SET MA.VALOR = COALESCE( ( SELECT SUM( ME.VALOR )');
  ZQuery1.SQL.Add('FROM TABLA_MENOR ME ');
  ZQuery1.SQL.Add('WHERE SUBSTRING(ME.ID FROM 1 FOR 6) = SUBSTRING(MA.ID FROM 1 FOR 6) ), 0)');
  ZQuery1.ExecSQL;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 06-12-2016
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
gracias funciona perfecto....
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
Realizar un Update en delphi con un query concondicion desde otro query!!! rotsen26 SQL 9 09-03-2013 22:17:47
?Como realizar un insert de multiples filas con tablas de diferentes bases de datos? jasmad SQL 12 31-10-2011 12:14:53
Como cargar datos a un TStringList desde un Stream santus OOP 3 16-04-2008 17:04:56
Como Realizar una consulta desde un Tedit? ing.cagn SQL 7 06-01-2006 20:47:12
¿Como realizar bien un UPDATE? judoboy SQL 11 13-05-2003 14:02:38


La franja horaria es GMT +2. Ahora son las 03:31:59.


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