Ver Mensaje Individual
  #1  
Antiguo 21-10-2011
briast briast is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 50
Reputación: 13
briast Va por buen camino
Insercción de registros en clientdataset

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
                     // Insertamos en la posición actual
                     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
                     // Insertamos al final
                     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

Última edición por Casimiro Notevi fecha: 21-10-2011 a las 19:02:40.
Responder Con Cita