Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problemas select en Oracle (https://www.clubdelphi.com/foros/showthread.php?t=12086)

mateamargo 05-07-2004 17:39:34

Problemas select en Oracle
 
Tengo un componte TQUERY (conectado por ODBC con ORACLE)
en el cual hago :
Código:

query1.sql.add('select * from tabla where fecha >= :fechaini and fecha <= :fechafin ');
query1.parambyname('fechaini').asdatetime := fechainicio;
query1.parambyname('fechafin').asdatetime := fechafinal;
query1.open;

Me da un mensaje de error 'operacion no permitida'.
si hago lo mismo pero sin los parametros de fecha funciona correctamente.
Desde ya muchas gracias.

delphi.com.ar 05-07-2004 17:44:36

¿Tenes la base de datos abierta y conectada al DataSet?
¿Limpias el SQL antes de hacer el Add?

vic_ia 05-07-2004 17:52:52

hola...
Cita:

Empezado por mateamargo
Código:

query1.sql.add('select * from tabla where fecha >= :fechaini and fecha <= :fechafin ');
query1.parambyname('fechaini').asdatetime := fechainicio;
query1.parambyname('fechafin').asdatetime := fechafinal;
query1.open;

Me da un mensaje de error 'operacion no permitida'.

me parece que tu error podria ser en donde tienes el where... por que no pones cada sentencia de comparación entre parentesis, por que, al menos a mi me ha sucedido con otros motores y los querys que el orden en que compara, toma primero el "and" antes de las comparaciones, es decir, sugiero lo pongas de esta forma....
Código:

query1.sql.add('select * from tabla where (fecha >= :fechaini) and (fecha <= :fechafin) ');
espero te sirva...

saludos...

mateamargo 05-07-2004 18:51:48

Problemas select en Oracle
 
Hola,
Gracias por tu respuesta.
Asi como tu me decis fue como yo lo hice y no funciona, es mas en el hilo original aclare que si no pongo como parametros las fechas o sea algo como esto
Código:

query1.close;
query1.sql.add('select * from tabla where campo1= :parametro1');
query1.parambyname('parametro1').asinteger := numero;
query1.open;

Desde ya muchas gracias.

delphi.com.ar 05-07-2004 18:53:42

El error es un ORA-XXXX????

¿Revisaste que el query este enlazado y la base conectada?

ruina 05-07-2004 19:12:40

mira a ver si asignandole el tipo al parametro antes....

Query.ParamByName('fechaini').DataType:=ftDate
ó
Query.ParamByName('fechaini').DataType:=ftDateTime


es que no tengo ningun oracle por aqui cerca para probar....

delphi.com.ar 05-07-2004 19:18:25

Cita:

Empezado por ruina
mira a ver si asignandole el tipo al parametro antes....

Query.ParamByName('fechaini').DataType:=ftDate
ó
Query.ParamByName('fechaini').DataType:=ftDateTime


es que no tengo ningun oracle por aqui cerca para probar....

Cuando utilizas Parametro.AsTipo, puedes prescindir de asignar manualment el tipo de parámetro.

Código Delphi [-]
procedure TParam.SetAsDateTime(const Value: TDateTime);
begin
  FDataType := ftDateTime;
  Self.Value := Value
end;

Bagy 07-07-2004 03:10:02

Según yo es porque te falta un prepare, esto para que se incialicen los parametros que estas definiendo dentro de tu query, si no quieres utilizar esta instrucción tienes que crear los parametros. Ejemplos

--Prepare
query1.close;
query1.sql.add('select * from tabla where campo1= :parametro1')
query1.prepare;
query1.parambyname('parametro1').asinteger := numero;
query1.open;

-- Creación de parametro
query1.close;
query1.sql.add('select * from tabla where campo1= :parametro1')
Query1.Params.CreateParam(ftdate,'fecha1',ptinput);//o algo asi
query1.parambyname('parametro1').asinteger := numero;
query1.open;



-- Otra opcion
En el componente tquery, en la propiedad SQL, escribe tu query que deseas
ejecutar después en la propiedad params deben de aparecerte tus parametros
que definiste com :parametro y ahi le indicas el DataType y el ParamType.
Espero te ayude !!!

delphi.com.ar 07-07-2004 16:19:24

Los parámetros se crean dinámicamente al asignar el SQL, por otro lado si no haces el prepare tendras una merma en la performance si ejecutas repetidamente el SQL, pero no por eso dejará de funcionar.

Mateamargo... ¿Lo has solucionado?... ¿Puedes responder a alguna de mis preguntas?
Cita:

Empezado por delphi.com.ar
¿Tenes la base de datos abierta y conectada al DataSet?
¿Limpias el SQL antes de hacer el Add?
El error es un ORA-XXXX????


mateamargo 07-07-2004 22:08:33

Hola,
En realidad el select lo hago en la propiedad sql del componente.
Estoy conectado a la base y puedo ejecutar cualquier otra consulta sin parametros.
El mensaje de error que me da es :
"Operation not applicable"
Desde ya muchas gracias.

delphi.com.ar 07-07-2004 22:21:43

Cita:

Empezado por mateamargo
...El mensaje de error que me da es: "Operation not applicable"...

Si el mensaje tiene el formato: Prefijo-Número: Mensaje..., donde el prefijo mas normal es ORA referente a "Generic Oracle Server Errors", se trata de errores de Oracle. Tu error me da la impresión que se trata de un problema de conexión...

Saludos!

mateamargo 08-07-2004 14:42:51

Hola,
Gracias por tu respuesta.
Pero si es un error de conexión no me debería dar error para todos los sql que hago a dicha base ?
Hago unos cuantos de la forma
Código:

select * from tabla
Y funcionan perfectamente.
Desde ya muchas gracias

^TxTeZ^ 08-07-2004 16:03:59

a lo mejor es una chorrada lo que digo, pero ¿has probado con un Beetwen?


La franja horaria es GMT +2. Ahora son las 03:04:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi