Hola. Utilizo Delphi 5 aunque esta prueba la he realizado también con Delphi 2010 y ocurre lo mismo. Os comento. Tengo en un form un dbgrid, un clientdataset y su correspondiente datasource para unirlos. Un par de cajas de texto (Tedit) y un botón agregar.
En el clientdataset he creado dos campos "N1" integer y "C1" string. En realidad lo que me interesa es el integer.
La idea es ir insertando en el clientdataset registros pero ordenados por el campo N1. No puedo poner índices por dicho campo porque realmente el problema es más complejo, y no es lo que trato de resolver ahora sino otra cuestión que os detallo a continuación.
El procedimiento consiste en que cada que vez que se pulse agregar el proceso recorre el dataset e inserte el registro en la posición correcta. Os pongo aquí el código del evento on click:
Código Delphi
[-]...
var insertado:boolean;
begin
clientdataset1.first;
insertado:=false;
while (not clientdataset1.eof) and (not insertado) do
begin
if clientdataset1.fieldbyname('N1').value>strtoint(edit1.text) then
begin
clientdataset1.insert;
clientdataset1.fieldbyname('N1').value:=strtoint(edit1.text);
clientdataset1.fieldbyname('C1').value:=edit2.text;
clientdataset1.post;
insertado:=true;
end
else clientdataset1.next;
end;
if not insertado then
begin
clientdataset1.append;
clientdataset1.fieldbyname('N1').value:=strtoint(edit1.text);
clientdataset1.fieldbyname('C1').value:=edit2.text;
clientdataset1.post;
end;
end;
Al final tenemos un clientdataset con los registros perfectamente ordenados por N1 con independencia del orden de ejecución. El problema es el siguiente:
- En Windows 7 32 bits el clientdataset final queda perfectamente ordenado.
- En Windows XP o Windows 7 64 bits, los insert hacen lo mismo que append y el clientdataset final está totalmente desordenado.
¿Alguna sugerencia?
Gracias