Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta vacia (https://www.clubdelphi.com/foros/showthread.php?t=30213)

chipsoni 11-02-2006 16:41:03

Consulta vacia
 
Tengo que hacer una consulta y mostrar una entrada en la tabla, tengo esto:
Código Delphi [-]
with Query do
  begin
   with SQL do
     begin
       DataModule.tdemanda.close;
       Clear;
       Datamodule.tdemanda.open;
       Add('Select * from tdemanda');
       Add('where codigo= :codigo');
       ParamByName('codigo').Astring:= StrToInt(codigo.Text);
       Open;
     end;
  end;

With Query1 do
  begin
    if (DataModule.tdemanda['ttipo_demanda'].FieldValue=1) then
       with SQL do
          begin
......
Bien, me peta en ejecución, en la linea del if, con el error 'Invalid variant operation', ademas de no saber pque he hecho mal, necesito sacar un mensaje si el codigo introducido en el Edit 'codigo', no existe en la tabla.

¿Alguien me puede ayudar?

jhonny 11-02-2006 16:46:59

Hola, promero que todo es pedirte el favor de que uses las etiquetas Delphi.

Y ahora para responder a tu pregunta:

Deberias intentar esto:

Código Delphi [-]
With Query1 do
begin
   if (DataModule.tdemanda.FieldByName('ttipo_demanda').Value=1) then
   with SQL do
   begin
      ...

Espero te sirva ;)

chipsoni 11-02-2006 17:12:40

Muchas gracias por responder, pero me da exactamente el mismo error y en la misma linea que con value, que con FieldValues, ¿alguna otra idea?.

No entiendo que quieres decir con lo de pedirme el favor de que use las etiquetas delphi.

jhonny 11-02-2006 17:20:09

Y asi?:

Código Delphi [-]
With Query1 do
begin
   if (DataModule.tdemanda.FieldByName('ttipo_demanda').AsInteger=1) then
   with SQL do
   begin
      ...

Espero que esta vez si :D

chipsoni 11-02-2006 17:21:48

Perdón, ahora no me da ese error, me he confundido, me da un error de violacion en el acceso a una direccion del modulo ejecutable.

jhonny 11-02-2006 17:24:57

Ahh, bueno, y para lo del si el codigo no existe en la tabla seria asi:

Código Delphi [-]
with Query do
begin
   with SQL do
   begin
      DataModule.tdemanda.close;
      Clear;
      Datamodule.tdemanda.open;
      Add('Select * from tdemanda');
      Add('where codigo= :codigo');
      ParamByName('codigo').Astring:= StrToInt(codigo.Text);
      Open;
      if RecordCount = 0 then
      begin
          raise exception.create('El codigo no existe');
      end;
   end;
end;

jhonny 11-02-2006 17:32:31

Bueno, el error de acces violation puede ser por varios motivos uno de ellos podria ser que:

1. Que quiza el DataModule no este cargado, para saber si es eso puede verificar que al presionar Shift+Ctrl+F11 en la pestaña Forms y en su ListBox que tiene como titulo Auto-create forms se encuentre el datamodulo llamado DataModule.

2. Quiza el TQuery o tabla o lo que sea llamado tdemanda ya no exista en tiempo de ejecucion.

chipsoni 11-02-2006 18:45:11

El datamodule si esta cargado, porque juto antes de meter el codigo me logeo en el programa y esa otra tabla de usuarios y contraseñas, por lo que acceso al datamodule tiene.

Respecto a que la tabla tdemanda no exista en tiempo de ejecución, ¿porque no va a existir si la tusuario por ejemplo si existe?.

jhonny 11-02-2006 18:56:18

Bueno, lo que te quiero decir es que quiza en el AfterOpen o BeforeOpen o que se yo haya algo como tdemanda.free por ejemplo.

Pero total un acces violation es muy complicado detectarlo asi no mas, tendria que hacer el seguimiento con el debug del delphi y sacar conclusiones con todo el conocimiento que tu mismo tienes de tu aplicación. La verdad es que aparte de las dos cosas que ya te mencione no se me ocurre nada da mas del porque del acces violation.


La franja horaria es GMT +2. Ahora son las 09:10:41.

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