Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-10-2011
briast briast is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 50
Poder: 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
 



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
Mover registros en ClientDataSet mglucero Conexión con bases de datos 2 14-03-2014 03:47:44
eliminar registros del ClientDataSet _CALI Varios 7 21-05-2011 09:21:27
Ordenar registros con ClientDataSet Jose Roman Conexión con bases de datos 2 15-01-2010 22:11:27
por que duplicidad de registros con clientdataset sin ingresar registros ...mysql Arturo MySQL 3 05-09-2006 18:39:37


La franja horaria es GMT +2. Ahora son las 02:03:29.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi