Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
Exclamation Datos de una tabla a otra

Salu2 amigos foristas...

tengo un formulario que tiene lo siguiente:

2 combobox
1 edit
3bitbtn

lo que se quiere es lo siguiente:

en la misma aplicacion hay un formulario el cual se llena una base de datos....bla bla bla..

y en el formulario actual necesito cargar una nueva base de datos provenientes de la nombrada anteriormente (por que la primera que mencioné es temporal)....

y necesito que si un registro de la table14 tiene todos los campos igual a los de table11 entonces no debe pasar nada de lo contrario agregarlos

por que despues debo mostrar un quickreport con lo filtrado con los combobox 1 y 2

en el boton aceptar tengo este código, no da error, pero no cumple con lo que necesito:

Código Delphi [-]
var
mes,ano,grupo,descr:String;
fecha:TDate;
deber,haberouble;
Reg:Boolean;
begin
if form1.Table14.RecordCount<1 then
  begin
    form1.Table11.First;
      with form1.Table14 do
        begin
          while not Eof do
            begin
              Insert;
              FieldValues['fecha']:=form1.Table11.FieldValues['fecha'];
              FieldValues['Grupo']:=form1.Table11.FieldValues['Grupo'];
              FieldValues['Des_cu']:=form1.Table11.FieldValues['desc_cu'];
              FieldValues['debe']:=form1.Table11.FieldValues['debe'];
              FieldValues['haber']:=form1.Table11.FieldValues['haber'];
              Post;
            end;
            Next;
        end;
  end
  else
  begin
    With form1.Table11 do
      begin
        while not Eof do
          begin
            fecha:=FieldValues['fecha'];
            grupo:=FieldValues['grupo'];
            descr:=FieldValues['desc_cu'];
            deber:=FieldValues['debe'];
            haber:=FieldValues['haber'];
              With Form1.Table14 do
                begin
                  if (fecha=form1.Table11.FieldByName('fecha').AsDateTime) and (grupo=form1.Table11.FieldByName('grupo').AsString) and (descr=form1.Table11.FieldByName('desc_cu').AsString) and (deber=form1.Table11.FieldByName('debe').AsFloat) and (haber=form1.Table11.FieldByName('haber').AsFloat) then
                    begin
                      Reg:=true;
                    end
                    else
                    begin
                      Reg:=False;
                    end;
                end;
            if Reg = False then
              begin
                With form1.Table14 do
                  begin
                    Insert;
                    FieldByName('fecha').AsDateTime:=fecha;
                    FieldByName('grupo').AsString:=grupo;
                    FieldByName('desc_cu').AsString:=descr;
                    FieldByName('debe').AsFloat:=deber;
                    FieldByName('haber').AsFloat:=haber;
                    Post;
                  end;
              end;
          end;
        Next;
      end;
  end;

if ComboBox1.Text='Seleccione Mes' then
  begin
    Application.MessageBox('Disculpe, debe seleccionar un Mes','');
    exit;
  end;

if ComboBox2.Text='Seleccione Año' then
  begin
    Application.MessageBox('Disculpe, debe seleccionar un Año','');
    exit;
  end;

mes:=IntToStr(ComboBox1.ItemIndex+1);
ano:=ComboBox2.Text;
edit1.Text:='01'+'/'+mes+'/'+ano;

with Form45.Query1 do begin
   Close;
   SQL.Text := 'Select Fecha,grupo,des_cu,debe,haber '+
             'from costosygastos.db '+
             'where Extract(month from fecha) = '+IntToStr(MonthOf(StrToDate(Edit1.Text)))+
             ' and Extract(year from fecha) = '+IntToStr(YearOf(StrToDate(Edit1.Text)));
   Open;
end;
form45.QRLabel1.Caption:='Costos y Gastos de '+ComboBox1.Text+' de '+ComboBox2.Text;
form45.QuickRep1.Preview;
exit;
end;

Agradezco mucho su tiempo ...
__________________
Las cosas o son, o no son...

Última edición por lKinGl fecha: 29-10-2008 a las 00:27:06.
Responder Con Cita
  #2  
Antiguo 29-10-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
Hola lKinGl !

Por lo que pude revisar hasta que me fui, tienes unos errores en cuanto a las referencias a las tablas...

Sigo viendo algunos detalles interesantes de tu código, espero poder terminar de checarlos y ayudarte...

Saluditos
__________________
Ask questions. Think for yourself. Wake up and you’ll make the difference
Responder Con Cita
  #3  
Antiguo 29-10-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me da la impresión de que se complica el código y la esencia de lo que se quiere hacer.
Comprobar todo el contenido me parece complicado, tedioso, lento etc.
Yo lo que haría es comprobar un campo determinado, no se, tal vez un numero único y si este ya existe entonces que se cumplan las condiciones que necesites.
Bueno, es solo una opinión, veo que Fenareth te esta ayudando, ella sabrá que es lo mejor en este caso.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 29-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
correcto caral pero en la tabla origen no hay campo clave
__________________
Las cosas o son, o no son...
Responder Con Cita
  #5  
Antiguo 29-10-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Pero que importa que no tenga un campo clave?.
Cualquier campo sirve, cualquier dato que no se repita.
No conozco tu tabla, pero siempre hay algo de donde agarrarse.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 29-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
necesito es comparar porque puedo tener exactamente la misma linea pero si tiene distinto un monto debe agregarse osea por una minima diferencia debe agregarse de lo contrario se omite .... pero lo que se omite debo estar 100% seguro que esta repetido
__________________
Las cosas o son, o no son...
Responder Con Cita
  #7  
Antiguo 29-10-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No se exactamente como esta tu tabla ni el contenido, pero una cosa si te puedo decir, usar esto:
Código Delphi [-]
 while not Eof do
            begin
es muy perjudicial, por lo lento, ya que cuando crezca la base de datos costara mas que se haga el recorrido de la misma.
Por eso me da la impresion de que se puede hacer de otra manera.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 29-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
si te fijas bien si he puesto el while not eof pero en que parte sugieres tu?

y si necesito que el codigo sea lo mas sencillo posible ya que calculo que esta bd crecera como 60 lineas de registros por mes
__________________
Las cosas o son, o no son...
Responder Con Cita
  #9  
Antiguo 29-10-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
Hola lKinGl !

Caral ha dado una idea muy muy buena... que te parece si agregas a tu tabla a comparar un campo único (llave) que sea la concatenación de la información almacenada en tus campos para cada registro (considerando que son pocos campos)...

Después (y ahora si usando FindKey) podría ser más sencillo buscar la cadena concatenada, si es exactamente igual, entonces no guarda el registro, en caso contrario si lo hace...

Esta idea me la compartieron y me pareció bastante interesante para probarla... porqué no haces el intento ?

Saludos
__________________
Ask questions. Think for yourself. Wake up and you’ll make the difference
Responder Con Cita
  #10  
Antiguo 29-10-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
creo que te estas complicando mas de la cuenta, en la paleta BDE tienes el componente TBatchMove, que configurando sus propiedades segun tus necesidades te sirve para lo que quieres sin escribir tanto codigo.

En la ayuda de Delphi hay un ejemplo muy bueno de como utilizarlo.
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #11  
Antiguo 29-10-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
Cita:
Empezado por eduarcol Ver Mensaje
creo que te estas complicando mas de la cuenta, en la paleta BDE tienes el componente TBatchMove, que configurando sus propiedades segun tus necesidades te sirve para lo que quieres sin escribir tanto codigo.

En la ayuda de Delphi hay un ejemplo muy bueno de como utilizarlo.
De plano ? ... uno que quiere echarle emoción al asunto pues...
__________________
Ask questions. Think for yourself. Wake up and you’ll make the difference
Responder Con Cita
  #12  
Antiguo 29-10-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por Fenareth Ver Mensaje
De plano ? ... uno que quiere echarle emoción al asunto pues...
jajaja mas de una vez me ha sucedido que he inventado la rueda y cuando veo el componente que lo hace lo siento medio aburrido, es mas divertido inventarselo
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #13  
Antiguo 29-10-2008
Avatar de Spynosa
Spynosa Spynosa is offline
Miembro
 
Registrado: nov 2004
Ubicación: Ecija - Sevilla
Posts: 99
Poder: 20
Spynosa Va por buen camino
Que tal un procedimiento almacenado, mas o menos

Código SQL [-]
create procedure elquesea (
  fecha date,
  grupo varchar(6),
  desc_cu varchar (10),
  debe double precision,
  haber double precision,
)
as
begin
  if (not exists(select * from tabla where fecha = :fecha and grupo = :grupo 
        and desc_cu = :desc_cu and debe = :debe and haber = :haber )) then
           insert into tabla (fecha,grupo,desc_cu,debe,haber) 
               values (:fecha,:grupo,:desc_cu,:debe,:haber);
espero que te sirva
Responder Con Cita
  #14  
Antiguo 31-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
he desarrollado este nuevo codigo ahora con campo único, funciona bien hasta aqui, pero necesito meterle un locate para que verifique antes si el registro esta no se agrega de lo contrario se registra, peroooo al momento de colocar el locate lanza un error no se porque :S

aqui envio mi codigo para ver que se puede hacer


Código Delphi [-]
procedure TForm44.BitBtn1Click(Sender: TObject);
var
Fecha:TDate;
unico,Grupo,Des,mes,ano:String;
debeouble;
begin

With Form1.Table11 do
  begin
    First;
    while not Eof do
      begin
        unico:=FieldValues['unico'];
        if  unico='0' then
          begin
          end
          else
          begin
            With form1.Table14 do
              Begin
                Insert;
                FieldValues['Fecha']:=form1.Table11.FieldValues['Fecha'];
                FieldValues['Grupo']:=Form1.Table11.FieldValues['Grupo'];
                FieldValues['Des_cu']:=Form1.Table11.FieldValues['des_cu'];
                FieldValues['debe']:=Form1.Table11.FieldValues['debe'];
                Post;
              end;
          end;
        Next;
      end;
  end;

if ComboBox1.Text='Seleccione Mes' then
  begin
    Application.MessageBox('Disculpe, debe seleccionar un Mes','');
    exit;
  end;

if ComboBox2.Text='Seleccione Año' then
  begin
    Application.MessageBox('Disculpe, debe seleccionar un Año','');
    exit;
  end;

mes:=IntToStr(ComboBox1.ItemIndex+1);
ano:=ComboBox2.Text;
edit1.Text:='01'+'/'+mes+'/'+ano;

with Form45.Query1 do begin
   Close;
   SQL.Text := 'Select Fecha,grupo,des_cu,debe,haber '+
             'from costosygastos.db '+
             'where Extract(month from fecha) = '+IntToStr(MonthOf(StrToDate(Edit1.Text)))+
             ' and Extract(year from fecha) = '+IntToStr(YearOf(StrToDate(Edit1.Text)));
   Open;
end;
form45.QRLabel1.Caption:='Costos y Gastos de '+ComboBox1.Text+' de '+ComboBox2.Text;
form45.QuickRep1.Preview;
exit;
end;

Gracias Adelantadas
__________________
Las cosas o son, o no son...
Responder Con Cita
  #15  
Antiguo 31-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
help me! please
__________________
Las cosas o son, o no son...
Responder Con Cita
  #16  
Antiguo 02-11-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
Salu2 ya resolvi mi problema, gracias a los que ayudaron en algo...

publico el código para que a alguien mas le sirva, uno nunca sabe ....

Código Delphi [-]
procedure TForm44.BitBtn1Click(Sender: TObject);
var
mes,ano:String;
begin

if ComboBox1.Text='Seleccione Mes' then
  begin
    Application.MessageBox('Disculpe, debe seleccionar un Mes','');
    exit;
  end;

if ComboBox2.Text='Seleccione Año' then
  begin
    Application.MessageBox('Disculpe, debe seleccionar un Año','');
    exit;
  end;

Form1.Table11.First;
  With Form1.Table11 do
    Begin
      While not Eof do
        begin
            // si el grupo es 6 ó 6
          if (FieldValues['nogrupo']=5) or (FieldValues['nogrupo']=6) then
            begin
              //si consigue unico en la tabla14
              if form1.Table14.Locate('unico',FieldValues['unico'],[]) then
                begin
                  //no pasa nada
                end
                else
                begin
                //de lo contrario graba el registro
                  With form1.Table14 do
                    Begin
                      Insert;
                      FieldValues['unico']:=form1.Table11.FieldValues['unico'];
                      FieldValues['Fecha']:=form1.Table11.FieldValues['Fecha'];
                      FieldValues['Grupo']:=Form1.Table11.FieldValues['Grupo'];
                      FieldValues['Des_cu']:=Form1.Table11.FieldValues['des_cu'];
                      FieldValues['debe']:=Form1.Table11.FieldValues['debe'];
                      Post;
                    end;
                end;
            end;
          Next;
        end;
    End;

mes:=IntToStr(ComboBox1.ItemIndex+1);
ano:=ComboBox2.Text;
edit1.Text:='01'+'/'+mes+'/'+ano;

with Form45.Query1 do begin
   Close;
   SQL.Text := 'Select Fecha,grupo,des_cu,debe,haber '+
             'from costosygastos.db '+
             'where Extract(month from fecha) = '+IntToStr(MonthOf(StrToDate(Edit1.Text)))+
             ' and Extract(year from fecha) = '+IntToStr(YearOf(StrToDate(Edit1.Text)));
   Open;
end;
form45.QRLabel1.Caption:='Costos y Gastos de '+ComboBox1.Text+' de '+ComboBox2.Text;
form45.QuickRep1.Preview;
exit;
end;

Saludos amigos
__________________
Las cosas o son, o no son...
Responder Con Cita
  #17  
Antiguo 02-11-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
uffff en mis códigos anteriores acabo de ver a simple vista un error super grave, que a lo mejor era eso lo que no lo hacia funcionar....

en mi primer código estoy declarando la variable

deber,haberouble;


y es deber, haber: Double;

de igual manera en los demás códigos :S jeje
__________________
Las cosas o son, o no son...
Responder Con Cita
  #18  
Antiguo 02-11-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
bueno supongo que son cosas que simplemente pasan ......
__________________
Las cosas o son, o no son...
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
copiar de una tabla de una base de datos a otra tabla igual de otra base de datos ingabraham Conexión con bases de datos 1 14-10-2008 23:16:42
Actualizar tabla con datos de otra tabla mediante UPDATE Rockin Firebird e Interbase 18 28-11-2007 19:15:42
Mysql: copiar los campos de una tabla de una base de datos a otra tabla de otra base? patriram MySQL 4 02-11-2007 16:00:24
Actualizar un campo de una tabla con datos que se encuentran en otra tabla Morphine SQL 4 15-12-2006 22:47:42
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla taru MySQL 1 27-07-2006 15:36:12


La franja horaria es GMT +2. Ahora son las 18:34:56.


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