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.