Ver Mensaje Individual
  #1  
Antiguo 15-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Reputación: 27
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