by fridgar » Wed Dec 15, 2021 2:01 pm
// Prueba de REDEFINE GET con array
// 12/2021
// Fridgar
#include "Fivewin.ch"
static oDlg, oDbf, aCamposName
//----------------------------------------------------------------------------//
function MiPrueba()
local oFont, oSay
local oBtnPrev, oBtnNext, oBtnExit, oBtn2
local cTypes := "CNLDM"
SET _3DLOOK ON
*SELECT 1
USE C:\xPruebas\Dbf\Probar2 ALIAS xProbar2
select xProbar2
DATABASE oDbf
oDbf:GoTop()
* Estos son los campos del .DBF de prueba y el .RC es un formulario sencillo de prueba hecho con PelleC
* Una Prueba
aCamposName := {{oDbf:Cedula, 110, "Número de la cédula de identidad"}, ;
{oDbf:Nombres, 120, "Nombres de la persona"}, ;
{oDbf:Entero, 130, "Número entero"}, ;
{oDbf:Moneda, 140, "Número con decimales"}, ;
{oDbf:Fecha, 150, "Fecha"}, ;
{oDbf:Fecha_Hora, 160, "Fecha y hora"}, ;
{oDbf:L1, 170, "Campo lógico L1"}, ;
{oDbf:L2, 180, "Campo lógico L2"},
{oDbf:Memo, 190, "Campo Memo"} }
*/
/* Otra Prueba
aCamposName := {{"Cedula", 110, "Número de la cédula de identidad"}, ;
{"Nombres", 120, "Nombres de la persona"}, ;
{"Entero", 130, "Número entero"}, ;
{"Moneda", 140, "Número con decimales"}, ;
{"Fecha", 150, "Fecha"}, ;
{"Fecha_Hora", 160, "Fecha y hora"}, ;
{"L1", 170, "Campo lógico L1"}, ;
{"L2", 180, "Campo lógico L2"}
{oDbf:Memo, 190, "Campo Memo"} }
*/
define font oFont name "times new roman" size 11,20
DEFINE DIALOG oDlg RESOURCE "PROBAR2" TITLE "Programa de practica con tablas .DBF"
oDlg:lHelpIcon:=.f.
REDEFINE SAY oSay ID 4004 OF oDlg // Para ver el numero de registro
REDEFINE BUTTON oBtnPrev ID 4002 OF oDlg ;
ACTION ( oDbf:Skip( -1 ), oSay:SetText("Rec = "+str(recno())), oDlg:UpDate())
REDEFINE BUTTON oBtnNext ID 4003 OF oDlg ;
ACTION ( oDbf:Skip(), oSay:SetText("Rec = "+str(recno())), oDlg:UpDate())
REDEFINE BUTTON oBtnExit Id 4001 of oDlg ; // aContols 9
Prompt "&Salir" ;
ACTION (oDlg:End())
ACTIVATE DIALOG oDlg on init (MisGEts( oDlg, oDbf, aCamposName )) // Una prueba
*ACTIVATE DIALOG oDlg on init (MisGEts( )) // Otra prueba
close all
return nil
//----------------------------------------------------------------------------//
*function MisGEts( ) // Otra prueba
function MisGEts( oDlg, oDbf, aCamposName ) // Una prueba
Local i
Local oMsg1, oGets:={}
local IDGet := 100 // temporal
DEFINE MSGBAR oMsg1 OF oDlg 2007
/*
*REDEFINE GET oDbf:Apellidos ID 100 OF oDlg MESSAGE "Apellidos de la persona" UpDate
* Asi funciona bien pero me gusta como sigue en las lineas siguiente
* Asi es como deberia de funcionar para no se por no muestra el contenido de los campos del .DBF
*i:=0
*do while i <= len(aCamposName) -1
* i++
* REDEFINE GET aCamposName[i,1] ID aCamposName[i,2] OF oDlg MESSAGE aCamposName[i,3] UPDATE //Error BASE/1132 Bound error: array access
* Falla: Mustra el .RC pero No muestra la información de los campos en el Formulario
*Enddo
*/
i:=0
do while i <= len(aCamposName) -1
* Una Prueba
*IDGet = IDGet + 10
*a = field(i)
* Directo con los campos del .DBF ( a = Field( i ) )
*REDEFINE GET &a ID IDGet OF oDlg MESSAGE aCamposName[i,3] UPDATE
* Falla: Solo funciona con campo de caracteres, pero asi no deberia de ser
* Otra Prueba
* Directo con los campos del .DBF (oDbf:Campo)
*? aCamposName[i,1] // aCamposName[i,1]=Al valor o contenido del campo Ejm. Ada
*REDEFINE GET aCamposName[i,1] ID aCamposName[i,2] OF oDlg MESSAGE aCamposName[i,3] UPDATE //Error BASE/1132 Bound error: array access
* Falla: Mustra el .RC pero No muestra la información de los campos en el Formulario
* Otra Prueba
* Colocando los nombre de los campos del .DBF entre comillas ("cedula")
*a := xProbar2->( Field( FieldPos( aCamposName[i,1] ) ) )
*REDEFINE GET a ID aCamposName[i,2] OF oDlg MESSAGE aCamposName[i,3] UPDATE // Nada
*REDEFINE GET &a ID aCamposName[i,2] OF oDlg MESSAGE aCamposName[i,3] UPDATE // Nada
* Falla: No muestra la información en el Formulario
* He realizados otras pruebas y nada aun, no se que estoy heciendo mal o que no estoy haciendo
* Sin alguien ya lo hizo y me puede ayudar en esto se lo agradeceria
* Por supuesto tomando en cuenta los diferentes tipos de datos de la tabla .DBF
* NO se trabaja todavia que SQL por eso uso .DBF
* Creo que me explique bien, pero igual pido disculpa si no lo hice
* MUCHAS GRACIAS A TODOS
enddo
oDbf:GoTop()
oDbf:Load() // reload again fields info from the DBF
oDlg:Update() // we repaint the controls contains
return nil
//----------------------------------------------------------------------------//