Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-10-2005
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Como capturar el resultado de una consulta SQL

Hola, estoy trabajando con D6 y empiezo con Oracle 9i + componentes ODAC. Mi pregunta es como trasladar el restultado de la siguiente consulta SQL a una variable para mostrarla en pantalla, lo que quiero es ver en pantalla el nº de registros de una tabla:

Código:
   fdm.OraSQL_liq.SQL.Clear;
   fdm.OraSQL_liq.SQL.Text := 'select count(*) from desarrollo.personal';
   fdm.OraSQL_liq.execute;
   
   numreg.value:= ??????
Nota: El componente que utilizo en la consulta, no devuelve filas.

Gracias y un saludo a todos.
Jose Manuel
Responder Con Cita
  #2  
Antiguo 09-10-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por Jose Manuel
Nota: El componente que utilizo en la consulta, no devuelve filas.
Cual es la tabla en cuestion??? desarrollo o personal?
Prueba con:
Código Delphi [-]
fdm.OraSQL_liq.SQL.Clear;
   fdm.OraSQL_liq.SQL.Text := 'select count(*) as Total from desarrollo';
   fdm.OraSQL_liq.execute;
   
   numreg.value:=fdm.OraSQL_liq.FieldByName('Total').AsInteger;
//Como son componentes que desconozco, no estoy seguro si la captura del campo sea así 
Suerte
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #3  
Antiguo 11-10-2005
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Gracias por tú respuesta, pero creo que estoy haciendo algo mal, pues me da un error:

La tabla que utilizo tiene 50 campos, y los 4 primeros son:

Código:
//    tbPerA_BAJA:        TStringField;
//    tbPerC_NUM_OFICINA: TStringField;
//    tbPerN_NUM_YEAR:    TStringField;
//    tbPerN_NUM_ORDEN:   TIntegerField;

La instrucción para obtener el nº de registros es la siguiente:
Código:
   fdm.tbPer.SQL.Clear;
   fdm.tbPer.SQL.Text := 'select count(*) AS a_baja from personal';
   fdm.tbPer.execute;
   registros.value:=   fdm.tbPer.fieldbyname('a_baja').AsString;
El error que me da es el siguiente:
Código:
ERROR: TbLiq: Type mismatch for field 'A_BAJA', expecting:String  actual:Float
Si cambio de campo, para evitar contar sobre un campo String, me dice que campo no encontrado, pues siempre intenta sumar sobre el primer campo.
Responder Con Cita
  #4  
Antiguo 11-10-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Error te dice que no es el dataset tbPer que da problema, es el TbLiq. Chequea bien!!
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #5  
Antiguo 11-10-2005
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Perdon, ha sido un error de escritura.

Código:
Donde dije: ERROR: TbLiq: Type mismatch for field 'A_BAJA', expecting:String  actual:Float
Código:
Quise decir:  ERROR: TbPer: Type mismatch for field 'A_BAJA', expecting:String  actual:Float
Es que he hecho pruebas con varias tablas, y al escribir el error he confundido las tablas.

Esta consulta es correcta, y al realizarla a través del "Enterprise Manager Console ORACLE", me muestra correctamente el número de registros, el problema es al pasar el resultado a una variable en Delphi.

Código:
 
   fdm.tbPer.SQL.Clear;
   fdm.tbPer.SQL.Text := 'select count(*) AS a_baja from personal';
   fdm.tbPer.execute;
Responder Con Cita
  #6  
Antiguo 12-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
no estoy seguro con Oracle, pero:

fdm.tbPer.execute;

debería ser fdm.tbPer.Open;

Una vez abierta, simplemente lees el valor que tiene el único de la consulta:
Código Delphi [-]
var n:integer;
begin
....
fdm.tbPer.Open;
n := fdm.tbPer.Fields[0].asinteger;

saludos
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


La franja horaria es GMT +2. Ahora son las 16:11:43.


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