Ver Mensaje Individual
  #2  
Antiguo 12-07-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Reputación: 21
ElDioni Va por buen camino
Bueno, he borrado la función que os había puesto antes porque ya me mareaba de tanto orden para arriba y orden para abajo, si sumo o no sumo, cuando sumo, etc...
al final he empezado de 0 y me ha quedado lo siguiente:

Código Delphi [-]
gc:=DBGridDetalleOrdenes.MouseCoord(x,y);
    if (gc.X>0)AND(gc.Y>0) then
      begin
        if DbGridDetalleOrdenes.SelectedRows.Count<1 then
          begin
            if QueryDetalleOrden.IsEmpty=false then
              begin
                DBGridDetalleOrdenes.SelectedRows.CurrentRowSelected:=true;
              end;
          end;
        DbGridDetalleOrdenes.DataSource.DataSet.MoveBy(gc.Y - THackDBGrid(DbGridDetalleOrdenes).Row);
        orden1:='';
        Orden1:=DbGridDetalleOrdenes.DataSource.DataSet.FieldByName('orden').AsString;
        if orden1='' then exit;
        if DbGridDetalleOrdenes.SelectedRows.Count>0 then
          begin
            for w:=0 to DbGridDetalleOrdenes.SelectedRows.Count-1 do
              begin
                DbGridDetalleOrdenes.DataSource.DataSet.GotoBookmark(pointer(DbGridDetalleOrdenes.SelectedRows.items[w]));
                QueryTempOrdenes.Close;
                QueryTempOrdenes.SQL.Text:='SELECT * FROM ordenes';
                QueryTempOrdenes.Open;
                QueryTempOrdenes.Locate('norden',DBGridDetalleOrdenes.DataSource.DataSet.FieldByName('norden').AsStr  ing,[lopartialkey]);
                orden2:=QueryTempOrdenes.FieldByName('orden').AsString;
                if strtoint(orden1)'orden').AsInteger then
                  begin
                    QueryTempOrdenes.SQL.Text:='UPDATE ordenes SET orden=orden+1 WHERE orden>='+orden1+' AND orden<'+orden2+' AND maquinaelegida='+quotedstr(DbGridDetalleOrdenes.DataSource.DataSet.FieldByName('maquinaelegida').AsS  tring);
                    QueryTempOrdenes.ExecSQL;
                    QueryTempOrdenes.SQL.Text:='UPDATE ordenes SET orden='+orden1+' WHERE norden='+DbGridDetalleOrdenes.DataSource.DataSet.FieldByName('norden').AsString;
                    QueryTempOrdenes.ExecSQL;
                    orden1:=inttostr(strtoint(orden1)+1);
                  end
                else
                  begin
                    QueryTempOrdenes.SQL.Text:='UPDATE ordenes SET orden=orden-1 WHERE orden>'+orden2+' AND orden<='+orden1+' AND maquinaElegida='+quotedstr(DBGridDetalleOrdenes.DataSource.DataSet.FieldByName('MaquinaElegida').AsS  tring);
                    QueryTempordenes.ExecSQL;
                    QueryTempOrdenes.SQL.Text:='UPDATE ordenes SET orden='+orden1+' WHERE norden='+DbGridDetalleOrdenes.DataSource.DataSet.FieldByName('norden').AsString;
                    QueryTempOrdenes.ExecSQL;
                  end;
              end;
          end;
      end
    else
      begin
        exit;
      end;  
  end;
BtnRefreshOrdenClick(nil);

lo estoy probando y de momento me funciona, da igual que cojas los partes separados, juntos, de uno en uno, que los muevas hacia arriba o hacia abajo, de momento me está funcionando. Lo dejo aquí por si alguien se le ocurre algo más y por si a alguien le sirve de algo.

Saludos y gracias a todos los que han entrado para ver el problema.

Última edición por ElDioni fecha: 12-07-2011 a las 16:19:20.
Responder Con Cita