Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Componente TSQLQuery del DBExpress (https://www.clubdelphi.com/foros/showthread.php?t=81045)

novato_erick 04-10-2012 22:25:13

Componente TSQLQuery del DBExpress
 
Hola Chicos como están?

Trabajando un poco con el componente TSQLQuery del DBXpress a una base de datos de Firebird quise hacer lo siguiente:

en mi TSQLQuery llamdo qConsultaFechaAgenda en la propiedad string tengo lo siguiente:

Código SQL [-]
SELECT FECHA, id_empleado FROM AGENDA WHERE Fecha =:pFecha and id_empleado =:pId_empleado

Cuando Abre el formulario principal lo que deseo es solamente me muestre las actividades de la agenda de quien ingreso previamente guardado en dos tablas llamada Agenda y Recordatorio. así que en el evento OnShow tengo lo siguiente:

Código Delphi [-]
procedure TfrmPrincipal.FormShow(Sender: TObject);
begin
  dmConecta.qConsultaFechaAgenda.Close;
  dmConecta.qConsultaFechaAgenda.Params.ParamByName('pFecha').AsDate := Now;
  dmConecta.qConsultaFechaAgenda.Params.ParamByName('pID_EMPLEADO').AsInteger := IdEmpleado;
  dmConecta.qConsultaFechaAgenda.ExecSQL(False);
  dmConecta.qConsultaFechaAgenda.Open;
  if dmConecta.qConsultaFechaAgenda.RecordCount >= 1  then
  begin
    frmPrincipal.LblActividades.Caption := 'Usted Actualmente tiene Actividades';
  end
  else
    begin
    frmPrincipal.LblActividades.Caption := 'Usted No tiene Actividades';
    end;
end;

Pero lo bonito es que me envía este mensaje: [0x0005]: Operation Not Supported.

Estoy usando mal el componente?


Saludos


novato_erick

ecfisa 05-10-2012 02:11:56

Hola novato_erick.

La propiedad RecordCount no es fiable en todos los componentes, proba de este modo:
Código Delphi [-]
  with dmConecta.qConsultaFechaAgenda do
  begin
    Close;
    Params.ParamByName('pFecha').AsDate := Now;
    Params.ParamByName('pID_EMPLEADO').AsInteger := IdEmpleado;
    ExecSQL(False);
    Open;
    if IsEmpty then
      frmPrincipal.LblActividades.Caption := 'Usted No tiene Actividades'
    else
      frmPrincipal.LblActividades.Caption := 'Usted Actualmente tiene Actividades';
  end;

Saludos.

Caminante 05-10-2012 02:15:59

Me parece que la llamada a ExecSQL sale sobrando

ecfisa 05-10-2012 02:22:06

Cita:

Empezado por Caminante (Mensaje 446407)
Me parece que la llamda a ExecSQL sale sobrando

Tenés toda la razón... copié, pegué y no me percaté (me salió en versito :D )

Pero aún con la inútil llamada a ExecSQL :o el código funciona, ese error es producido por el uso de RecordCount.

Saludos :)

novato_erick 05-10-2012 17:32:02

ecfisa
Como Siempre Gracias... me tenia hecho un royo la propiedad recordCount ya que por lo general siempre espero en el código un resultado y se se realiza ejecuto. Pero bueno mas experiencia gracias a ustedes.

Cita:

Caminante:
Me parece que la llamda a ExecSQL sale sobrando
La costumbre de poner el ExecSQL. Aun no tengo la suficiente experiencia para saber cuando se podría usar o cuando no es necesario.

De todas manera Gracias Chicos.


Saludos


novato_erick

Al González 05-10-2012 18:21:35

Cita:

Empezado por novato_erick (Mensaje 446442)
La costumbre de poner el ExecSQL. Aun no tengo la suficiente experiencia para saber cuando se podría usar o cuando no es necesario.

No tiene vuelta de hoja: Open es para consultas que regresan un cursor, es decir, "selects". Mientras que ExecSQL, como dicen los manuales que salen con el menú Help de Delphi:

Cita:

Executes a query that does not return a set of records.

[Ejecuta una consulta que no devuelve un conjunto de registros]


Call ExecSQL to execute an SQL command that does not return a set of records. This command is a query other than a SELECT query, such as an INSERT, UPDATE, DELETE, or CREATE TABLE query.

[Llame a ExecSQL para ejecutar un comando SQL que no devuelve un conjunto de registros. Este comando es una consulta que no sea Select, tal como Insert, Update, Delete o Create Table]


Note: Do not use ExecSQL for commands such as SELECT queries that return data. When the command returns data, use the Open method or set the Active property to true.

[Nota: No utilice ExecSQL para comandos como consultas Select que devuelven datos. Cuando el comando devuelva datos, use el método Open o ponga la propiedad Active en True.]
Un abrazo selectivo y ejecutado. :)

novato_erick 05-10-2012 18:56:06

Gracias [Al González] Ahora si entiendo...Estaba algo mecanizado..


Saludos y nuevamente muchísimas gracias a todos realmente.

Al González 05-10-2012 20:11:08

Voy a ver si puedo desbracketear mi nombre...:p

...¡Ay mamá! No encuentro la opción. :o


La franja horaria es GMT +2. Ahora son las 12:57:35.

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