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 13-04-2013
giantonti giantonti is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 26
Poder: 0
giantonti Va por buen camino
Wink Consulta Select con if

buen dia foro. estoy haciendo una aplicacion firemonkey con adoquiery, quiero hacer esta consulta antes de abrir un from con showmodal, pero algo esta mal porque no funciona, es decir que me abre el from y me muestra informacion en el grid.
lo que quiero hacer es: un from con un campo edit1.text y el valor que coloque alli debe buscarlo en una tabla y si lo consigue abre el showmodal de lo contrario que salga un mensaje (no lo encontre) y que no habra el fromshowmodal. adjunto sentencia que estoy colocando:

Código Delphi [-]
adoQuery3.Close;
      adoQuery3.Sql.Clear;
      adoQuery3.Sql.Add('Select * From mov');
      adoQuery3.Sql.Add('where cod_cli = '+ADOQuery1rif.asstring+'');
      begin
      While Not Adoquery3.Eof do
      ShowMessage('No se ha incontrado ningun articulo relacionado con el Cliente');
      adoQuery3.Open;
      begin
      Application.CreateForm(TFormSelequipo , FormSelequipo);
      if FormSelequipo.ShowModal = mrOk then
      begin
      ADOQuery1equipo.asstring := ADOQuery3articulo.AsString;
      ADOQuery1serial.AsString := ADOQuery3serial.AsString;
      end
      else
      ShowMessage('No se ha incontrado ningun articulo relacionado con el Cliente');
      end;
      end;
      end;

Agradezco su ayuda
Responder Con Cita
  #2  
Antiguo 13-04-2013
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 giantonti

Proba así:
Código Delphi [-]
    ...
    adoQuery3.Sql.Add('where cod_cli = '+QuotedStr(ADOQuery1rif.asstring));
    ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 13-04-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Está un poco extraño tu código, giantonti, pero intentaré mejorarlo:
Código Delphi [-]
  { Suponiendo que el campo "cod_cli" es alfabético o alfanumérico.  NOTA:
    Esta asignación se encargará de cerrar el conjunto de datos en caso de
    estar abierto por una consulta previa, por lo cual no es necesaria una
    llamada explícita al método Close. }
  adoQuery3.SQL.Text := 'Select * From mov where cod_cli = ' +
    QuotedStr (ADOQuery1rif.AsString));

  adoQuery3.Open;

  If Adoquery3.IsEmpty Then
    ShowMessage ('No se ha "e"ncontrado ning"ú"n art"í"culo relacionado ' +
      'con el "c"liente.')
  Else
  Begin
    Application.CreateForm (TFormSelequipo, FormSelequipo);

    Try
      If FormSelequipo.ShowModal = mrOK Then
      Begin
        // Lo que deba hacer aquí
        ...
        ...
      End;
    Finally  // Nos aseguramos de destruir el objeto FormSelequipo
      FormSelequipo.Free;
    End;
  End;
Saludos.

Al González.

P.D. Veo que ecfisa ya arrojó algo de luz.
Responder Con Cita
  #4  
Antiguo 13-04-2013
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Como te lo sugiere Al es lo más correcto y eficiente ya que el form que quieres crear no es mas que un mero visor de lo que devuelve el Dataset. De esta manera ahorras tiempo y memoria .
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #5  
Antiguo 14-04-2013
giantonti giantonti is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 26
Poder: 0
giantonti Va por buen camino
funciona perfecta la solucion de al gonzalez, sin embargo sucede que cuando ejecuto el select y la condicion cumple con el "if" me muestra todo lo que esta en la tabla y yo quiero que me muestre solo la conulta
Código Delphi [-]
adoQuery3.SQL.Text := 'Select * From mov where cod_cli = '+QuotedStr (ADOQuery1rif.AsString);
Responder Con Cita
  #6  
Antiguo 14-04-2013
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
Cita:
Empezado por giantonti Ver Mensaje
funciona perfecta la solucion de al gonzalez, sin embargo sucede que cuando ejecuto el select y la condicion cumple con el "if" me muestra todo lo que esta en la tabla y yo quiero que me muestre solo la conulta
Código Delphi [-]
adoQuery3.SQL.Text := 'Select * From mov where cod_cli = '+QuotedStr (ADOQuery1rif.AsString);
Hola.

Eso indudablemente sucede por que la propiedad DataSource del TDBGrid no está relacionada con el TDataSource asociado a adoQuery3 (o de estarlo, fué modificada la sentencia SQL que mostras arriba).


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 14-04-2013
giantonti giantonti is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 26
Poder: 0
giantonti Va por buen camino
por un momento lo dude, pero revise todo y creeme el datasource esta con el adoquery
Código Delphi [-]
FormSelequipo.adoQuery1.SQL.Text := 'Select * From mov where cod_cli = '+QuotedStr(ADOQuery1rif.asstring);
    FormSelequipo.adoQuery1.Open;
    //If FormSelequipo.adoQuery1.Eof Then
    If FormSelequipo.adoQuery1.IsEmpty Then
    ShowMessage ('No se ha encontrado ningun articulo relacionado ' +
      'con el cliente.')
  Else
  Begin
    Application.CreateForm (TFormSelequipo, FormSelequipo);
     Try
      If FormSelequipo.ShowModal = mrOK Then
      Begin
        ADOQuery1equipo.asstring := FormSelequipo.adoQuery1articulo.AsString;
       ADOQuery1serial.AsString := FormSelequipo.adoQuery1serial.AsString;
      End;
    Finally  // Nos aseguramos de destruir el objeto FormSelequipo
      FormSelequipo.Free;
    End;
  End;
Responder Con Cita
  #8  
Antiguo 14-04-2013
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.

Pero así pareciera que estas llamando a FormSelequipo.adoQuery1 antes de que esté creado FormSelequipo !!

Si no te lanza una excepción, es que no lo has quitado de [ Proyect -> Options -> Forms -> Auto-create forms ] y por lo tanto si adoQuery3 tiene algún dato, estas creando otra instancia de aquél ...

Si TFormSelequipo esta en Auto-create forms no es necesaria la creación, basta con llamar al método ShowModal.

Particularmente quitaría a FormSelequipo de Auto-create forms y cambiaría mi código por:
Código Delphi [-]
  with TFormSelequipo.Create(Self) do
  try
    adoQuery3.Close;  // (1)
    adoQuery3.SQL.Text := 'Select * From mov where cod_cli = ' +QuotedStr(ADOQuery1rif.asstring); // (2) 
    adoQuery3.Open;
    if adoQuery3.IsEmpty then
      ShowMessage ('No se ha encontrado ningun articulo relacionado con el cliente.')
    else
    begin
      if ShowModal = mrOK then
      begin
         ShowMessage('Aquí las acciones a realizar');
        //...
        //...
      end;
    end;
  finally
    Free;
  end;
Donde:
(1) ADOQuery3 es el TADOQuery que reside en FormSelequipo.
(2) ADOQuery1 es el TADOQuery que reside en el form que invoca al al form anterior.

Saludos.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 14-04-2013 a las 19:38:08.
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 Select ramiro024 Varios 6 27-11-2012 16:10:04
Consulta con un select paladincubano SQL 3 02-05-2011 04:37:11
Problema conuna consulta select...not in (select ...) VRO Firebird e Interbase 2 11-08-2005 08:56:35
Consulta con Sub-select !!! isc_hilda SQL 2 21-05-2004 05:22:05
Select (Consulta) WaRRanT MySQL 3 19-02-2004 15:13:58


La franja horaria es GMT +2. Ahora son las 04:53:45.


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