Diferencia entre revisiones de «TprxADOQuerySelect»

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
 
(No se muestran 9 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
<!--
Í<!--
[[Category:DELPHI]]
[[Category:DELPHI]]
[[Category:DELPHI/DATASETS]]
[[Category:DELPHI/DATASETS]]
Línea 12: Línea 12:
*Carpeta: C:\DevelopPrx\library
*Carpeta: C:\DevelopPrx\library
*Archivo: prxADOQuerySelect.pas
*Archivo: prxADOQuerySelect.pas
(Ver [https://docwiki.embarcadero.com/Libraries/Sydney/en/Data.Win.ADODB.TADOQuery TADOQuery]).


==Declaración==
==Declaración==
Línea 122: Línea 124:


===procedure FirstRecord(Sender: TObject)===
===procedure FirstRecord(Sender: TObject)===
Llama al procedimiento nativo del dataset llamado '''First''' que lleva el cursor de los datos al primer registro. Se define como un evento para poder asignarse directamente al OnClick de un botón.
Llama al procedimiento nativo '''First''' del dataset que lleva el cursor de los datos al primer registro, se define como un evento para poder asignarse directamente al OnClick de un botón.


===procedure PriorRecord(Sender: TObject)===
===procedure PriorRecord(Sender: TObject)===
Llama al procedimiento nativo del dataset llamado '''Prior''' que lleva el cursor de los datos al registro anterior al activo. Se define como un evento para poder asignarse directamente al OnClick de un botón.
Llama al procedimiento nativo '''Prior''' del dataset que lleva el cursor de los datos al registro anterior al activo, se define como un evento para poder asignarse directamente al OnClick de un botón.


===procedure NextRecord(Sender: TObject)===
===procedure NextRecord(Sender: TObject)===
Llama al procedimiento nativo del dataset llamado '''Next''' que lleva el cursor de los datos al registro siguiente al activo. Se define como un evento para poder asignarse directamente al OnClick de un botón.
Llama al procedimiento nativo '''Next''' del dataset que lleva el cursor de los datos al registro siguiente al activo, se define como un evento para poder asignarse directamente al OnClick de un botón.


===procedure LastRecord(Sender: TObject)===
===procedure LastRecord(Sender: TObject)===
Llama al procedimiento nativo del dataset llamado '''Last''' que lleva el cursor de los datos al último registro. Se define como un evento para poder asignarse directamente al OnClick de un botón.
Llama al procedimiento nativo '''Last''' del dataset que lleva el cursor de los datos al último registro, se define como un evento para poder asignarse directamente al OnClick de un botón.


===function Select(aSQLCommand: String; aSilent: Boolean = False): Boolean===
===function Select(aSQLCommand: String; aSilent: Boolean = False): Boolean===
Ejecuta una sentencia SELECT usando:
Ejecuta una sentencia SELECT usando:
*aSQLCommand es el comando SQL a ejecutar como un string.
*aSQLCommand es el comando SQL a ejecutar como un string.
*aSilent cuando se setea a 0 el componente dará un error si algo falla, cuando se setea a 1 el mensaje de error no será visible, pero se informará al componente que llamó a la función para que lo procese.
*aSilent cuando se setea a 0 el componente dará un error si algo falla, cuando se setea a 1 el mensaje de error no será visible pero se informará al componente que llamó a la función para que lo procese.


Retorna True si pudo ejecutar la sentencia, False sino.
Retorna True si pudo ejecutar la sentencia, False sino.
Línea 147: Línea 149:
===function Select(aStrings: TStrings; aSilent: Boolean = False): Boolean===
===function Select(aStrings: TStrings; aSilent: Boolean = False): Boolean===
Similar anterior, pero recibe una lista de strings que componen el comando SQL.
Similar anterior, pero recibe una lista de strings que componen el comando SQL.
Ejemplo del comando:
<pre>
SELECT
FCODIGO
, FDESCRIPCION
FROM CUENTA
</pre>


===function SelectRecordCount(aSQLCommand: String; aSilent: Boolean = False): Integer===
===function SelectRecordCount(aSQLCommand: String; aSilent: Boolean = False): Integer===
Ejecuta una sentencia SELECT y retorna la cantidad de registros, usa:
Ejecuta una sentencia SELECT y retorna la cantidad de registros, usa:
*aSQLCommand es el comando SQL a ejecutar como un string.
*aSQLCommand es el comando SQL a ejecutar como un string.
*aSilent cuando se setea a 0 el componente dará un error si algo falla, cuando se setea a 1 el mensaje de error no será visible, pero se informará al componente que llamó a la función para que lo procese.
*aSilent cuando se setea a 0 el componente dará un error si algo falla, cuando se setea a 1 el mensaje de error no será visible pero se informará al componente que llamó a la función para que lo procese.


===function SelectRecordCount(aStrings: TStrings; aSilent: Boolean = False): Integer===
===function SelectRecordCount(aStrings: TStrings; aSilent: Boolean = False): Integer===
Línea 187: Línea 197:
</pre>
</pre>


Ejemplo del comando:
===function Refresh(aSilent: Boolean = False): Boolean===
<pre>
Esta función vuelve a ejecutar el último comando SELECT conocido refrescando el resultado, el último comando ejecutado se encuentra en la propiedad nativa '''SQL'''
SELECT
 
FCODIGO
===procedure VerSentenciaClickAdd(Sender: TprxPopupMenu)===
, FDESCRIPCION
Agrega la opción "Ver sentencia SQL..." a un menú:
FROM CUENTA
[[Archivo:20250515 1605 VER SENTENCIA.png|miniaturadeimagen|no|Opción para ver sentencia SQL en un menú.]]
</pre>
 
Si la opción es elegida entonces llama a la siguiente función.
 
===procedure VerSentenciaClick(Sender: TObject)===
Abre el form [[TTfvsShowOnMemoForm]] y muestra la última sentencia usada en el componente, por ejemplo:
[[Archivo:20250515 1609 VER SENTENCIA MEMO.png|miniaturadeimagen|no|Memo con la sentencia SQL.]]


La última sentencia ejecutada se encuentra en la propiedad nativa '''SQL'''


===procedure Traducir===
Traduce la propiedad '''DisplayLabel''' de cada columna usando el lenguaje asociado al usuario. Esta propiedad corresponde al título de cada columna (o sea, nombre del campo).


=Uso=
=Uso=
Este componente se usa en algunos casos instanciado como TprxADOQuerySelect, pero más que nada como ancestro de [[TprxADOQuery]] y de [[TprxADOQueryDetail]].
<!--
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************


<!--
== Propiedades ==
== Propiedades ==
Se describen las funciones de visibilidad '''public''' o '''published'''. Las funciones con visibilidad más baja solo sirven como propiedades físicas para las descriptas abajo.
Se describen las funciones de visibilidad '''public''' o '''published'''. Las funciones con visibilidad más baja solo sirven como propiedades físicas para las descriptas abajo.

Revisión actual - 21:59 15 may 2025

Í

Introducción

El objeto TprxADOQuerySelect (Query con funcionalidad básica.) implementa funcionalidad básica para simplificar el código relacionado con las operaciones de base de datos.

Identidad

  • Ancestro: TADOQuery
  • Carpeta: C:\DevelopPrx\library
  • Archivo: prxADOQuerySelect.pas

(Ver TADOQuery).

Declaración

type
  TprxADOQuerySelect = class(TADOQuery)
  private
    FAutoFindConnection: Boolean;
    FSQLX: TStringList;
    FMensajeError: String;
    Ffvs: Boolean;
    FSilentError: Boolean;
    FMasterDataSet: TDataSet;
    Ffbn_parser_object: Tfva_parser_fbn;

    FGUID: String;
  protected
    function    FindConnection: Boolean;

    procedure   Traducir;
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
    procedure   Loaded; override;

    procedure   FirstRecord(Sender: TObject);
    procedure   PriorRecord(Sender: TObject);
    procedure   NextRecord(Sender: TObject);
    procedure   LastRecord(Sender: TObject);

    function    DatabaseExists(aBaseDatos: String): Boolean;
    function    TableExists(aTabla: String): Boolean;

    function    Select(aSQLCommand: String; aSilent: Boolean = False): Boolean; overload;
    function    Select(aStrings: TStrings; aSilent: Boolean = False): Boolean; overload;

    function    SelectRecordCount(aSQLCommand: String; aSilent: Boolean = False): Integer; overload;
    function    SelectRecordCount(aStrings: TStrings; aSilent: Boolean = False): Integer; overload;

    function    SelectFieldValue(aSQLCommand: String; aFieldName: String): Variant; overload;
    function    SelectFieldValue(aStrings: TStrings; aFieldName: String): Variant; overload;

    procedure   SelectToList(aComando: String; aCampo: String; aLista: TStrings);

    function    Refresh(aSilent: Boolean = False): Boolean;

    procedure   VerSentenciaClickAdd(Sender: TprxPopupMenu);
    procedure   VerSentenciaClick(Sender: TObject);

    property    SilentError: Boolean read FSilentError write FSilentError;
    property    SQLX: TStringList read FSQLX write FSQLX;
    property    MensajeError: String read FMensajeError write FMensajeError;
    property    fvs: Boolean read Ffvs write Ffvs;

    property    MasterDataSet: TDataSet read FMasterDataSet write FMasterDataSet;

    property    fbn_parser_object: Tfva_parser_fbn read Ffbn_parser_object;

    property    GUID: String read FGUID;
  published
    property    ppAutoFindConnection: Boolean read FAutoFindConnection write FAutoFindConnection;
  end;

FAutoFindConnection: Boolean

El sentido de esta propiedad era indicar si el dataset debía encontrar automáticamente la conexión a la base de datos, pero finalmente ese es el comportamiento por defecto por lo que esta propiedad está OSBSOLETA y debería eliminarse.

FMasterDataSet: TDataSet

En el frame TTfvsDBClientFrameGridConsultas que administra las Consultas existen dos datasets:

  • Uno que administra los argumentos de la consulta.
  • Otro que retorna el resultado.

La propiedad FMasterDataSet del dataset que administra el resultado se setea con el valor del dataset que maneja los argumentos, solo para el caso de usarse el comando FBN que toma valores de campos de un dataset.

Ffbn_parser_object: Tfva_parser_fbn

Es el componente encargado de traducir usando los Lenguajes, el componente es Tfva_parser_fbn.

FGUID: String

Cada vez que se instancia el componente toma un GUID / UUID que sirve como un identificador único, no puede haber dos componentes con el mismo código.

Este GUID se usa en DEV AUXILIARES/SELECCION CRITERIOS.

Implementación

constructor Create(AOwner: TComponent)

Los componentes ADO de acceso a datos tienen una propiedad llamada CommandTimeout que indica la cantidad de segundos que tiene un determinado componente para completar una operación, si la misma se excede de ese tiempo la aplicación dará un error de timeout. En este caso está seteada a 360 segundos = 6 minutos.

constructor TprxADOQuerySelect.Create(AOwner: TComponent);
var
  vGuid: TGUID;
begin
  inherited Create(AOwner);

  if csDesigning in ComponentState = False then
     begin
     FSQLX              := TStringList.Create;
     CommandTimeout     := 360;
     Ffbn_parser_object := Tfva_parser_fbn.Create(Self);

     // Toma GUID...

     CreateGUID(vGuid);
     FGUID := GUIDToString(vGuid);
     end;
end;

function FindConnection: Boolean

Busca entre los componentes de la aplicación hasta encontrar uno que sea de tipo TprxADOConnection y tenga la propiedad ppMainConnection = True.

procedure FirstRecord(Sender: TObject)

Llama al procedimiento nativo First del dataset que lleva el cursor de los datos al primer registro, se define como un evento para poder asignarse directamente al OnClick de un botón.

procedure PriorRecord(Sender: TObject)

Llama al procedimiento nativo Prior del dataset que lleva el cursor de los datos al registro anterior al activo, se define como un evento para poder asignarse directamente al OnClick de un botón.

procedure NextRecord(Sender: TObject)

Llama al procedimiento nativo Next del dataset que lleva el cursor de los datos al registro siguiente al activo, se define como un evento para poder asignarse directamente al OnClick de un botón.

procedure LastRecord(Sender: TObject)

Llama al procedimiento nativo Last del dataset que lleva el cursor de los datos al último registro, se define como un evento para poder asignarse directamente al OnClick de un botón.

function Select(aSQLCommand: String; aSilent: Boolean = False): Boolean

Ejecuta una sentencia SELECT usando:

  • aSQLCommand es el comando SQL a ejecutar como un string.
  • aSilent cuando se setea a 0 el componente dará un error si algo falla, cuando se setea a 1 el mensaje de error no será visible pero se informará al componente que llamó a la función para que lo procese.

Retorna True si pudo ejecutar la sentencia, False sino.

Ejemplo del comando:

SELECT FCODIGO, FDESCRIPCION FROM CUENTA

function Select(aStrings: TStrings; aSilent: Boolean = False): Boolean

Similar anterior, pero recibe una lista de strings que componen el comando SQL.

Ejemplo del comando:

SELECT 
FCODIGO
, FDESCRIPCION 
FROM CUENTA

function SelectRecordCount(aSQLCommand: String; aSilent: Boolean = False): Integer

Ejecuta una sentencia SELECT y retorna la cantidad de registros, usa:

  • aSQLCommand es el comando SQL a ejecutar como un string.
  • aSilent cuando se setea a 0 el componente dará un error si algo falla, cuando se setea a 1 el mensaje de error no será visible pero se informará al componente que llamó a la función para que lo procese.

function SelectRecordCount(aStrings: TStrings; aSilent: Boolean = False): Integer

Similar anterior, pero usa una lista de strings para el comando.

function SelectFieldValue(aSQLCommand: String; aFieldName: String): Variant

Dado un comando SQL aSQLCommand, lo ejecuta y retorna el valor del campo aFieldName.

El valor de retorno es Variant indicando que puede ser cualquier cosa:

  • Un string.
  • Un número.
  • Una fecha.
  • Etc.

function SelectFieldValue(aStrings: TStrings; aFieldName: String): Variant

Similar anterior pero recibe una lista de strings que componen el comando.

procedure SelectToList(aComando: String; aCampo: String; aLista: TStrings)

Ejecuta el comando aComando y retorna el valor del campo aCampo para cada registro en una lista TStrings.

Por ejemplo, la sentencia:

SELECT TOP 4 * FROM CUENTA ORDER BY FCODIGO

Que retorna:

Resultado del query.

Llamado para el campo FCODIGO guardaría los siguientes valores en la lista:

11101001
11101002
11101003
11101004

function Refresh(aSilent: Boolean = False): Boolean

Esta función vuelve a ejecutar el último comando SELECT conocido refrescando el resultado, el último comando ejecutado se encuentra en la propiedad nativa SQL

procedure VerSentenciaClickAdd(Sender: TprxPopupMenu)

Agrega la opción "Ver sentencia SQL..." a un menú:

Opción para ver sentencia SQL en un menú.

Si la opción es elegida entonces llama a la siguiente función.

procedure VerSentenciaClick(Sender: TObject)

Abre el form TTfvsShowOnMemoForm y muestra la última sentencia usada en el componente, por ejemplo:

Memo con la sentencia SQL.

La última sentencia ejecutada se encuentra en la propiedad nativa SQL

procedure Traducir

Traduce la propiedad DisplayLabel de cada columna usando el lenguaje asociado al usuario. Esta propiedad corresponde al título de cada columna (o sea, nombre del campo).

Uso

Este componente se usa en algunos casos instanciado como TprxADOQuerySelect, pero más que nada como ancestro de TprxADOQuery y de TprxADOQueryDetail.