El misterio de los 200…

enero 26, 2012 en Advertencia, Artículos, Comunidad, Delphi, Enlace interesante, Entrada Diario, FireMonkey, LiveBindings, XE2

Aunque ya he comentado el contenido de esta entrada en el foro de facebook, necesitaba colgar de algún lado las fuentes que había utilizado para revisar el tema y de paso, dar la oportunidad para quien todavía no forme parte del mismo pueda acceder a su contenido, o por lo menos a las cosas que parecen interesantes. Es por esa razón que he acabado añadiéndola.

En este caso concreto, el hilo de comentarios del foro se originaba cuando uno de los compañeros, siguiendo las indicaciones del código publicado en el blog de Jim Tierney, que forma parte de los blogs de Embarcadero,  se extrañaba de que al intentar llenar los items de un componente TListBox (en tiempo de ejecución) desde una fuente de datos (un clientdataset, el numero de items añadidos al TListBox era como máximo igual o menor a 200. Y eso sucedía aun cuando dicha fuente de datos contuviera una cantidad mayor.

Esta es la entrada en la que me he basado para reproducir el problema y comprenderlo.

LiveBindings: Code to create TBindLink and fill a Listbox

Creo que lo mas interesante de estas lineas no es ya la corrección que se ha hecho para solucionar el problema, que solo ha consistido en añadir la linea de asignación en el procedimiento FillList( ) de la unidad UMain.pas

LBindList.BufferCount:= ARecordCount;

sino en destacar el punto que originaba el problema:

constructor TBindScopeDBEnumerator.Create(ABindScope: TCustomBindScopeDB;
  const AMemberName: string; ABufferCount: Integer);
begin
  FBindScope := ABindScope;
  FMemberName := AMemberName;
  FSaveActiveRecord := FBindScope.FDataLink.ActiveRecord;
  FNextRecord := FSaveActiveRecord;
  if ABufferCount > 0 then
    FBindScope.FDataLink.BufferCount := ABufferCount
  else
    FBindScope.FDataLink.BufferCount := 200;  // default to max 200 records in buffer
end;

 Al final, ese era el motivo por el que, no estando definido el valor del campo BufferCount en TBindList, cualquier movimiento hacia adelante de la estructura del enumerador, comprobaba si habia llegado al ultimo registro por lo que aunque existiera una cantida mayor en el dataset, el enlace le indicaba que había llegado al último.

:-)

En fin… cosas de los valores por defecto que supongo que sería fijado por algún motivo, porque de hecho el comentario en la misma linea corrobora que se hizo por alguna razón que ahora mismo ciertamente no comprendo.

Lo mas gracioso de todo es que pienso que esto debería por la forma en que se ha planteado afectar en tiempo de diseño por lo que quizás deberíamos comprobar que al crear una relación TBindList desde el editor de expresiones, en tiempo de diseño, el valor del campo en cuestión es correcto. Podéis hacer la prueba y comentamos en el foro. Para probarlo, simplemente acceded a la propiedad LiveBindings del TListBox y cread un nuevo enlace de tipo TBindList. Y seguidamente definid para la propiedad Format un nuevo item con los valores indicados en la rutina FillList( ). En las pruebas que he hecho, también se reproduce el error.

Tened en cuenta este punto para no caer en el problema.

 

 

unit UMain;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, Data.DB, Data.Win.ADODB,
  Datasnap.DBClient, FMX.Layouts, FMX.ListBox, FMX.Bind.Editors, Data.Bind.Components,
  Data.Bind.DBScope, Datasnap.Provider, Data.Bind.EngExt, Fmx.Bind.DBEngExt;

type
  TfrmFillListBox = class(TForm)
    lbxData: TListBox;
    bnFill: TButton;
    bnClear: TButton;
    cdsData: TClientDataSet;
    Conexion: TADOConnection;
    qData: TADOTable;
    dsData: TDataSource;
    dspData: TDataSetProvider;
    cdsDataOrderNo: TFloatField;
    cdsDataCustNo: TFloatField;
    BindScopeDB1: TBindScopeDB;
    lbRecordCount: TLabel;
    lbItemsCount: TLabel;
    BindingsList1: TBindingsList;
    procedure bnClearClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure bnFillClick(Sender: TObject);
  private
    { Private declarations }
    procedure FillLabelRecordCount;
    procedure FillLabelItemsCount;
  public
    { Public declarations }
  end;

var
  frmFillListBox: TfrmFillListBox;

implementation

{$R *.fmx}

//fuente del procedimiento: http://blogs.embarcadero.com/jimtierney
//         http://blogs.embarcadero.com/jimtierney/2011/10/03/31601
//
//  El procedimiento encapsula los pasos para rellenar distintos
//  tipos de controles, siguiendo lo que haria el usuario en tiempo de
//  diseño. Es util para el tiempo de ejecución
//
procedure FillList(AControl: TComponent; const AControlExpression: string;
  ASource: TBaseBindScopeComponent; const ASourceExpression: string; ARecordCount: Integer; const ASourceMemberName: string = '');
var
  LBindList: TBindList;
begin
  LBindList := TBindList.Create(nil);
  try
    // Turn off auto properties.
    LBindList.AutoFill := False;
    LBindList.AutoActivate := False;
    LBindList.ControlComponent := AControl;
    LBindList.SourceComponent := ASource;
    LBindList.SourceMemberName := ASourceMemberName;
    LBindList.BufferCount:= ARecordCount; //<- Linea añadida
    with LBindList.FormatExpressions.AddExpression do
    begin
      SourceExpression := ASourceExpression;
      ControlExpression := AControlExpression;
    end;
    LBindList.FillList;
  finally
    LBindList.Free;
  end;
end;

procedure TfrmFillListBox.bnClearClick(Sender: TObject);
begin
  lbxData.Clear;
  FillLabelItemsCount;
  FillLabelRecordCount;
end;

procedure TfrmFillListBox.bnFillClick(Sender: TObject);
begin
  FillList(lbxData, 'Text', BindScopeDB1, 'AsString', dsData.DataSet.RecordCount, 'OrderNo', );
  FillLabelItemsCount;
  FillLabelRecordCount;
end;

procedure TfrmFillListBox.FillLabelItemsCount;
begin
  lbItemsCount.Text:=  'Items.Count: '+IntToStr(lbxData.Items.Count);
end;

procedure TfrmFillListBox.FillLabelRecordCount;
begin
  lbRecordCount.Text:=  'RecordCount: '+IntToStr(cdsData.RecordCount);
end;

procedure TfrmFillListBox.FormCreate(Sender: TObject);

begin
  Conexion.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;'+
                              'Data Source=C:\Program Files\Common Files\CodeGear Shared\Data\dbdemos.mdb;'+
                              'Persist Security Info=False';
  cdsData.Open;

  FillLabelItemsCount;
  FillLabelRecordCount;
end;

end.

Nada mas por comentar. Si deseáis ver el ejemplo podéis acceder al siguiente enlace:

Descargar fuentes

Videos demostrativos Firemonkey – Demos (Danysoft)

noviembre 29, 2011 en 64bits, Comunidad, Delphi, Enlace interesante, FireMonkey, Nos deja la semana..., Seminario web, Videos, XE2

 

Con fecha de hoy, Danysoft ha subido a YouTube dos vídeos demostrativos, que sin duda os van a parecer interesantes y es por eso el remarcarlos aquí e incluirlos en esta entrada.

Ambos son parte de la misma sesión: El primero de ellos aborda el tema de Firemonkey desde la perspectiva de Windows, mostrando algunas posibilidades de la plataforma,  como efectos y calidad gráfica propia de los nuevos componentes y del uso de la GPU. El segundo vídeo prosigue la ejecución de la demo en el lado del compilador para Mac, mostrando la ejecución del programa en el simulador de iPhone.

Ya he añadido, igualmente, los enlaces al grupo de Facebook Delphi Solidario, para quienes estáis siguiendo el día a día en él. Gran trabajo el que está haciendo el partner español de Embarcadero, Danysoft, al generar esta colección de recursos que van quedando disponibles para todos nosotros.

Que los disfrutéis.

 

Parte 1.

Rad Studio XE2 | FireMonkey | demo windows

Parte 2.

Rad Studio XE2 | FireMonkey | demo Mac

 

Conversando con Pawel Glowacki

octubre 17, 2011 en Comunidad, Delphi, Entrada Diario, Eventos, FireMonkey, Nos deja la semana..., Presentaciones, Roadmap, XE2

 

Entrevista a Pawel Glowaky de Embarcadero

Foto: Germán Estévez, Pawel Glowacki y Salvador Jover.

Si pulsáis en la imagen, podéis acceder a la entrada del blog de nuestro compañero Germán Estévez, en la que conjuntamente, hemos intentado recoger la breve charla que pudimos mantener con el representante de Embarcadero, Pawel Glowacki, al finalizar el evento de Barcelona. Para nosotros tiene una importancia simbólica, ya que lo valoramos como una muestra del acercamiento de Embarcadero a nuestra Comunidad. Fue una charla distendida y agradable, sin demasiadas pretensiones por nuestra parte, pero creo que al final fue positiva. En la foto, señalábamos lo que parecía más importante, lo que resumía aquella charla: FireMonkey.

Si queréis leer como trancurrió, haced click en la imagen superior. Ir a la entrada.

Por nuestra parte, nos resta únicamente dar las gracias a Danysoft, por toda la ayuda que nos ha dado, que ha hecho mas sencillo preparar las entradas que han servido de resumen del evento.

Una imagen vale más que mil palabras

septiembre 23, 2011 en 64bits, Entrada Diario, Facebook, FireMonkey, Presentaciones, Recordatorio, Seminario web, XE2

No voy a decir nada más. Cualquier cosa que diga siempre hay quien dirá que si este es un fanático de delphi, que si yo que voy a decir, que si…   bla, bla, bla…

:-)

¡Simplemente disfrutad!, perded unos minutos con este vídeo que muestra las nuevas posibilidades que se abren con nuestro entorno de desarrollo. Lo vais a ver por vosotros mismos. ¡A mi no me hace falta entender la narración, para de un simple vistazo saber que vamos por buen camino!.

Estais viendo una de las versiones de Delphi mas comprometidas y ambiciosas de su historia.

Ahhhhhh… y nuestra Comunidad sigue creciendo.  Muchos compañeros estamos luchando por ella, no ya para nuestro beneficio personal, sino para tener un sitio donde hablar, discutir, compartir cosas. Únete a nuestra Comunidad y se parte activa de ella.

 

 

 

 

 

¡Felicidades Septiembre!

septiembre 1, 2011 en 64bits, Ado Express & DataSnap, Delphi, Delphi Prism, Enlace interesante, Entrada Diario, Eventos, FireMonkey, Nos deja la semana..., Noticias, Noticias Delphi, XE2

¿Qué tal estais?  :-)

Espero y deseo que bien.

Hoy retomamos oficialmente, tras estas semanas de descanso,  la actividad de la página, eso sí, :-)  ya con las pilas cargadas y llenos de energia. Y digo oficialmente, porque durante los días anteriores sí que había estado publicando comentarios y remarcando algunos enlaces interesantes en Facebook y Twitter (a partir de ahora también en Google Plus). Muchos de vosotros los habréis leído. La agilidad de las redes sociales, la inmediatez de cuanto se expone, hace un marco inmejorable no ya para transmitir las novedades o redescubrir la información, sino para capturar el pulso de la realidad.

¡Cualquiera diría que no iba a llegar el mes de Septiembre!

Me felicitaba a mi mismo por estar disfrutándolo,  por haber sobrevivido -como mero ciudadano de a pié-, a los vaivenes y a las continuas convulsiones económicas que vivimos y que nos afectan a todos los niveles. ¡Sujetense! -grita alguién a lo lejos- ¡qué esto se cae!… Desgraciadamente, nos despertamos día a día con noticias desalentadoras de la crisis económica y cada vez, el margen para la esperanza es mas pequeño: Dia a día nos hacemos conscientes de la destrucción del tejido empresarial y de la quiebra del sistema financiero, del paro, de la crispación social por los recortes que tiene que acometer el sistema, etc.   Es mas, aun siendo este blog un punto de encuentro de compañeros de una comunidad de programadores, resulta dificil abstraerse del problema económico y social latente y hacer como si no existiera, sin que asome de tapadillo entre las lineas del texto que compartimos. Es por ello, el título que abre este post, que se escribe y se comparte en el contexto del lanzamiento de un producto (Rad Studio XE2) que viene al mundo, -en mi opinión-, en el peor de los escenarios deseables: a un mundo bastante decadente, sumido en una crisis produnda, económica, social y ética.

Posiblemente, -y sigo expresando mi opinión-, sea el contexto económico y social y no la calidad del producto en este caso, quien desluzca esas  novedades que van a ir conociendose de la nueva release o versión. Algunos de los detalles que se conocen son muy prometedores y creo que han generado inquietud o curiosidad (Firemonkey, las plantillas de estilos y los esperados 64 bits). A mi particularmente me gusta lo que he podido conocer de las plantillas de estilo, que pienso abrirá las puertas a una estetica mas acorde a lo que nuestros usuarios se han ido acostumbrando.

 No. No conozco todavía la nueva versión. Lo que se de ella es lo que se ha podido ver en los videos de las presentaciones que van siendo publicados. En facebook ya comentabamos que durante Agosto y Septiembre, se iban a ir sucediendo las 66 presentaciones de RadStudio XE2, que incluían Nueva Zelanda, Argentina, Australia, Austria, Belgica, Brasil, Canada, Colombia, Republica Checa, Dinamarca, Finlandia, Francia, Alemania, Hungria, India, Indonesia, Italia, Japón, Korea, Mexico, Holanda, Noruega, Polonia, Russia, Eslovaquia, España, Suecia, Taiwan, UK y USA. Esta información estaba enlazada desde http://www.embarcadero.com/world-tour

Así que día a día, progresivamente, van a llegarnos durante el mes de Septiembre mas detalles contrastables y fiables, tanto de las cosas buenas como de las que no lo sean.

Para empezar a ver el tema, creo que podríamos acercarnos al video que lanzó Danysoft. Un video corto, de unos 10 minutos, pero que da una idea general bastante buena del producto. Este video se preparó como antesala de las presentaciones que se celebrarán en Barcelona y Madrid a finales de Septiembre. Podéis consultar las fechas en la cabecera del blog.   

Quizás, lo que parece más llamativo de este lanzamiento es la plataforma visual de FireMonkey, que va a dotar a nuestra herramienta de unas prestaciones graficas mas altas, para desarrollos donde se necesiten este tipo de capacidades, vinculadas al 2D/3D. Hasta ahora era una de las asignaturas pendientes que habían hecho que se dependieran de otros motores gráficos.

Ummmmmmmmm…. imagino que quereis ver a FireMonkey en acción. Existen algunos videos y entradas que han sido publicados en las semanas anteriores y que he ido resaltando en las redes sociales.

Por ejemplo. Podeis ver los enlace de Andreano Lanusse, de fecha 3 y 5 de Agosto:

http://www.andreanolanusse.com/en/a-little-bit-about-firemonkey-and-delphi-xe2/

http://www.andreanolanusse.com/en/video-delphi-xe2-and-firemonkey-app-on-windows-mac-and-ios/

 
 

 Seguimos…

Mas videos donde se muestrans las capacidades de FireMonkey nos llega desde Marco Cantú. Con fecha 24 de Agosto nos dejaba un video en you tube, que se enlazaba al post

http://blog.marcocantu.com/blog/firemonkey_betablog_video.html

 

Y finalmente, rebuscando en los enlaces de Danysoft he encontrado 3 detalles adicionales:

http://www.danysoft.com/productos/software/anticipandonos-a-rad-studio-xe2.html

http://www.danysoft.com/productos/software/firemonkey.html

y http://www.danysoft.com/productos/software/las-nuevas-fronteras-de-la-programacion.html

Es precisamente, este último, que por su brevedad pasa inadvertido pero que contiene un pdf que amplia la información sobre las capacidades gráficas de las nueva versión y anticipa el tema de las novedades en DataSnap.

http://www.danysoft.com/free/xe2-articulo-01.pdf

Habrá que estar atento a los articulos sucesivos que vayan publicandose, ya que toda esta información es necesaria de cara a si en un momento posterior decidimos descargar la trial para conocer de primera mano los cambios, poder apreciar los detalles que de otra forma se nos podrían escapar.

Respecto a nuestra Comunidad sale poco a poco del letargo.

Abríamos boca con las publicaciones de Germán Estevez, en el mes de Agosto:

Germán nos dejó un artículo resumen de lo vivido en esas primeras semanas de Agosto (11/08):

http://neftali.clubdelphi.com/?p=1680

Dadle un vistazo. Eran los primeros coletazos del tour de Embarcadero y recogía las anotaciones de David Intersimone, así como uno de los primeros videos sobre Rad Studio XE2. Destacaba en ese post un programa que le habia parecido interesante y que compartía con nosotros:  IOGraph.

Al Gonzalez, otro gran amigo, compartía un truco (16/08) que permitía anclar una ventana e impedir que fuera movida por el usuario.

Inamovible – http://rescatandoadelphi.blogspot.com/2011/08/inamovible.html 

Y finalmente, tambíen compartía con vosotros desde las redes sociales, las aportaciones de Daniel Luyo, en su blog. El enlace que recoge las entradas de Agosto lo tenéis en el enlace siguiente:

http://danielluyo.wordpress.com/2011/08/

Existen un total de 5 entradas. Me parecierón muy interesantes, ya que comparte con nosotros una visión mas cercana a nuestras inquietudes.

Yya finalizando el mes, en estos días pasados, ha iniciado una serie de articulos sobre las novedades de XE2, Rodrigo, muy interesantes y que os aconsejo seguir: 

http://theroadtodelphi.wordpress.com/2011/09/01/exploring-delphi-xe2-vcl-styles-part-i/

Precisamente, abordan el tema de los estilos, que quizás ha sido de los temas que menos se ha hablado y que en mi opinión puede tener un impacto grande sobre nuestros desarrollos, por cuanto va a mejorar notablemente el acabado de los interfaces. Y eso, como dice mi hijo: ¡Mola un montón!  jajajaja  :-)

Siento si queda alguien en el tintero y no hago referencia al mismo. Para escribir la entrada he tomado como referencia los enlaces destacados en mi facebook y posiblemente queden detalles que hayan pasado inadvertidos. Cuento con vuestra ayuda para destacar lo que falte.

En lo que respecta a las fronteras de nuestra C0munidad, me parecieron especialmente interesantes los articulos enlazados que he podido leer en días pasados de Allen Jolub:

http://drdobbs.com/java/231600390?pgno=1

En estas entradas se aborda algunas inquietudes sobre los problemas de la gestión de datos de algunos servicios web de Google. En concreto el habla de las Agendas pero lo hace extensivo a otros servicios, ya que se sirve de este primero para ver los problemas en el tratamiento de datos en los formatos de intercambio. Os aconsejo que lo leáis porque no tiene desperdicio.

El mes de Agosto se despide dejandonos una imagen muy deteriorada de Steve Jobs

Steve Jobs
Apple Shaken to Core
CEO Resigns

http://www.tmz.com/2011/08/24/steve-jobs-apple-ceo-resigns-retires-computers-ipad-iphone-health-issues-pancreatic-cancer/?fb_ref=.TliojyexDXs.like&fb_source=profile_oneline

Cualquier comentario resulta un tanto superfluo. La verdad es que sentí bastante tristeza al verlo tan deteriorado. Pero eso es ley de vida.

Iniciamos Septiembre. Bienvenido y felicidades por seguir viviendo.