Fórum Trabalhando com DBGrid (Lista Ordenada) #536057
29/10/2015
0
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?
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
Curtir tópico
+ 0
Responder
Posts
30/10/2015
Raimundo Pereira
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,
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,
Responder
Gostei + 0
30/10/2015
Raimundo Pereira
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.
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.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)