Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-07-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Arrow SQL con parametros Delphi 7

Que tal a todos, les saludo y agradezco anticipadamente su ayuda, he estado buscando por doquier informacion para una consulta SQL en Delphi 7 la cual no arroja nada. no soy muy diestro en la programacion por lo que podran ver errores en mi codigo.
Var
NCLie : integer; var, string, // ninguno de estos casos ha funcionado.

DataModule1.ADOQuery1.SQL.Clear;
DataModule1.ADOQuery1.SQL.Add('SELECT * FROM CLIENTE WHERE CLAVE LIKE :Nclie');
DataModule1.ADOQuery1.Parameters.ParamValues['NCLie'] := StrToInt(Edit1.Text);
DataModule1.ADOQuery1.ExecSQL;
DataModule1.ADOQuery1.Open;

Posterior a esto en otra form tengo un dbgrid ligado a esta consulta. si cambio el :NClie por un valor numerico funciona y hace la consulta SQL pero si dejo el parametro no hace nada y el dbgrid en blanco.
He cambiado intentado el Query1. con varias opciones pero no funciona.


Gracias nuevamente y espero haber sido lo mas claro posible
Responder Con Cita
  #2  
Antiguo 23-07-2014
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
1. La instrucción DataModule1.ADOQuery1.ExecSQL está demás. ExecSQL o sus equivalentes en otros dataset se utilizan cuando la consulta no devuelve un conjunto de resultados, por ejemplo en una instrucción Update o Delete.

2. El operador SQL LIKE, en la mayoría de los motores de bases de datos, requiere que el segundo operando (en este caso NCli) sea de tipo alfanumérico, por lo que es posible que tu código trabaje bien de la siguiente manera:

Código Delphi [-]
  DataModule1.ADOQuery1.SQL.Clear;
  DataModule1.ADOQuery1.SQL.Add('SELECT * FROM CLIENTE WHERE CLAVE LIKE :Nclie');
  DataModule1.ADOQuery1.Parameters.ParamValues['NCLie'] := Edit1.Text;  //No convetimos a integer 
  // No se requiere esta instrucción: DataModule1.ADOQuery1.ExecSQL;
  DataModule1.ADOQuery1.Open;

Espero te sirva.
Responder Con Cita
  #3  
Antiguo 23-07-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Gracias por tu aportación, intente lo que me has recomendado y obtengo el mismo resultado. Pondre el código completo. Quizas ahí este el error y no lo note.
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
NClie : integer;
begin
If Edit1.Text <>'' Then
Begin
Try
NClie := StrToInt(Edit1.Text);
DataModule1.ADOQuery1.SQL.Clear;
ShowMessage('El valor de la variable es:'+' '+IntToStr(NClie)); <---- Agregue esta ventana para ver el valor que lleva NCLie y es correcto
A) DataModule1.ADOQuery1.SQL.Add('SELECT * FROM CLIENTE WHERE CLAVE=:NClie'); <---- En esta parte le cambie el LIKE por el WHERE
B) DataModule1.ADOQuery1.SQL.Add('SELECT * FROM CLIENTE WHERE CLAVE LIKE :Nclie'); <---- El DBGrid esta vacio con LIKE o WHERE
DataModule1.ADOQuery1.Parameters.ParamValues['NCLie'] := Edit1.Text;;
DataModule1.ADOQuery1.Open;
Form2 := TForm2.Create(Self);
Form2.ShowModal;
Except
ShowMessage('Lo siento no puedo abrir la base de datos');
End
End
Else
end;

Gracias por su atención
Responder Con Cita
  #4  
Antiguo 23-07-2014
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
Como diría Casimiro...

Recuerda poner los tags al código fuente, ejemplo:



Gracias
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #5  
Antiguo 23-07-2014
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
Lo primero: ¿Clave es numérico o alfanumérico?.

El LIKE no me cuadra mucho siendo numérico, la verdad. Yo dejaría la consulta A).

Por otra arte, en la asignación te has hecho un lío, creo. Usas una variable que se llama igual que el parámetro que no te sirve para nada, y aunque fuera el parámetro, el valor lo compruebas antes de asignarle un valor...

Bueno, mira a ver si ésto te sirve:
Código Delphi [-]
begin
   If Edit1.Text <>'' Then
   Begin
      Try         
         DataModule1.ADOQuery1.SQL.Clear;         
         DataModule1.ADOQuery1.SQL.Add('SELECT * FROM CLIENTE WHERE CLAVE=:NClie'); 
         DataModule1.ADOQuery1.Parameters.ParamValues['NCLie'].AsInteger := StrToInt(Edit1.Text);
         DataModule1.ADOQuery1.Open;
         Form2 := TForm2.Create(Self);
         Form2.ShowModal;
      Except
         ShowMessage('Lo siento no puedo abrir la base de datos');
      End
   End
   Else
   End;
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #6  
Antiguo 24-07-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Que tal, buen dia de nuevo por aqui. gracias a su ayuda y comentarios que me han hecho; les comento que le busque de una forma de otra y nada no arroja informacion en DBGrid. en ocasiones daba errores, cambie los campos de consulta y nada. Para entonces de buscar y buscar siempre en la misma tabla decidi cambiar a otra, la sorpresa fue que la consulta si se realizaba. Por lo que asumo que es la tabla la que arroja el error.
La estructura de la tabla CLIENTEy en especifico del campo que intente consultar ("CLAVE") es "Texto" y el motor de la BD es MS SQL server 2008 no tengo idea de como realizar esta consulta dado que el campo en especifico no muestra nada en consulta y es precisamente el que requiero para obtener la informacion

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Try
      Begin
        If Edit1.Text<>Null Then
          Begin
            DataModule1.ADOQuery1.Close;
            DataModule1.ADOQuery1.SQL.Clear;
            DataModule1.ADOQuery1.Prepared;
            DataModule1.ADOQuery1.SQL.Add('SELECT * FROM INVENTARIO A WHERE A.CVE_ART=:ID');
            DataModule1.ADOQuery1.Parameters.ParamByName('ID').Value := Edit1.Text;
            DataModule1.ADOQuery1.ParamCheck:=True;
            DataModule1.ADOQuery1.Open;
            Form2 := TForm2.Create(Self);
            Form2.Show;
          End
        Else
      End
    Except
      ShowMessage('Lo siento no pude abrir la base de datos');
    End
End;
Esta es la nueva consulta en la cual he cambiado a la tabla de INVENTARIO y el campo CVE_ART y funciona muy bien pero no es la tabla que requiero consultar.
Alguien que tenga alguna idea?
Saludos
Responder Con Cita
  #7  
Antiguo 24-07-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Que tal, buen dia de nuevo por aqui. gracias a su ayuda y comentarios que me han hecho; les comento que le busque de una forma de otra y nada no arroja informacion en DBGrid. en ocasiones daba errores, cambie los campos de consulta y nada. Para entonces de buscar y buscar siempre en la misma tabla decidi cambiar a otra, la sorpresa fue que la consulta si se realizaba. Por lo que asumo que es la tabla la que arroja el error.
La estructura de la tabla CLIENTE y en especifico del campo que intente consultar ("CLAVE") es "Texto" y el motor de la BD es MS SQL server 2008 no tengo idea de como realizar esta consulta dado que el campo en especifico no muestra nada en consulta y es precisamente el que requiero para obtener la informacion

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   Try
      Begin
        If Edit1.Text<>Null Then
          Begin
            DataModule1.ADOQuery1.Close;
            DataModule1.ADOQuery1.SQL.Clear;
            DataModule1.ADOQuery1.Prepared;
            DataModule1.ADOQuery1.SQL.Add('SELECT * FROM INVENTARIO A WHERE A.CVE_ART=:ID');
            DataModule1.ADOQuery1.Parameters.ParamByName('ID').Value := Edit1.Text;
            DataModule1.ADOQuery1.ParamCheck:=True;
            DataModule1.ADOQuery1.Open;
            Form2 := TForm2.Create(Self);
            Form2.Show;
          End
        Else
      End
    Except
      ShowMessage('Lo siento no pude abrir la base de datos');
    End
End;
Esta es la nueva consulta en la cual he cambiado a la tabla de INVENTARIO y el campo CVE_ART y funciona muy bien pero no es la tabla que requiero consultar.
Alguien que tenga alguna idea?
Saludos
Responder Con Cita
  #8  
Antiguo 24-07-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Nuevamente entro para solicitar de su ayuda como amablemente lo han hecho. en el mensaje anterior les comente que cambiando de tabla se hacia la consulta sin problema. Encontré también que el campo en especifico esta marcado como TEXTO (imagino que string) y de longitud 10. regrese la tabla y campo inicial de la consulta y dado que el tamaño del campo es 10 decidí ingresar en el Edit1 (en ejecución) los espacios correspondientes junto con el numero de cliente por ejemplo 105 lo ingrese como ' 105' (claro sin las comillas) dejando los campos como parte de la cadena a fin de completar los 10 del largo del campo y trabajo ya la consulta. Ahora la pregunta es como recorto en tiempo de ejecución ese molesto espacio espacio espacio espacio,,,, numero para tener los 10 dígitos? si me explico, solo ingresar los dígitos del cliente.

Gracias
Responder Con Cita
  #9  
Antiguo 25-07-2014
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
Si el campo es texto, debería de ir entre comillas. Para ponerle las comillas yo uso la función QuotedStr:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Try
      Begin
        If Edit1.Text<>Null Then
          Begin
            DataModule1.ADOQuery1.Close;
            DataModule1.ADOQuery1.SQL.Clear;
            DataModule1.ADOQuery1.Prepared;
            DataModule1.ADOQuery1.SQL.Add('SELECT * FROM CLIENTE A WHERE A.CLAVE= ' + QuotedStr(Edit1.Text));
            DataModule1.ADOQuery1.ParamCheck:=True;
            DataModule1.ADOQuery1.Open;
            Form2 := TForm2.Create(Self);
            Form2.Show;
          End
        Else
      End
    Except
      ShowMessage('Lo siento no pude abrir la base de datos');
    End
End;
__________________
La Madurez se llama...
~~~Gaia~~~

Última edición por ozsWizzard fecha: 25-07-2014 a las 08:44:32.
Responder Con Cita
  #10  
Antiguo 26-07-2014
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 José.
Cita:
Empezado por Jose Carlos Rey Ver Mensaje
...
Ahora la pregunta es como recorto en tiempo de ejecución ese molesto espacio espacio espacio espacio,,,, numero para tener los 10 dígitos?
...
Si lo que buscas es quitar los espacios que previamente agregaste a la izquierda del texto del TEdit, podes usar la función TrimLeft
Código Delphi [-]
  ...
  Edit1.Text:= TrimLeft(Edit1.Text);
  ...
También te puede resultar interesante revisar las funciones Trim y TrimRight

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 28-07-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Hola que tal, gracias por su atencion y apoyo.
Ecfisa estuve leyendo la informacion de las funciones que mencionas TrimLeft, Trim y TrimRight y me parece que no me ayudan para lo que estoy haciendo.
El campo donde se busca el dato dice que es TEXTO de 10 caracteres. en el Edit1 yo ingreso cualquier numero digase numero de cliente, suspcriptor, empleado, etc. los cuales pueden ser desde 1 - 9999. Hasta aqui no hay problema pero si ingreso tales caracteres simple y sencillamente la consulta no me arroja informacion en el DBGrid. para esto tengo que ingresar (barra espaciadora) espacio, espacio, espacio, espacio, espacio, espacio y 114 por ejemplo para buscar la informacion del registro que tiene ese ID. Las funciones que me comentas sirven para recortar o remover los espacion de la cadena que se ingresa, pero para busqueda se requiere esta cadena a 10 caracteres numericos. Aqui la cuestion seria que alguna funcion ingrese por el usuario los espacios faltantes para completar la cadena de 10 caracteres o digitos. Tomando en cuenta que si el numero a buscar es 9997 por ejemplo tendria que completar con espacio, espacio, espacio, (seis veces) y el numero 997, con esto ya tendria dicha cadena. ' 9997' y lograr la busqueda
Espero haberme hecho entender.
Gracias nuevamente .
Responder Con Cita
  #12  
Antiguo 28-07-2014
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por Jose Carlos Rey Ver Mensaje
Que tal, buen dia de nuevo por aqui. gracias a su ayuda y comentarios que me han hecho; les comento que le busque de una forma de otra y nada no arroja informacion en DBGrid. en ocasiones daba errores, cambie los campos de consulta y nada. Para entonces de buscar y buscar siempre en la misma tabla decidi cambiar a otra, la sorpresa fue que la consulta si se realizaba. Por lo que asumo que es la tabla la que arroja el error.
La estructura de la tabla CLIENTE y en especifico del campo que intente consultar ("CLAVE") es "Texto" y el motor de la BD es MS SQL server 2008 no tengo idea de como realizar esta consulta dado que el campo en especifico no muestra nada en consulta y es precisamente el que requiero para obtener la informacion

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   Try
      Begin
        If Edit1.Text<>Null Then
          Begin
            DataModule1.ADOQuery1.Close;
            DataModule1.ADOQuery1.SQL.Clear;
            DataModule1.ADOQuery1.Prepared;
            DataModule1.ADOQuery1.SQL.Add('SELECT * FROM INVENTARIO A WHERE A.CVE_ART=:ID');
            DataModule1.ADOQuery1.Parameters.ParamByName('ID').Value := Edit1.Text;
            DataModule1.ADOQuery1.ParamCheck:=True;
            DataModule1.ADOQuery1.Open;
            Form2 := TForm2.Create(Self);
            Form2.Show;
          End
        Else
      End
    Except
      ShowMessage('Lo siento no pude abrir la base de datos');
    End
End;
Esta es la nueva consulta en la cual he cambiado a la tabla de INVENTARIO y el campo CVE_ART y funciona muy bien pero no es la tabla que requiero consultar.
Alguien que tenga alguna idea?
Saludos
De entrada, yo tengo dos sugerencias:

1.- ¿Funciona PERFECTAMENTE en MS SQLServer la consulta que quieres hacer? Es decir, si te vas al manejador de SQLServer, abres una ventana de query, tecleas la consulta y la ejecutas, ¿te arroja los resultados que necesitas?

2.- No consignas qué versión de MS SQLServer utilizas, pero en la 2002 y 2008 R2 hay un error que hace que los parámetros que envías a una consulta NO SE 'TRADUZCAN' ADECUADAMENTE dentro del motor, y para ésto DEBES necesariamente "armar" tu consulta en modo texto respetando los tipos de columna de la(s) tabla(s).

3.- ¿Limpias tu TADOQuery después de ejecutarlo? ¿Eliminas los parámetros? También puede ser 'algo' que se quede pendiente...

Creo que con ésto podrías resolver ésta duda. Si no, buscaremos otra posible solución.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #13  
Antiguo 28-07-2014
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 Jose.
Cita:
Empezado por Jose Carlos Rey Ver Mensaje
...
Aqui la cuestion seria que alguna funcion ingrese por el usuario los espacios faltantes para completar la cadena de 10 caracteres o digitos. Tomando en cuenta que si el numero a buscar es 9997 por ejemplo tendria que completar con espacio, espacio, espacio, (seis veces) y el numero 997, con esto ya tendria dicha cadena. ' 9997' y lograr la busqueda
Espero haberme hecho entender.
Entiendo, lo que buscas no es restaurar la cadena a su estado original sino agregarle la cantidad de espacios necesarias para que tenga una longitud de 10 caracteres.

Código Delphi [-]
function FillLeftSpc(const Str: string; const SpcNo: Integer): string;
begin
  Result:= StringOfChar(' ', SpcNo-Length(Str)) + Str;
end;

Ejemplo de uso:
Código Delphi [-]
  Edit1.Text:= FillLeftSpc(Edit1.Text, 10);

Aunque no entiendo el por que de ese requisito previo para que se presenten los resultados de la consulta...


Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 28-07-2014 a las 20:08:42.
Responder Con Cita
  #14  
Antiguo 28-07-2014
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Jose Carlos Rey Ver Mensaje
Nuevamente entro para solicitar de su ayuda como amablemente lo han hecho. en el mensaje anterior les comente que cambiando de tabla se hacia la consulta sin problema. Encontré también que el campo en especifico esta marcado como TEXTO (imagino que string) y de longitud 10. regrese la tabla y campo inicial de la consulta y dado que el tamaño del campo es 10 decidí ingresar en el Edit1 (en ejecución) los espacios correspondientes junto con el numero de cliente por ejemplo 105 lo ingrese como ' 105' (claro sin las comillas) dejando los campos como parte de la cadena a fin de completar los 10 del largo del campo y trabajo ya la consulta. Ahora la pregunta es como recorto en tiempo de ejecución ese molesto espacio espacio espacio espacio,,,, numero para tener los 10 dígitos? si me explico, solo ingresar los dígitos del cliente.
Habría que ver primero porqué un campo cuyos valores son numéricos está definido como texto.

Una alternativa a la que te ofrece ecfisa podría ser la función LTRIM de SQL Server:

Código Delphi [-]
DataModule1.ADOQuery1.SQL.Add('SELECT * FROM INVENTARIO A WHERE LTRIM(A.CVE_ART)=:ID');

Es decir, en lugar de llenar los espacios faltantes en el valor del parámetro, quitamos los espacios sobrantes del valor del campo.

// Saludos
Responder Con Cita
  #15  
Antiguo 29-07-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Tiammat gracias por tus comentarios; a los cuales agrego que el motor es SQL Server 2008 y la consulta directamente en consola trabaja sin problema. Este se origina en el armado de la cadena a buscar la cual debe tener los 10 caracteres para poder realizar dicha busqueda en el programa que estoy desarrollando.

Roman gracias por tu aportacion, con LTRIM(A.CVE_ART) ha funcionado de manera correcta, sin estar agregando los espacios manualmente.

Ecfisa yo tampoco entiendo el porque de tener un campo TEXTO cuando su informacion es numerica, pero asi esta este programa comercial.

Seguire desarrollando este programita y no dudo pueda salir alguna duda extra y de la cual no dejare de informarles ya que el programa comercialmente no da las opciones de reportes que se necesitan y por lo cual estoy en este proyecto personal para explotar toda la info que se tiene en la BD.

Nuevamente agradezco a todos los que han aportado directa e indirectamente.
Responder Con Cita
  #16  
Antiguo 31-07-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Buen día, nuevamente saludándoles y buscando su propuestas. continuo con el programa y como es de esperar nuevas dudas. Ahora mi pregunta seria como hacer que entre en un ciclo While y salga con el click del BitBtn2 y que borre la información que trae el parámetro. Ya que si ingreso otro numero de cliente; en el grid se presenta la información de la ultima consulta. Por lo que hay que cerrar el programa y volver a ejecutarlo. les muestro el código actual y el cual funciona muy bien gracias a sus aportes.

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
    Try
      Begin
        If Edit1.Text<>Null Then
          Begin
            DataModule1 := TDataModule1.Create(Self);
            DataModule1.ADOQuery1.Close;
            DataModule1.ADOQuery1.SQL.Clear;
            DataModule1.ADOQuery1.Prepared;
            DataModule1.ADOQuery1.SQL.Add('SELECT a.CVE_CLPV,b.NOMBRE,a.TIP_DOC,a.STATUS,a.CVE_DOC,a.FECHA_DOC,c.CVE_ART AS CLAVE_SAE,e.DESCR AS DESCRIPCION,c.CANT AS PIEZAS,a.NUM_ALMA AS ALMACEN_ORIGEN,c.PREC AS PRECIO,c.TOT_PARTIDA AS TOTAL_PARTIDA,');
            DataModule1.ADOQuery1.SQL.Add('(c.PREC*c.CANT*c.DESC1)/100 AS DESCUENTO_20,');  //DESCUENTO DE 20%
            DataModule1.ADOQuery1.SQL.Add('((c.TOT_PARTIDA-((c.TOT_PARTIDA*c.DESC1)/100))*c.DESC2)/100 AS DESCUENTO_5,'); //DESCUENTO DE 5%
            DataModule1.ADOQuery1.SQL.Add('(((((c.PREC*c.CANT)-(c.PREC*c.CANT*c.DESC2)/100)*c.DESC2)/100)*c.DESC3)/100 AS DESCUENTO_3,'); //DESCUENTO VARIABLE
            DataModule1.ADOQuery1.SQL.Add('(((c.PREC*c.CANT*c.DESC1)/100)+(((c.TOT_PARTIDA-((c.TOT_PARTIDA*c.DESC1)/100))*c.DESC2)/100)) AS SUMA_DESC,'); //SUMA DE DESCUENTOS
            DataModule1.ADOQuery1.SQL.Add('((c.PREC*c.CANT)-((((c.PREC*c.CANT*c.DESC1)/100)+(((c.TOT_PARTIDA-((c.TOT_PARTIDA*c.DESC1)/100))*c.DESC2)/100)))) AS SUBTOTAL,'); //SUBTOTAL TOTAL PARTIDA := SUMA DE DESCUENTOS
            DataModule1.ADOQuery1.SQL.Add('((c.PREC*c.CANT)-((((c.PREC*c.CANT*c.DESC1)/100)+(((c.TOT_PARTIDA-((c.TOT_PARTIDA*c.DESC1)/100))*c.DESC2)/100))))*.16,'); //IVA A PARTIR DEL SUBTOTAL
            DataModule1.ADOQuery1.SQL.Add('((c.PREC*c.CANT)-((((c.PREC*c.CANT*c.DESC1)/100)+(((c.TOT_PARTIDA-((c.TOT_PARTIDA*c.DESC1)/100))*c.DESC2)/100))))+(((c.PREC*c.CANT)-((((c.PREC*c.CANT*c.DESC1)/100)+(((c.TOT_PARTIDA-((c.TOT_PARTIDA*c.DESC1)/100))*c.DESC2)/100))))*.16) AS TOTAL,');  //TOTAL DE FACTURACION
            DataModule1.ADOQuery1.SQL.Add('a.METODODEPAGO AS FORMA_DE_PAGO,a.CVE_VEND AS No_VENDEDOR,d.NOMBRE AS VENDEDOR,a.TIP_DOC_ANT AS DOCUMENTO_ANT,');
            DataModule1.ADOQuery1.SQL.Add('a.DOC_ANT AS FOLIO_DOC_ANT,a.TIP_DOC_SIG AS DOCUMENTO_SIG,a.DOC_SIG AS FOLIO_DOC_SIG');
            DataModule1.ADOQuery1.SQL.Add('FROM FACTF02 a');
            DataModule1.ADOQuery1.SQL.Add('INNER JOIN CLIE02 b');
            DataModule1.ADOQuery1.SQL.Add('ON a.CVE_CLPV=b.CLAVE');
            DataModule1.ADOQuery1.SQL.Add('INNER JOIN PAR_FACTF02 c');
            DataModule1.ADOQuery1.SQL.Add('ON a.CVE_DOC=c.CVE_DOC');
            DataModule1.ADOQuery1.SQL.Add('INNER JOIN VEND02 d');
            DataModule1.ADOQuery1.SQL.Add('ON a.CVE_VEND=d.CVE_VEND');
            DataModule1.ADOQuery1.SQL.Add('INNER JOIN INVE02 e');
            DataModule1.ADOQuery1.SQL.Add('ON c.CVE_ART=e.CVE_ART');
            DataModule1.ADOQuery1.SQL.Add('WHERE LTRIM(a.CVE_CLPV)='+QuotedStr(Edit1.Text));
            DataModule1.ADOQuery1.ParamCheck:=True;
            DataModule1.ADOQuery1.Open;
            Form2 := TForm2.Create(Self);
            Form2.Showmodal;
            Form1.Edit1.Clear;
            Form1.Edit1.Text:='';
            Form1.Edit1.SetFocus;
          End
        Else
        ShowMessage('Ingresa el Cliente por favor');
      End
    Except
      ShowMessage('Lo siento no pude abrir la base de datos');
    End
End;

Me despido agradeciendo sus comentarios
Responder Con Cita
  #17  
Antiguo 31-07-2014
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por Jose Carlos Rey Ver Mensaje
Buen día, nuevamente saludándoles y buscando su propuestas. continuo con el programa y como es de esperar nuevas dudas. Ahora mi pregunta seria como hacer que entre en un ciclo While y salga con el click del BitBtn2 y que borre la información que trae el parámetro. Ya que si ingreso otro numero de cliente; en el grid se presenta la información de la ultima consulta. Por lo que hay que cerrar el programa y volver a ejecutarlo. les muestro el código actual y el cual funciona muy bien gracias a sus aportes...
Entrar al ciclo while... do es simple, te posicionas al tope de tu TADOQuery y lo recorres con un TADOQuery.Next. Obviamente, la condición del while sería "not EOF()"...

No es necesario cerrar el programa, sino cuando presiones el TBitBttn2, cierras el TADOQuery, limpias el SQL (ésto borrará automáticamente los parámetros), añades un nuevo SQL y sus respectivos parámetros para ejecutar la consulta nuevamente.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #18  
Antiguo 31-07-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Jose Carlos Rey Ver Mensaje
nuevas dudas. Ahora mi pregunta seria
¡¡¡Preguntas distintas en hilos distintos!!!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Estructuras de parametros en delphi jularaXD Varios 9 11-03-2014 15:54:25
Parametros en ReportBuilder 14 Delphi XE2 papycool Impresión 0 19-09-2013 23:25:12
Problema con parametros en Delphi for .Net lalosan SQL 3 27-02-2007 23:01:02
Parametros Delphi 2006 raorre OOP 3 28-07-2006 19:18:58


La franja horaria es GMT +2. Ahora son las 21:02:09.


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