Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-06-2014
luisarturop luisarturop is offline
Registrado
NULL
 
Registrado: feb 2011
Posts: 4
Poder: 0
luisarturop Va por buen camino
Error en RXMemoryData com Delphi XE5

Saludos a todos,

Tengo una aplicación de funciona correctamente en Delphi 7 y estoy migrando a Delphi XE5, y con esto de la instalación de los nuevos componentes, me he topado con un error que probablemente es un BUG de los nuevos componentes que me descargue... He buscado en todos los foros, Google, etc. y no he conseguido algo que me pueda ayudar.

Los componentes son los RXLib para Delphi XE5 y el objeto que me esta dando problemas es el RXMemoryData, el error que me ocurre lo explico en el siguiente código:

Código Delphi [-]
RxMemoryData1.Open; 
RxMemoryData1.Append; 
RxMemoryData1CampoNombre.Value := 'Prueba'; 
RxMemoryData1.Post;

Este código me funciona perfectamente en Delphi 7, pero estos componentes RXLib en Delphi XE5 al correr paso a paso me voy cuenta que el valor "Prueba" no es asignado al "CampoNombre" de la tabla RXMemoryData. La unica diferencia que veo pueda estar afectando, es que el RXMemoryData utiliza los tipos de dato AnsiString en vez de String.
He probado realizando lo siguiente:

Código Delphi [-]
var Nombre : AnsiString; 
begin 
Nombre := 'Prueba'; 
RxMemoryData1.Open; 
RxMemoryData1.Append; 
RxMemoryData1CampoNombre.Value := Nombre ; 
RxMemoryData1.Post; 
end;


Código Delphi [-]
var Nombre : AnsiString; 
begin 
Nombre := 'Prueba'; 
RxMemoryData1.Open; 
RxMemoryData1.Append; 
RxMemoryData1.FieldbyName('CampoNombre').AsString := Nombre ; 
RxMemoryData1.Post; 
end;


entre otras pruebas y no logro hacer que el campo que cree en el RXMemoryData le sea asignado el valor correspondiente.

Muchas Gracias,

Espero me puedan ayudar.

Saludos.

Última edición por Casimiro Noteví fecha: 25-06-2014 a las 13:45:27.
Responder Con Cita
  #2  
Antiguo 25-06-2014
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
¿Sale algún mensaje de error?
Responder Con Cita
  #3  
Antiguo 25-06-2014
luisarturop luisarturop is offline
Registrado
NULL
 
Registrado: feb 2011
Posts: 4
Poder: 0
luisarturop Va por buen camino
No, simplemente al correr paso a paso me doy cuenta de que el valor no le es asignado al campo creado en el RXMemoryData, revise las propiedades de éste, comparado con el de delphi 7 y estan idénticas. El codigo original de delphi 7 utiliza mas campos pero el comportamiento es el mismo y tal como lo reproduje en el ejemplo que coloque en el Hilo.
Responder Con Cita
  #4  
Antiguo 25-06-2014
luisarturop luisarturop is offline
Registrado
NULL
 
Registrado: feb 2011
Posts: 4
Poder: 0
luisarturop Va por buen camino
Reproduciendo el error nuevamente hice lo siguiente:

Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, RxMemDS, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    RxMemoryData1: TRxMemoryData;
    RxMemoryData1Nombre: TStringField;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  RxMemoryData1.Open;
  // Ingreso el primer registro
  RxMemoryData1.Append;
  RxMemoryData1Nombre.Value := 'Luis';
  RxMemoryData1.Post;
  // Ingreso el segundo registro
  RxMemoryData1.Append;
  RxMemoryData1Nombre.Value := 'Arturo';
  RxMemoryData1.Post;
  RxMemoryData1.First;
  while not RxMemoryData1.Eof do
  begin
    Memo1.Lines.Add(RxMemoryData1Nombre.Value);
    RxMemoryData1.Next;
  end;
  RxMemoryData1.Close;
end;

end.

Ingrese 2 registros al RXMemoryData, y al preguntar la propiedad recordcount me dice que hay 2 registros, pero al recorrer con el "while", el campo: "RxMemoryData1Nombre.Value" aparece vacio.
El "FieldKind" del campo "Nombre" ingresado en el RXMemoryData es "fkData". Probe tambien colocandolo como: "fkCalculated" y nada, de ninguna forma almacena el valor, solo ingresa el registro en blanco.

¿Que podrá ser? De verdad no tengo ni idea... Asumo que pueda ser un BUG de estos nuevos componentes RXLib, el problema es que en la aplicación que estoy migrando hay muchos procesos que utilizan este componente RXMemoryData y cambiar esas rutinas es inicialmente Impensable...
Responder Con Cita
  #5  
Antiguo 25-06-2014
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 24
Manuel Va por buen camino
Intentar con esto

A mi me paso lo mismo con una campo de esas características, lo que hice fue borrar los campos de la tabla de memoria y crearlos nuevamente, prueba con eso.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #6  
Antiguo 25-06-2014
luisarturop luisarturop is offline
Registrado
NULL
 
Registrado: feb 2011
Posts: 4
Poder: 0
luisarturop Va por buen camino
Nueva Solución encontrada...

Nada Manuel,

El error persiste, continué investigando y encontré aqui en ClubDelphi que al parecer este error se ha venido presentando desde la versión de RXLib de Delphi XE.
Ya encontré una solución alterna, la planteo por si alguien se le presenta el mismo inconveniente.
En mi caso el RXMemoryData no lo conecto a una Tabla en BD ya que lo utilizo para la revisión de un proceso. La solución es la siguiente:
En vez de utilizar un RXMemoryData, utilice un TClientDataSet, obligatoriamente debo asociarle un TDataSetProvider y a este DataSetProvider es necesario asociarle un DataSet (ó Tabla en BD), por esto le asocie el RXMemoryData original. Una vez hecho esto puedo realizar lo siguiente en código Delphi:

Código Delphi [-]

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, RxMemDS, Vcl.StdCtrls,
  Datasnap.DBClient, Datasnap.Provider, ZAbstractRODataset, ZAbstractDataset,
  ZAbstractTable, ZDataset;

type
  TForm1 = class(TForm)
    Button1: TButton;
    RxMemoryData1: TRxMemoryData;
    RxMemoryData1Nombre: TStringField;
    Memo1: TMemo;
    ClientDataSet1: TClientDataSet;
    ClientDataSet1Nombre: TStringField;
    DataSetProvider1: TDataSetProvider;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientDataSet1.Open;
  // Ingreso el primer registro
  ClientDataSet1.Append;
  ClientDataSet1Nombre.Value := 'Luis';
  ClientDataSet1.Post;
  // Ingreso el segundo registro
  ClientDataSet1.Append;
  ClientDataSet1Nombre.Value := 'Zolibel';
  ClientDataSet1.Post;
  // Ingreso el tercer registro
  ClientDataSet1.Append;
  ClientDataSet1Nombre.Value := 'Arturo';
  ClientDataSet1.Post;
  // Ingreso el cuarto registro
  ClientDataSet1.Append;
  ClientDataSet1Nombre.Value := 'Juan';
  ClientDataSet1.Post;

  // Si deseo filtrar algun dato lo hago tipo SQL de la siguiente manera:
  ClientDataSet1.Filter := 'Nombre='+QuotedStr('Zolibel')+' or Nombre='+QuotedStr('Juan');
  ClientDataSet1.Filtered := True;

  // Si deseo Ordenar los datos por algún Campo lo hago de la siguiente manera
  ClientDataSet1.IndexFieldNames := 'Nombre';

  ClientDataSet1.First;
  while not ClientDataSet1.Eof do
  begin
    Memo1.Lines.Add(ClientDataSet1Nombre.Value);
    ClientDataSet1.Next;
  end;
  ClientDataSet1.Close;
end;

end.

Es algo rebuscado, pero a mí me funciona por los momentos. Espero a alguien lo pueda sacar de apuros también.

Muchas Gracias,

Saludos
Responder Con Cita
  #7  
Antiguo 25-06-2014
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 24
Manuel Va por buen camino
Se agradece mucho tu aporte.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Filtrar RxMemoryData marilinspi Varios 6 03-10-2013 23:54:35
Borrar FieldDefs de un RxmemoryData marilinspi Varios 2 17-11-2010 13:37:15
RxMemoryData y SQL Carmelo Cash OOP 5 28-07-2008 16:30:03
Problema con Filter en RxMemoryData agustibaldo Tablas planas 4 09-02-2007 16:04:10
Rave y RxMemoryData altp Impresión 0 16-06-2004 18:04:43


La franja horaria es GMT +2. Ahora son las 20:16:29.


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
Copyright 1996-2007 Club Delphi