Fórum Autoincrement em campo alfanumérico #421109
06/08/2012
0
A tabela é Paradox para cadastro de cliente e ela faz parte de um sistema criado por outra pessoa. Como ela não oferece todos os campos necessários às necessidades da empresa que trabalho resolvi adicionar campos para complementar. Notei que o campo de código do cliente é alfanumérico e não autoincrement. Mesmo assim fiz o novo form, que funcionou legal. Só não foi preenchido após salvar o campo de código.
Então vem a dúvida:
Como fazer para que, ao adicionar novo cliente, seja gerado o código tipo autoincrement e este seja mostrado no form no momento do preenchimento dos dados?
Acho que deu pra entender......rsrsrsr
Carlos Magno
Curtir tópico
+ 0Posts
06/08/2012
Gustavo Bretas
SELECT MAX(CAMPO) AS ID FROM TABELA
A questão é que como o campo é alfanumérico, se tiver um registro que o ID não seja numéro vai dar problema!
Espero ter ajudado!
Abraço!
Gostei + 0
07/08/2012
Carlos Magno
Gostei + 0
07/08/2012
Deivison Melo
Digamos que temos os valores: 1,2,3,10,20,30 e ao mandarmos ordenar os valores ficará da seguinte forma:
1
10
2
20
3
30
Ao invés de ficar:
1
2
3
10
20
30
Para resolver isso, na sua consulta deverá ser efetuado um cast nas informações a serem pesquisadas!
Espero te ajudado!
Gostei + 0
07/08/2012
Gustavo Bretas
Quanto mais informação vc conseguir nos passar, mais fácil fica para te ajudarmos!
O Deivison tem razão nesse lance da ordenação, mas eu não sei se é possível fazer o cast em query com DBE, não tenho certeza se é compatível, mas um teste não faz mal né!? rsrs
Tenta esse Carlos!
SELECT MAX(CAS(CAMPO AS INTEGER)) AS ID FROM TABELA
Estamos aguardando seu retorno!
Gostei + 0
07/08/2012
Carlos Magno
Gostei + 0
07/08/2012
Carlos Magno
Gostei + 0
07/08/2012
Gustavo Bretas
Como o campo não é autoincremento vc vai ter que setar o código nele, e pra buscar o código tem que ser em outra query!
Eu recomendo vc setar o código no BeforePost do DataSet, assim evita erro de PK se alguém estiver cadastrando no mesmo momento que vc!
Então:
procedure TSeuFormulario.SeuDataSetBeforePost(DataSet : TDataSet); begin try qryCodigo.Close; qryCodigo.SQL.Clear; qryCodigo.SQL.Add(SELECT MAX(CAMPO) AS ID FROM TABELA); qryCodigo.Open; // SeuDataSetClienteCodigo.AsInteger := qryCodigo.Fields[0].AsInteger; // finally qryCodigo.Close; end; end;
Aguardando retorno!
Gostei + 0
07/08/2012
Carlos Magno
Gostei + 0
08/08/2012
Carlos Magno
Gostei + 0
09/08/2012
Carlos Magno
Gostei + 0
13/08/2012
Carlos Magno
Gostei + 0
13/08/2012
Deivison Melo
function GeneratorID (aName: string; Connection: TSQLConnection;
Incrementa: Boolean): integer;
var
Qry: TSQLQuery;
begin
Qry := TSQLQuery.Create(nil);
try
Qry.SQLConnection := Connection;
if Incrementa then
Qry.SQL.Add(
SELECT GEN_ID(+aName+, 1) FROM RDB$DATABASE)
else
Qry.SQL.Add(
SELECT GEN_ID(+aName+, 0) FROM RDB$DATABASE);
Qry.Open;
Result := Qry.Fields[0].AsInteger;
finally
FreeAndNil(Qry);
end;
end;
Ou seja vc vai descarregar o valor dessa função em uma variável alfanumerica e depois utilizar!!!!
Gostei + 0
23/08/2012
Carlos Magno
Gostei + 0
24/08/2012
William
Quanto à questão de não criar um campo ID auto incremento e criar um campo código alfanumérico, vai muito da análise de pré-requisitos e conhecimento sobre banco de dados do programador na época de desenvolvimento.
Acredito que essa tabela já esteja sendo usada e possua vários registros.
Eu tentaria criar um novo campo ID inteiro, sei que já existe informações então vc teria que montar um loop no delphi e preencher esse campo ID auto incrementando baseado no contador do loop, após essa fase aí é só seguir o exemplo do colega Bretas, usando instrução SQL MAX().
Gostei + 0
24/08/2012
Deivison Melo
Incrementa: Boolean): integer;
var
Qry: TSQLQuery;
begin
Qry := TSQLQuery.Create(nil);
try
Qry.SQLConnection := Connection;
if Incrementa then
Qry.SQL.Add(
SELECT max(+campo+, 1) FROM tabela)
else
Qry.SQL.Add(
SELECT max(+campo+, 0) - 1 FROM tabela);
Qry.Open;
Result := Qry.Fields[0].AsInteger;
finally
FreeAndNil(Qry);
end;
end;
Vê se assim atenderá... (estou sem delphi aqui)
Qual o banco q vc está utilizando?
Me fala que faço a funcao para vc!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)