Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Comparar DBEdit con un campo (https://www.clubdelphi.com/foros/showthread.php?t=83772)

DOS 26-07-2013 05:37:36

Comparar DBEdit con un campo
 
Hola a todos, resulta que tengo un formulario en donde muestro datos de una tabla a traves de un DBGrid y DBEdit por cada campo, que utilizo para cargar los datos y me muevo con un navegador. Ahora puse un boton para realizar un QReport (en otro formulario), la idea es que cuando mando a imprimir el reporte solo me muestre los datos relativos a la clave principal que esta seleccionada en el DBEdit.
Intente con el siguiente codigo del boton imprimir, se muestra otra opcion tambien en la misma //.
Código Delphi [-]
procedure TForm6.SpeedButton1Click(Sender: TObject);
//Var
// a:integer;
begin
//a:=strtoint(DBEdit1.Text);

  with Form26.Query1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM propietario');
    SQL.Add('WHERE Cod_prop = : (DBEdit1.text)'); //Deberia comparar elcodigo de la tabla con el que muestra el DBEdit
   // SQL.Add('WHERE Cod_prop = : a');
    Open;
    end;
Form26.QuickRep1.Preview; // Previsualizar los resultados.
end;
Es como para imprimir una ficha, solo necesito los datos del propietario seleccionado, ambas codificaciones no funcionaron, no creo estar muy lejos.
Tengo Delphi7 y las tablas estan hechas en Paradox (si ya se no coment)
Gracias.

Casimiro Notevi 26-07-2013 10:46:29

No se entiende (yo no lo entiendo) lo que dices, ni el problema, ni lo que estás haciendo, ni lo que quieres :confused:

ecfisa 26-07-2013 14:26:53

Hola DOS.

Yo tampoco entiendo la explicación del problema, pero si tenes el código tál cuál lo mostras en el mensaje no te va a funcionar.

Debería ser algo como:
Código Delphi [-]
  with Form26.Query1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM PROPIETARIO');
    SQL.Add('WHERE COD_PROP = :PVALOR');
    ParamByName('PVALOR').AsString := DBEdit1.Text;
    Open;
  end;

Saludos :)

Casimiro Notevi 26-07-2013 14:39:02

Vaya, cuando yo vi el mensaje no había código alguno, debo estar más cegato de lo que pensaba :)

ecfisa 26-07-2013 15:02:23

Cita:

Empezado por Casimiro Notevi (Mensaje 464543)
...debo estar más cegato de lo que pensaba :)

No lo creo :), con toda seguridad lo haya agregado luego de tu respuesta...

Saludos :)

Caminante 26-07-2013 17:07:13

El DBEdit1 a que dataset esta ligado?? porque si es al mismo query tampoco va a funcionar ya que cierras el dataset para asignar el SQL. En tal caso primero guardaria el valor en una variable.

Código Delphi [-]
var
 Valor:string;
begin
with Form26.Query1 do
  begin
    Valor:=DBEdit1.Text;
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM PROPIETARIO');
    SQL.Add('WHERE COD_PROP = :PVALOR');
    ParamByName('PVALOR').AsString := Valor;
    Open;
  end;
end;

Espero te sirva.

Saludos

ecfisa 26-07-2013 17:41:13

Hola Caminante.
Cita:

Empezado por Caminante (Mensaje 464549)
El DBEdit1 a que dataset esta ligado?? porque si es al mismo query tampoco va a funcionar ya que cierras el dataset para asignar el SQL.
...

Si, eso es totalmente acertado.

Del primer mensaje creí entender que el DBEdit está relacionado con la tabla mediante un DataSet, la búsqueda se hace sobre un Query y el resultado se muestra en el DBGrid vinculado a ella.

Pero fué sólo mi apreciación... habrá que ver que nos dice DOS.

Saludos. :)

DOS 27-07-2013 20:44:57

Bueno, muchas gracias por la ayuda y como a todos les queda duda de lo que quiero hacer, tratare de expicarlo mejor y con una imagen que ayuda un poco mas.


En el boton que tiene la impresora esta el codigo que mostre antes, este se muestra en un nuevo formulario que esta detras en la imagen y se puede ver el Query y el Dataset relacionado a este. Donde dice 'codigo' ese es el DBEdit1, asi que tal cual como esta ahora al hacer click en la impresora deberia habrir el reporte mostrando los datos, Apellido, Nombre, Direccion, Telefono y email que se encuentran en la misma tabla 'propietario', espero que ahora se entienda mejor, ya probe las modificaciones y no funcionaron, muchas gracias.

Casimiro Notevi 27-07-2013 22:54:09

Yo no me entero :(

DOS 28-07-2013 00:47:18

Casimiro, trato de explicar de la mejor manera que puedo dentro de mis conocimientos, me ayudaria mucho saber que debo informar o decirles como esta hecho, para que lo entiendan mejor y asi me puedan ayudar, gracias.

Casimiro Notevi 28-07-2013 00:56:09

O sea, que lo que quieres es que cuando pulses en el botón "Imprimir ficha" se muestre el informe con los datos que has puesto en pantalla para imprimirlo.
¿Y qué problema tienes con ello?, explícalo en detalle.

AzidRain 28-07-2013 01:45:01

El dbEdit olvidalo, solo representa visualmente el valor de la tabla o query que tiene "bindeada". Para lo que quieres hacer solo tienes que consultar que registro es el actual en la tabla o query que está mostrando el dbEdit. Es de pimaria, esto, la tabla ya la tienes abierta, solo consúltala.

DOS 28-07-2013 02:32:40

Cita:

Empezado por Casimiro Notevi (Mensaje 464569)
O sea, que lo que quieres es que cuando pulses en el botón "Imprimir ficha" se muestre el informe con los datos que has puesto en pantalla para imprimirlo.
¿Y qué problema tienes con ello?, explícalo en detalle.

Lo que se ve en la imagen con el siguiente codigo en el boton imprimir
Código Delphi [-]
procedure TForm6.SpeedButton1Click(Sender: TObject);
var
 Valor:string;
begin
with Form26.Query1 do
  begin
    Valor:=DBEdit1.Text;
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM propietario');
    SQL.Add('WHERE Cod_prop = :PVALOR');
    ParamByName('PVALOR').AsString := Valor;
    Open;
  end;
Form26.QuickRep1.Preview; // Previsualizar los resultados.
end;

me tira el siguiente error "Project1.exe raised exception class EDBEngineError with message 'type mismatch in expression.'. Process stopped..." no se cual es el error o que significa esto.

Casimiro Notevi 28-07-2013 10:33:46

¿Y qué valor tiene el "Valor"

DOS 28-07-2013 17:23:34

"Valor" toma de DBEdit1 que es la clave principal, asi compara supongamos; el DBEdit1 figura 601, se le asigna este a Valor,
y mediante la consulta compara la tabla, la clave principal (Cod_prop) debe ser igual a Valor y asi mostrar los datos solamente de ese registro/propietario.

Casimiro Notevi 28-07-2013 17:32:35

Cita:

Empezado por DOS (Mensaje 464573)
me tira el siguiente error "Project1.exe raised exception class EDBEngineError with message 'type mismatch in expression.'. Process stopped..." no se cual es el error o que significa esto.

¿Dónde sale ese error?

DOS 28-07-2013 18:02:17

Cita:

Empezado por Casimiro Notevi (Mensaje 464580)
¿Dónde sale ese error?

Cuando apreto el boton imprimir.
Probe este codigo, reemplazando la clave principal por el apellido que esta en el DBEdit3 y funciona perfectamente haciendo lo que necesito, el asunto es que lo tengo que realizar con la clave principal(DBEdit1) ya que el apellido se puede repetir varias veces
Código Delphi [-]
procedure TForm6.SpeedButton1Click(Sender: TObject);
var
Valor:string;
begin
Valor:=DBEdit3.Text;
with Form26.Query1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM propietario');
    SQL.Add('WHERE ApellidoP = :PValor');
    ParamByName('PVALOR').AsString := 'Valor';
    Open;
  end;
Form26.QuickRep1.Preview; // Previsualizar los resultados.
end;
Sin dudas tiene que ver con el tipo de datos a comparar, Cod_prop es numerico y la variable es txt, se deberia pasar en algun momento a integer o float ¿no?

Caral 28-07-2013 19:00:31

Hola
Código Delphi [-]
procedure TForm6.SpeedButton1Click(Sender: TObject);
var
Valor: Real;
begin
Valor:= StrToFloat(DBEdit1.Text);
with Form26.Query1 do
  begin
    Close;
    SQL.text:= 'SELECT * FROM propietario WHERE Cod_prop = :PVALOR';
    ParamByName('PVALOR').Value := Valor;
    Open;
  end;
Form26.QuickRep1.Preview; // Previsualizar los resultados.
end;
Saludos

ozsWizzard 28-07-2013 19:30:43

Aunque el código de Caral es correcto, yo soy más partidario de poner, cuando se sabe el tipo dato.
Código Delphi [-]
procedure TForm6.SpeedButton1Click(Sender: TObject);
var
Valor: Real;
begin
Valor:= StrToFloat(DBEdit1.Text);
with Form26.Query1 do
  begin
    Close;
    SQL.text:= 'SELECT * FROM propietario WHERE Cod_prop = :PVALOR';
    ParamByName('PVALOR').AsInteger := Valor;
    Open;
  end;
Form26.QuickRep1.Preview; // Previsualizar los resultados.
end;

Si no es entero, asFloat o AsCurrency o lo que sea...

Caral 28-07-2013 19:33:12

Hola
Como siempre; Corrigiendo el código del novato.....:D:D:D
Saludos


La franja horaria es GMT +2. Ahora son las 09:14:13.

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