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 15-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Consulta con 4 tablas

Hola a todos y gracias de antemano por vuestra ayuda.
Me toca preguntar, esto ya me tiene loco, a ver que podeis hacer por mi.
Tengo que realizar una consulta a varias tablas a un campo en comun, NumRecibo.
Lo que hago es:
Primero Hago la consulta a las tablas asi:
Código Delphi [-]
OrdenCompra.Active := False;
   OrdenCompra.SQL.Text := 'Select OrdenCompra From OrdenProd WHERE OrdenCompra ='+QuotedStr(Edit7.Text);
   OrdenCompra.Active := True;
   ReciboOrden.Active := False;
   ReciboOrden.SQL.Text := 'Select NumRecibo From OrdenProd WHERE NumRecibo ='+Edit10.Text;
   ReciboOrden.Active := True;
   BN.Active := False;
   BN.SQL.Text := 'Select NumRecibo From BancoNac WHERE NumRecibo ='+Edit10.Text;
   BN.Active := True;
   BSJC.Active := False;
   BSJC.SQL.Text := 'Select NumRecibo From BancoSanJoseco WHERE NumRecibo ='+Edit10.Text;
   BSJC.Active := True;
   BSJD.Active := False;
   BSJD.SQL.Text := 'Select NumRecibo From BancoSanJosedol WHERE NumRecibo ='+Edit10.Text;
   BSJD.Active := True;
Verifico que la orden y el numero de recibo no esten repetidos en la tabla ordenes (esto lo hace bien) .
Luego reviso las tablas de los bancos para ver en que banco esta el recibo, (esto lo hace bien.)
Ahora reviso y comparo asi:
Código Delphi [-]
If Edit7.Text = '' then    Edit7.Text:= Edit2.Text    else    If Edit10.Text = ReciboOrden.Fields[0].AsString then    MessageDlg('Este recibo ya se uso en otra orden',mtError,[mbOK],0)
   else    If Edit7.Text = OrdenCompra.Fields[0].Value then    MessageDlg('La orden de Compra ya Existe',mtError,[mbOK],0)
   else    If Edit9.Text = 'Contado' then    begin        If Edit10.Text = BN.Fields[0].AsString then        begin        ShowMessage('esta en el banco nacional');
       end;
       If Edit10.Text = BSJC.Fields[0].AsString then        begin        ShowMessage('esta en el banco San Jose Colones');
       end;
       If Edit10.Text = BSJD.Fields[0].AsString then        begin        ShowMessage('esta en el banco San Jose dolares');
       end    else    MessageDlg('El recibo no esta en ningun banco, REVISE',mtError,[mbOK],0)
   end    else


Y luego grabo los datos si cumple con la condicion asi:
Código Delphi [-]MessageDlg('El recibo no esta en ningun banco, REVISE',mtError,[mbOK],0)
   end    else    If Edit3.Text = '' then MessageDlg('Debe especificar el código del cliente',mtError,[mbOK],0)
   else     begin       ShortDateFormat := 'dd/mm/yyyy';
      DataModule1.AC1.BeginTrans;
      try          If Nueva then          QTemp.SQL.Text := 'Insert Into OrdenProd (Codorden, FechaInicio, FechaRequerido, CodUsuario, Comentarios, CodCliente, Prioridad, Enrutada, OrdenCompra, NumRecibo) '+
                           'Values (' +Edit2.Text+', '+QuotedStr(Edit4.Text)+', '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', '+
                            QuotedStr(Edit5.Text)+', '+QuotedStr(Memo1.Text)+', '+Edit3.Text+', '+IntEdit1.Text+', True, '+QuotedStr(Edit7.Text)+', '+QuotedStr(Edit10.Text)+')'          else          QTemp.SQL.Text := 'Update OrdenProd set FechaRequerido = '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', Comentarios = '                             +QuotedStr(Memo1.Text)+', CodCliente = '+Edit3.Text+', Prioridad = '+IntEdit1.Text+
                            ' Where CodOrden = '+Edit2.Text;

         QTemp.ExecSQL;
         guardada := true;
         IF Nueva  then          begin             QOrdProd.Requery();             QOrdProd.Last;          end          else begin                 bok := QOrdProd.Bookmark;                 QOrdProd.Requery();                 QOrdProd.Bookmark := bok;               end;
         DataModule1.AC1.CommitTrans;
         If Nueva then If MessageDlg('Orden Guardada.'+#13+'¿Desea agregar items a la orden?',mtConfirmation,[mbYes,mbNo],0) = mrYes then          Nueva := False;          QOrdProd.Close;          QOrdProd.Open;          TabSheet3.Show;       except          on E:Exception do DataModule1.AC1.RollbackTrans;
      end;//try
   end;
end;
Si juntan todo el codigo, hace un solo evento en un boton.
Bueno el asunto es que no me funciona.
encuentra el recibo, pero si esta no continua la ejecucion, se para ahi, si no lo encuentra si lo graba.
Hay que tener en cuenta que tiene que cumplir una condicion adicional, que el cliente sea de Contado, en esta seccion es donde me da los problemas.
Por favor ayudais al novato
Saludos

Última edición por marcoszorrilla fecha: 15-10-2007 a las 19:38:23.
Responder Con Cita
  #2  
Antiguo 15-10-2007
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 por que no se ve bien
Código Delphi [-]
procedure TFOrdProd.BitBtn1Click(Sender: TObject);
var bok : TBookMarkStr;
begin
   OrdenCompra.Active := False;
   OrdenCompra.SQL.Text := 'Select OrdenCompra From OrdenProd WHERE OrdenCompra ='+QuotedStr(Edit7.Text);
   OrdenCompra.Active := True;
   ReciboOrden.Active := False;
   ReciboOrden.SQL.Text := 'Select NumRecibo From OrdenProd WHERE NumRecibo ='+Edit10.Text;
   ReciboOrden.Active := True;
   BN.Active := False;
   BN.SQL.Text := 'Select NumRecibo From BancoNac WHERE NumRecibo ='+Edit10.Text;
   BN.Active := True;
   BSJC.Active := False;
   BSJC.SQL.Text := 'Select NumRecibo From BancoSanJoseco WHERE NumRecibo ='+Edit10.Text;
   BSJC.Active := True;
   BSJD.Active := False;
   BSJD.SQL.Text := 'Select NumRecibo From BancoSanJosedol WHERE NumRecibo ='+Edit10.Text;
   BSJD.Active := True;
   If Edit7.Text = '' then
   Edit7.Text:= Edit2.Text
   else
   If Edit10.Text = ReciboOrden.Fields[0].AsString then
   MessageDlg('Este recibo ya se uso en otra orden',mtError,[mbOK],0)
   else
   If Edit7.Text = OrdenCompra.Fields[0].Value then
   MessageDlg('La orden de Compra ya Existe',mtError,[mbOK],0)
   else
   If Edit9.Text = 'Contado' then
   begin
       If Edit10.Text = BN.Fields[0].AsString then
       begin
       ShowMessage('esta en el banco nacional');
       end;
       If Edit10.Text = BSJC.Fields[0].AsString then
       begin
       ShowMessage('esta en el banco San Jose Colones');
       end;
       If Edit10.Text = BSJD.Fields[0].AsString then
       begin
       ShowMessage('esta en el banco San Jose dolares');
       end
   else
   MessageDlg('El recibo no esta en ningun banco, REVISE',mtError,[mbOK],0)
   end
   else
   If Edit3.Text = '' then MessageDlg('Debe especificar el código del cliente',mtError,[mbOK],0)
   else

   begin
      ShortDateFormat := 'dd/mm/yyyy';
      DataModule1.AC1.BeginTrans;
      try
         If Nueva then
         QTemp.SQL.Text := 'Insert Into OrdenProd (Codorden, FechaInicio, FechaRequerido, CodUsuario, Comentarios, CodCliente, Prioridad, Enrutada, OrdenCompra, NumRecibo) '+
                           'Values (' +Edit2.Text+', '+QuotedStr(Edit4.Text)+', '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', '+
                            QuotedStr(Edit5.Text)+', '+QuotedStr(Memo1.Text)+', '+Edit3.Text+', '+IntEdit1.Text+', True, '+QuotedStr(Edit7.Text)+', '+QuotedStr(Edit10.Text)+')'
         else
         QTemp.SQL.Text := 'Update OrdenProd set FechaRequerido = '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', Comentarios = '
                            +QuotedStr(Memo1.Text)+', CodCliente = '+Edit3.Text+', Prioridad = '+IntEdit1.Text+
                            ' Where CodOrden = '+Edit2.Text;

         QTemp.ExecSQL;
         guardada := true;
         IF Nueva  then
         begin
            QOrdProd.Requery();
            QOrdProd.Last;
         end
         else begin
                bok := QOrdProd.Bookmark;
                QOrdProd.Requery();
                QOrdProd.Bookmark := bok;
              end;
         DataModule1.AC1.CommitTrans;
         If Nueva then If MessageDlg('Orden Guardada.'+#13+'¿Desea agregar items a la orden?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
         Nueva := False;
         QOrdProd.Close;
         QOrdProd.Open;
         TabSheet3.Show;
      except
         on E:Exception do DataModule1.AC1.RollbackTrans;
      end;//try
   end;
end;
Saludos
Responder Con Cita
  #3  
Antiguo 15-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola Caral,

Todavía no he probado el código... me cuesta seguirlo (a vista) el código... lo tendría que probar para ver donde está el fallo.

Me preguntaba si es posible conocer un poco la estructura de la base de datos y como haz hecho las uniones de los datasource, dataset y querys.

Cualquier otra info que tu consideres que pueda ser de utilidad también es bien recibida.
Quisiera tratar de reproducir tus pasos, puede que logre ver el problema.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 15-10-2007
betiitooo betiitooo is offline
Miembro
 
Registrado: sep 2007
Ubicación: chilpancingo, guerrero. mexico
Posts: 18
Poder: 0
betiitooo Va por buen camino
Hola, sería bueno que especificaras un poquito ¿que es exactamente lo que quieres hacer con tanta condición y/o mensajes que has colodado?, no me lo tomes a mal, es solo para intentar ayudarte ok, bye
Responder Con Cita
  #5  
Antiguo 16-10-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 si lo entienden mejor
1- 5 tablas, cuatro en uso un a consulta.
2- tabla ordenprod, esta revisa si la orden esta repetida.
Código Delphi [-]
OrdenCompra.Active := False;
   OrdenCompra.SQL.Text := 'Select OrdenCompra From OrdenProd WHERE OrdenCompra ='+QuotedStr(Edit7.Text);
   OrdenCompra.Active := True;
3- hace una comparacion con un edit y envia un mensaje
Código Delphi [-]
 If Edit7.Text = OrdenCompra.Fields[0].Value then
   MessageDlg('La orden de Compra ya Existe',mtError,[mbOK],0)
4- revisa si el numero de recibo esta en la tabla ordenprod
Código Delphi [-]
ReciboOrden.Active := False;
   ReciboOrden.SQL.Text := 'Select NumRecibo From OrdenProd WHERE NumRecibo ='+Edit10.Text;
   ReciboOrden.Active := True;
5-hace una comparacion u envia un mensaje
Código Delphi [-]
If Edit10.Text = ReciboOrden.Fields[0].AsString then
   MessageDlg('Este recibo ya se uso en otra orden',mtError,[mbOK],0)
6- verifica las tablas de los bancos
Código Delphi [-]
BN.Active := False;
   BN.SQL.Text := 'Select NumRecibo From BancoNac WHERE NumRecibo ='+Edit10.Text;
   BN.Active := True;
   BSJC.Active := False;
   BSJC.SQL.Text := 'Select NumRecibo From BancoSanJoseco WHERE NumRecibo ='+Edit10.Text;
   BSJC.Active := True;
   BSJD.Active := False;
   BSJD.SQL.Text := 'Select NumRecibo From BancoSanJosedol WHERE NumRecibo ='+Edit10.Text;
   BSJD.Active := True;
7- indica una condicion, si es de contado entonces revisa los bancos de lo contrario, sigue.
Aqui es donde esta el asunto, si es de contado y no esta en los bancos entonces envia un mensaje.
Código Delphi [-]
If Edit9.Text = 'Contado' then
   begin
       If Edit10.Text = BN.Fields[0].AsString then
       begin
       ShowMessage('esta en el banco nacional');
       end;
       If Edit10.Text = BSJC.Fields[0].AsString then
       begin
       ShowMessage('esta en el banco San Jose Colones');
       end;
       If Edit10.Text = BSJD.Fields[0].AsString then
       begin
       ShowMessage('esta en el banco San Jose dolares');
       end
   else
   MessageDlg('El recibo no esta en ningun banco, REVISE',mtError,[mbOK],0)
   end
Lo demas sirve, asi que ni para que lo enseño de nuevo.
Espero se entienda ahora, tratare de explicarme mejor la proxima vez.
Saludos
Responder Con Cita
  #6  
Antiguo 16-10-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Vamos a ver amigo Carlos,

Cita:
Empezado por Caral
7- indica una condicion, si es de contado entonces revisa los bancos de lo contrario, sigue.

Aqui es donde esta el asunto, si es de contado y no esta en los bancos entonces envia un mensaje.
Pero no dices cual es el problema, pero de entrada te puedo decir que en esa porción de código debes de hacer if anidados porque según tu código, solo si es San Jose dolares te funciona como quieres, pero en las otras dos opciones te manda tambien el segundo mensaje 'El recibo no esta en ningun banco, REVISE'.

Checalo así.

Código Delphi [-]
  if Edit9.Text = 'Contado' then begin
     if Edit10.Text = BN.Fields[0].AsString then begin
        ShowMessage('esta en el banco nacional');
     end
     else If Edit10.Text = BSJC.Fields[0].AsString then begin
             ShowMessage('esta en el banco San Jose Colones');
     end
     else if Edit10.Text = BSJD.Fields[0].AsString then begin
             ShowMessage('esta en el banco San Jose dolares');
     end
     else MessageDlg('El recibo no esta en ningun banco, REVISE',mtError,[mbOK],0);
   end

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #7  
Antiguo 16-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Gracias por vuestra ayuda, ya lo he solucionado, lo cambie a otro evento y muchos parámetros, lo importante es que gracias a vuestra ayuda me guié en una solución mas simple.
Saludos
Responder Con Cita
  #8  
Antiguo 17-10-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Hola amigo Carlos,

Me parece muy bien que ya hayas focalizado y solucionado el problema, pero....., podrías mostrarnos donde "quedó la bolita" .

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
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
consulta de varias tablas elprimo Tablas planas 3 03-01-2007 10:23:15
Consulta SQL con dos tablas... emeceuy Conexión con bases de datos 2 06-08-2005 07:41:59
consulta de dos tablas tgsistemas SQL 4 15-04-2005 13:25:59
Consulta con dos tablas candido SQL 2 09-08-2004 13:02:07
Consulta SQL con 4 tablas nefy SQL 2 03-05-2004 23:25:22


La franja horaria es GMT +2. Ahora son las 13:39:33.


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