Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Gerar Registros Automaticamente


valSistemasDelphi

Pergunta

Como eu gero Registros De Cadastro automaticamente, sem o Auto Incremento.

Tipo um contador que vai contar os registros. Não achei nada na internet que me ajude.

Eu estou usando o IBTABLE, eu tinha esse código mais meu pc deu problema no hd e perdi tudo!

Me Parece que cria uma variavel COD, E no caso o Edit1 Recebe, não sei muito bem se e isso.

 

 

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Sem usar o auto-incremento, voce deve criar uma variavel que receberá o ultimo valor de um campo numerico ou a contagem de registros da tabela

use um componente Query com a sentença SQL:

select Max(COD) as TotReg from Tabela

ou

select Count(COD) as NumReg from Tabela

no primeiro caso, o ultimo valor de COD é que será pego

no segundo caso, é a contagem de todos os registros com o campo COD.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
 var
contador: integer;
begin

 Contador :=IBTable1.RecordCount;
 Edit1.Text := floattostr(Contador + 1); 

O que voce fez está correto,  mas não te aconselho a usar dessa maneira, se a sua tabela  for crescer muito ( tipo mais de 100.000 registros ) ... o comando RecordCount vai ficar mais lento que uma sentença SQL na Query

Só estou com um problema quando chega no Registro 8, pula pro 10.

isso só pode acontecer de 2 maneiras:  ou voce está dando um comando append ou um insert em outra parte do código, ou está incrementando o seu contador em algum outro lugar do seu código.

portanto, verifique o seu código  ou use o debuger ( breakpoint ) do delphi para achar onde está o problema.

abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas agora deu certo, valeu pelo apoio ai. \o/.

tenho só uma dúvida, a respeito de gravar foto no Banco de dados, não entendi até agora a lógica disso. To vendo muito vídeo a respeito, mais cada um tem uma forma de programar, então não dá pra focar.

Mais quero saber qual é a lógica. Se a foto eu gravo primeiro. E depois com outro comando eu busco a imagem no Banco.

Se poder me dar essa força ai pra mim aprender. Desculpa se outro assunto, case seja necessário crio em um novo tópico, valeu \o/ 

Link para o comentário
Compartilhar em outros sites

  • 0

var
   MS :TMemoryStream;

 if Opd.Execute then
  begin
    FOTO.Picture.LoadFromFile(Opd.FileName);
    MS := TMemoryStream.Create;
    try
      FOTO.Picture.Graphic.SaveToStream(MS);
      (Form2.Ibtable1.FieldByName('Foto') as TBlobField).LoadFromStream(MS);
    finally

      MS.Free;
    end;
  end;

 

Achei esse código na internet, mais ao salvar a imagem da erro "Invalid Class Typecast"

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo, quando os assuntos forem diferentes, coloque em outro tópico, pois isso facilita a busca pelo assunto ..ok ?

Tenha o habito de ler a descrição de um comando para saber exatamente como ele funciona.

exemplo : TMemoryStream

---------------------------------------------------------------------------------------

Use TMemoryStream para armazenar dados em um buffer de memória dinâmica que é aprimorado com recursos de acesso semelhantes a arquivos. O TMemoryStream fornece os recursos gerais de I / O de um objeto de fluxo ao introduzir métodos e propriedades para gerenciar um buffer de memória dinâmica.

Fluxos de memória são úteis como objetos intermediários que podem conter informações, bem como lê-las ou gravá-las em outro meio de armazenamento. Eles fornecem um formato útil para comparar o conteúdo de fluxos, ou para manipular dados armazenados em um meio menos acessível.

---------------------------------------------------------------------------------------

Use LoadFromStream para copiar o conteúdo de um fluxo ( stream ) no campo BLOB. Especifique o fluxo ( stream ) a partir do qual o valor do campo é copiado como o valor do parâmetro Stream.

Nota: O parâmetro Stream geralmente não é um fluxo BLOB. Fluxos BLOB (retornados pelo método CreateBlobStream do conjunto de dados) fornecem um mecanismo completamente separado para fluxo de dados em um campo BLOB.

exemplo:

var
  MS: TMemoryStream;
begin
if not (ClientDataSet1.State in [dsInsert, dsEdit]) then
 ClientDataSet1.Insert;
  MS := TMemoryStream.Create();
try
Image1.Picture.Bitmap.SaveToStream(MS);
    ClientDataSet1Images.LoadFromStream(MS);
finally
    MS.Free;
end;
  ClientDataSet1.Post;
end;

OBS: O exemplo acima, vai pegar a imagem que está no componente TImage e vai salva-la na tabela do banco de dados em um campo BLOB

No entanto, trabalhar com imagens em banco de dados, requer atenção, pois dependendo do tamanho da imagem, voce vai deixar muito grande o tamanho da sua tabela.

Então é necessario que voce reduza o tamanho da imagem para salvar no banco

exemplo: http://delphidabbler.com/tips/100

uma imagem Bitmap é muito maior que a mesma imagem em JPEG

o ideal é converter o Bitmap em JPEG ou JPG, depois comprimi-la ainda mais ( até  40%  do original ) sem perder a resolução, para depois salvar no banco de dados.

abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas valeu por responde,  sempre dá esse erro,  "Field (Registro) must have a value

o que seria ? já tentei até inserir o registro, por meio de código, mais não deu certo.

Fiz algumas pesquisas, conforme esse erro, vi o pessoal dizendo para Selecionar o Registro Da Tabela, e ir na propriedade "Required" para False, a ele abre o openDialog não dá o erro, mais não salva nada. Como se não tivesse nenhum código.

Editado por valSistemasDelphi
Link para o comentário
Compartilhar em outros sites

  • 0

Agora voce percebeu o seu erro ... o contador deve ser somado a ele mesmo + 1 todas as vezes

não te avisei antes, porque queria que voce entendesse a lógica de se criar um contador

 var
contador: integer;
begin

 Contador :=IBTable1.RecordCount;
 Contador := Contador + 1;
 Edit1.Text := floattostr(Contador); 

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Confesso que estava quase desistindo mais Depois de muito esforço consegui resolver o meu problema.

 

Solução:

1º Criei um Button que o código dele serve para, armazenar o caminho Da Foto, para um campo, no Banco De Dados" com todos os fields da Tabela o usuário faz o cadastro primeiro e Depois escolhe a Foto. E Posta no Banco para gravar.

 

2º  No Evento, DBGrid1DrawColumnCell . // Aqui ele permite mudar de fotos a cada registro atualizado.
 if IBTable1FOTO.Value <> '' then  // Se o campo Foto for diferente de vazio
 begin
   foto.Visible:=true;
   foto.Picture.LoadFromFile(IBTable1FOTO.Text);
   end
   else
   foto.Visible:=false;

 

3º No FormCreat  joguei este código.    // Atualiza em tempo Real.

 if ibtable1foto.Value <> '' then          
 begin
   foto.Visible:=true;
   foto.Picture.LoadFromFile(Ibtable1foto.Text);
   end
   else
   foto.Visible:=false;

 

Espero ter sido Claro a respeito. Jhonas valeu parceiro pelas Dicas. \o/
 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...