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-2013
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Como hacer consultas de registro anterior y siguiente

Hola

Amigos necesito de su valiosa ayuda. Estoy desarrollando un programa de pedidos, donde tengo un TEdit con el nombre de Codigo_Producto y cuando le doy enter me despliega en un DBGrid todos aquellos código de la tabla de inventario que tengan relación con ese código que se dígito, hasta aquí todo me funciona bien, pero estoy poniendo dos botones, uno para seguir con el siguiente código y el otro botón para ir al código anterior. Pero no se como hacerlo. Si me puede ayudar se los voy agradecer.



Aqui les dejo el codigo de la consulta por código el producto.

Código Delphi [-]
procedure TMovimiento_Pedidos.Codigo_ProdKeyPress(Sender: TObject;
  var Key: Char);
Var llavepadre , articulo1 : string;
    conteo, i : integer;

begin
if KEY = #13 then
  begin
    if (informacion <> 0) then
        limpia_pantalla
      else
      informacion := 1;

    nombre_prod.Text := codigo_prod.Text;
    nombre_producto1;

    IBQuery1.Close;
    IBQuery1.SQL.Clear;
    IBQuery1.SQL.Add('select a.*, b.* from ARTICULOS a inner join ARTMOV b on b. ARMOVID = a.ARID where a.ARCODIGO = '''+Codigo_Prod.Text+'''');
    IBQuery1.Open;

    llavepadre := IBQuery1.FieldByName('ARMOVID').AsString;

    IBQuery2.Close;
    IBQuery2.SQL.Clear;
    IBQuery2.SQL.Add('select count(*) as contador from ARTMOV a where a.ARPADREID = '''+llavepadre+'''');
    IBQuery2.Open;

    //SG.RowCount := IBQuery2.FieldByName('contador').AsInteger;
    sg.RowCount := sg.RowCount + 1;

      if IBQuery2.FieldByName('contador').AsInteger = 0 then
        begin
          //--Application.MessageBox('No Tiene existencias','CONTROL DE MENSAJES',MB_OK);
          nombre_prod.SetFocus;
          exit;
        end;

      conteo := IBQuery2.FieldByName('contador').AsInteger;

  if conteo  > 0 then
    begin
    IBQuery2.Close;
    IBQuery2.SQL.Clear;
    IBQuery2.SQL.Add('select a.* from ARTMOV a where a.ARPADREID = '''+llavepadre+'''');
    IBQuery2.Open;

    for i := 0 to conteo do
      begin
        articulo1 := IBQuery2.FieldByName('ARMOVID').AsString;

        if IBQuery2.FieldByName('ARMOVID').AsString = llavepadre+'001' then
          base := floattostr(IBQuery2.FieldByName('AREXISTENCIA').AsInteger)
        else
        if IBQuery2.FieldByName('ARMOVID').AsString = llavepadre+'006' then
          begin
            desarme := floattostr(IBQuery2.FieldByName('AREXISTENCIA').AsInteger)
          end
        else
        if IBQuery2.FieldByName('ARMOVID').AsString = llavepadre+'007' then
          begin
            consignacion := floattostr(IBQuery2.FieldByName('AREXISTENCIA').AsInteger)
          end
        else
        if IBQuery2.FieldByName('ARMOVID').AsString = llavepadre+'009' then
          begin
            apartado := floattostr(IBQuery2.FieldByName('AREXISTENCIA').AsInteger)
          end
        else
        if IBQuery2.FieldByName('ARMOVID').AsString = llavepadre+'010' then
          otros := floattostr(IBQuery2.FieldByName('AREXISTENCIA').AsInteger);

     IBQuery2.Next;
      end;

    nombre_prod.Text := IBQuery1.FieldByName('ARNOMBRE').AsString;

    sg.Cells[0,sg.RowCount-2] := IBQuery1.FieldByName('ARCODIGO').AsString;
    sg.Cells[1,sg.RowCount-2] := IBQuery1.FieldByName('ARCODALT').AsString;
    sg.Cells[2,sg.RowCount-2] := IBQuery1.FieldByName('ARNOMBRE').AsString;
    sg.Cells[3,sg.RowCount-2] := IBQuery1.FieldByName('ARLINEA').AsString;costocol := FormatFloat('##,###,##0.00',IBQuery1.FieldByName('ARCOSTO').AsFloat);
    sg.Cells[4,sg.RowCount-2] := costocol;
    preciocol := FormatFloat('##,###,##0.00',IBQuery1.FieldByName('ARPRECIO1').AsFloat);
    sg.Cells[5,sg.RowCount-2] := preciocol;
    costodol := FormatFloat('##,###,##0.00',IBQuery1.FieldByName('ARCOSTOM2').AsFloat);
    sg.Cells[6,sg.RowCount-2] := costodol;
    preciodol := FormatFloat('##,###,##0.00',IBQuery1.FieldByName('ARPRECIO1M2').AsFloat);
    sg.Cells[7,sg.RowCount-2] := preciodol;
    SG.Cells[8,SG.RowCount-2] := base;
    SG.Cells[9,SG.RowCount-2] := consignacion;
    SG.Cells[10,SG.RowCount-2] := apartado;
    SG.Cells[11,SG.RowCount-2] := desarme;
    SG.Cells[11,SG.RowCount-2] := otros;

    if nombre_prod.Text = '' then
    begin
      showmessage('Codigo del Articulo NO EXISTE !!');
    end;

    codigo_prod.SetFocus;
  end;
  end;
end;

Esto funciona bien, lo que no se, es como hago si coloco los dos botones para que el programa, lea el siguiente registro y el registro anterior, apartir del registro dado.

Gracias

Última edición por Casimiro Notevi fecha: 15-10-2013 a las 16:40:08.
Responder Con Cita
  #2  
Antiguo 15-10-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #3  
Antiguo 15-10-2013
Avatar de Pericles
Pericles Pericles is offline
Miembro
NULL
 
Registrado: sep 2013
Ubicación: Buenos Aires, Argentina
Posts: 24
Poder: 0
Pericles Va por buen camino
Hola, en principio podrias ejecutar la consulta talcual pero con

Código Delphi [-]
strToInt ( strToInt(Codigo_Prod.Text)+1) 
strToInt ( strToInt(Codigo_Prod.Text)-1)

En todo caso se podrias ver el ID del seleccionado y luego hacer la busqueda con el + - Id (esto por si los codigos no tienen nada que ver entre si)
ej: id-1 cod 145658 / id-2 cod 000448.
De esta manera vas recorriendo el siguiente codigo no el siguente numero del codigo ingresado.

Saludos
Nicolas Perichon
Responder Con Cita
  #4  
Antiguo 15-10-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No entiendo la logica del programa.
En principio no veo el dbgrid, veo un stringrid.
Haces dos sentencias sql
1 para el ibquery1 y otra para el dos, estas estan seguidas, sin embargo casi de inmediato creas una condicion if conteo > 0 then la que cambia la sentencia del ibquery2 y esta es la que me da la impresion de que llena el stringgrid.
No entiendo.
Antes de poder moverse entre registros adelante y atras me parece que se deberia limpiar el codigo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 15-10-2013
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Perdon si, lo que tengo es un stringrid.

En el ibquery2, hago la lectura de una segunda tabla que esta ligada al maestro de inventario (ibquery1), en la segunda cuento los registros y luego hago la lectura de los registros ligados.

En base a esto lleno el stringrid. Pero como te decia, esto me funciona bien. El problema esta en como hago la programación de los botones que están fuera del stringrid. para poder recorrer la tabla del maestro del inventario ?
Responder Con Cita
  #6  
Antiguo 15-10-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Como dije, seguro no entiendo bien.
Dices que el codigo recoge el dato segun el codigo de producto.
Luego lo pasa al stringrid.
Lo que no entiendo es si solo recoge un dato o toda la lista segun la sql ?.
Disculpa pero es que no entiendo como recorrer una tabla de adelante para atras si ya esta todo no lo entiendo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 15-10-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No podrias ligar un dbnavigator al ibquery2 y eliminar las opciones que no necesites ?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 16-10-2013
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Te lo explico mas sencillo, olvidemos del el stringrid y suponga que tengo en TEdit donde pide el código del un articulo de la tabla del inventario, y en base a ese código me llena otro TEdit donde esta el nombre del producto, nada más.

Ahora pongo dos botones, uno es siguiente y otro es atrás. Si le doy un click al siguiente, que el programa me pueda saltar al siguiente registro o atrás para que se desplace al registro anterior. y me despliegue el nombre del producto. Hay que tomar en cuenta, que puede ser que el codigo que se digita puede ser, ej: 30-710 y el siguiente registro puede se 30-755 y el registro anterior puede ser BS125458.

Espero que me haya explicado.

Gracias por su atención.
Responder Con Cita
  #9  
Antiguo 16-10-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Lo que veo es lo siguiente:
si tienes un sql asi:
Select * from articulos
te traera toda la tabla, pero si tienes:
Select * form articulos WHERE codigo = Edit1.text
Ya te trae SOLO ese codigo, osea, no vas a poder ir adelante o atras ya que no hay.
Por eso digo que me parece que el asunto esta en el sql, depende de como lo hagas te traera lo que necesites.
Sigo sin saber si estoy perdido.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 16-10-2013
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Exactamente el sql lo que hace es la segunda opcion.

Select * form articulos WHERE codigo = Edit1.text

Disculpa, lo que me quiere decir es que con este tipo de consulta no se puede avanzar ni hacia adelante, ni hacia atrás. De ser así, que me recomendaría.

Gracias
Responder Con Cita
  #11  
Antiguo 16-10-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Puedes hacer esa consulta, pero si quieres ir para adelante o atras deberas intercalarla con la consulta que te traiga todo.
No soy bueno en esto, recuerda que no soy programador, pero me parece que deberia ser asi.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #12  
Antiguo 16-10-2013
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Hola.

Ok, vamos a ver como me va, de todos modos muchas gracias por su tiempo. Muy amable.

Saludos
Responder Con Cita
  #13  
Antiguo 16-10-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Vale, intentalo, si tienes mas dudas veremos a ver si por lo menos las entiendo...
Saludos
__________________
Siempre Novato
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
Como hacer varias consultas sql mcasso Tablas planas 1 15-06-2010 00:41:31
Como Hacer La Siguiente Consulta... rgstuamigo MySQL 2 11-09-2008 22:19:33
Como obtener el registro anterior al ultimo MRang14 SQL 11 07-05-2008 23:48:33
¿como puedo hacer lo siguiente? Jorge Alonzo Varios 2 19-10-2007 20:44:27
El mes siguiente y el anterior dec Trucos 0 01-07-2006 03:03:09


La franja horaria es GMT +2. Ahora son las 14:17:03.


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