PDA

Ver la Versión Completa : Consulta vacia


chipsoni
11-02-2006, 16:41:03
Tengo que hacer una consulta y mostrar una entrada en la tabla, tengo esto:

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:

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?:


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:


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.