Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

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


La franja horaria es GMT +2. Ahora son las 06:36:32.


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