Trabalhando com DBGrid (Lista Ordenada)

Delphi

29/10/2015

Bom dia, utilizo Delphi 7 com MySql e dbexpress.

Tenha uma tabela, com uma lista de tarefas, e ela tem uma sequecia ordenada. Exemplo: ID=1, Descricao=Fazer algo, ID=2, Descricao=Fazer outra coisa, etc, etc.

Essa tabela, possui, exemplo: 30 tarefas, ordenadas de 1 a 30.

Quando o usuario incluir uma tarefa no meio da tabela, exemplo, na posição 15, as outras após a 15, deverão ser renumeradas. E quando excluir uma tarefa, deverá ser renumerada para diminuir um valor no ID.

As vezes é necessário trocar a posição 1 com a 10, exemplo.

Como faço essas rotinas?
William Nakata

William Nakata

Curtidas 0

Respostas

Raimundo Pereira

Raimundo Pereira

29/10/2015

Você poderia fazer o seguinte.

Crie um campo COD_TAF : PK. AUTO NUMERIC.
Com isso todas as vezes que incluir uma Tarefa será atribuida uma nova ID para o campo COD_TAF.
Você tem outro campo deixe-a como intger;

Após realizar qualquer rotina você reestrutura a tabela e dar um for :

Após qual quer rotina faça isso
VAR ID_TAF:INTEGER
>>>>>>>>>>>>>>AGORA MONTA OUTRO SELECT E RETORNA OS REGISTROS PELO CAMPO COD_TAF
ID_TAF:=0;
DM.Q_TAREFA.CLOSE;
DM.Q_TAREFA.SQL.TEXT:='SELECT * FROM EXEMPLO ORDER BY COD_TAF';
DM.Q_TAREFA.OPEN;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DM.Q_TAREFA.FIRST;
IF NOT (DM.Q_TAREFA.EOF) THEN
BEGIN
ID_TAF:=ID_TAF+1;
DM.Q_TAREFA.EDIT;
DM.Q_TAREFA.FIELBYNAME(ID_TAF).ASINTEGER;
DM.Q_TAREFA.POST;
DM.Q_TAREFA.NEXT;
UNTIL ( DM.Q_TAREFA.EOF);
END;

>>>>>>>>>>>>>> AGORA MONTA OUTRO SELECT E RETORNA OS REGISTROS PELO CAMPO ID
DM.Q_TAREFA.CLOSE;
DM.Q_TAREFA.SQL.TEXT:='SELECT * FROM EXEMPLO ORDER BY ID';
DM.Q_TAREFA.OPEN;
END;

Testa ai,
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

29/10/2015

Talvez não precise usar

DM.Q_TAREFA.CLOSE;
DM.Q_TAREFA.SQL.TEXT:='SELECT * FROM EXEMPLO ORDER BY COD_TAF';
DM.Q_TAREFA.OPEN;
----------------------------------------------------------------------------------------------------------
USE APENAS A ROTINA ABAIXO

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ID_TAF:=0;
DM.Q_TAREFA.FIRST;
IF NOT (DM.Q_TAREFA.EOF) THEN
BEGIN
ID_TAF:=ID_TAF+1;
DM.Q_TAREFA.EDIT;
DM.Q_TAREFA.FIELBYNAME(ID_TAF).ASINTEGER;
DM.Q_TAREFA.POST;
DM.Q_TAREFA.NEXT;
UNTIL ( DM.Q_TAREFA.EOF);
END;

DM.Q_TAREFA.CLOSE;
DM.Q_TAREFA.SQL.TEXT:='SELECT * FROM EXEMPLO ORDER BY ID';
DM.Q_TAREFA.OPEN;
END;

Lembre-se você deve liberar o campo ID ou seja ele não pode está como AutoInc.
Aguardo retorno.
GOSTEI 0
POSTAR