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

Ajuda Na Criação De Código


deio

Pergunta

oi pessoal, sou iniciante no delphi, e estou criando um projeto que trabalha com banco de dados do tipo .dbf

estou com dificuldade na criação do código de procura no banco de dados, é idéia básica é a seguinte:

Num form secundário:

1. Ler os dados incluídos nos 12 edits que contém no form;

2. Ao clicar num botão iniciar a buscar;

3. Mostrar os resultados no DBGrid no form principal;

4. Esconder o form secundário;

desde já agradeço a todos que responderem este tópico

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

deio, você pode utilizar um datamodule onde a tabela mostrada no DBGrid do form principal fique disponível também para o form secundário. Observe que este datamodule deverá está incluso na cláusula uses de ambos os form's, bem como deverá ser criado antes ou no create do form principal, ou seja, ele já deverá existir.

Daí, ao iniciar a busca, você faz os filtros sobre esta tabela e ao fechar o form secundário, o resultado mostrado no DBGrid deve estar de acordo com o pesquisado.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
legal, mas como funciona esse datamodule?
deio, é bem simples.

Como o Churc disse, você adiciona ele ao seu projeto via menu principal do Delphi. Assim como um form, o datamodule tem uma arquivo de codificação (.pas) e um "container" como se fosse um form, onde você pode colocar certos tipos de componentes (aqueles associados a acesso da banco de dados).

Então, após criar o datamodule, você adiciona seus componentes tipo dataset (TTable, TQuery, ...), os DataSources e liga os dataset's a eles.

A seguir, no seu form, após você adicionar o nome da unit do datamodule na cláusula uses(como mencionei anteriormente), bastará que você selecione na propriedade DataSource do seu DBGrid, o datasource proveniente do mesmo (aparecerá na lista o datasource precedido do nome do datamodule).

Veja se já consegue, continuar a partir daqui.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

consegui utilizar o datamodule, troquei todos os dbf por datamodule.dbf, só que agora ele diz que da erro onde está em negrito :

procedure TForm1.FormCreate(Sender: TObject);

var

count : integer;

begin

count := datamodule6.Dbf1.RecordCount;

statusbar1.Panels[0].Text :='Records ' + inttostr(count);

statusbar1.panels[1].Text := FormatDateTime('hh:mm:ss', Now);

Link para o comentário
Compartilhar em outros sites

  • 0

aparece exatamente isso :

"Project Project1.exe raised exception class EAccessViolation with message 'Access violation at adress 004B54FE in module 'Project1.exe'.Read of adress 00000058'.Process stopped..."

depois ele mostra selecionado esta linha :

count := datamodule6.Dbf1.RecordCount;

é isso que esta acontecendo....

bem, voltando ao assunto inicial do tópico, agora que eu coloquei o datamodule, como fica o código pra ele buscar no dbf e seleciona o resultado no DBGrid?

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

  • 0
aparece exatamente isso :

"Project Project1.exe raised exception class EAccessViolation with message 'Access violation at adress 004B54FE in module 'Project1.exe'.Read of adress 00000058'.Process stopped..."

depois ele mostra selecionado esta linha :

count := datamodule6.Dbf1.RecordCount;

é isso que esta acontecendo....

deio, talvez tenha a ver com a observação que fiz no meu primeiro post - o datamodule tem que existir (ser criado) antes de você utilizar ele. Verifique a ordem de criação no menu Project->Options->Auto-create forms. Ele tem que ser criado antes das janelas que o utilizam.

bem, voltando ao assunto inicial do tópico, agora que eu coloquei o datamodule, como fica o código pra ele buscar no dbf e seleciona o resultado no DBGrid?
pegando parte do que já havia postado anteriormente...

(...)A seguir, no seu form, após você adicionar o nome da unit do datamodule na cláusula uses(como mencionei anteriormente), bastará que você selecione na propriedade DataSource do seu DBGrid, o datasource proveniente do mesmo (aparecerá na lista o datasource precedido do nome do datamodule).(...)

O dataset ligado a este datasource, será o mesmo que você estará aplicando o filtro - essa é a idéia

Daí, ao iniciar a busca (na sua outra tela de filtros) e estando você utilizando o mesmo dataset existente no datamodule (aquele ligado ao DBGrid também), a aplicação dos filtros se refletirá sobre o resultado apresentado no DBGrid. Ao fechar o form secundário, o resultado mostrado no DBGrid deve estar de acordo com o pesquisado.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

consegui resolver o erro que tava dando XD

já entendi a ideia do comando de busca, agora o problema é codigo em si, pois eu sou iniciante e não entendo quase nada, a unica coisa que consegui fazer foi :

procedure TForm3.Button1Click(Sender: TObject);

var

busca : variant;

begin

busca := edit1.text;

datamodule6.Dbf1.SearchKey(busca,stEqual);

end;

só isso que eu sei fazer, falta agora ele seleciona no DBGrid o record que bate com especificações da busca.

e pra fazer o filtro seria quase a mesma coisa, só que ao invés de selecionar o record, mostraria todos os records que batem com as especificações no DBGrid...

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

  • 0

deio, supondo que seu Form3 seja o form de busca e que datamodule6.DBF1 seja o dataset também utilizado no seu DBGrid no outro form, a localização por sí só, já deveria ter acontecido - exceto se não foi encontrado nada igual ao que você procurou.

Acredito que a sua busca deva está ocorrendo sobre o campo que é o índice da sua tabela, se não for, também não deverá encontrar nada.

se você testar o resultado da função, você terá certeza se está ou não encontrando o que procura:

procedure TForm3.Button1Click(Sender: TObject);
var
  busca : variant;
begin
  busca := edit1.text;
  if datamodule6.Dbf1.SearchKey(busca,stEqual) then
    ShowMessage('Encontrei o que procurava!');
end;

Quando colocar código aqui no forum, utilize as tag's (veja botões na barra de edição) para melhor visualização do código, com fiz agora acima. ;)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
não funciono T.T

o que eu faço agora?

deio, você definiu um índice pelo campo que você quer procurar?

Uma outra coisa que observei é, que apesar de definir o índice com a propriedade case insensitive, se o texto da busca não for digitado de acordo com o gravado, ele não encontra (pelo menos foi só observando isso que obtive resultado positivo).

Também observe que quando você procura utilizando stEqual você só encontrará o texto digitado se ele existir exatamente como digitado.

Voltando ao seu post anterior:

(...)já entendi a ideia do comando de busca, agora o problema é codigo em si, pois eu sou iniciante e não entendo quase nada(...)
É complicado tentar lhe explicar (assim, trocando mensagem) algo do qual você não tem praticamente idéia alguma. Sugiro que você procure por alguma apostila ou livro básico para que você possa ter uma idéia melhor da programação Delphi, bem como uso de seus componentes basicos (edição e acesso a banco - paleta BDE).

Dê uma olhada neste link, eu coloquei um exemplo bem simples (um form, com um edit para você digitar o que procurar, um botão para executar esta ação e um dbgrid que mostra o conteúdo da tabela). Tem que esperar um pouquinho até aparecer o botão para download.

No site SourceForge, onde o componente está "hospedado", há um link para download de um demo bastante completo. Ele lista os recursos e habilita um botão com caption "Demo" para mostrar numa outra janela o exemplo tópico explicado - dê uma olhada. Caso você já não o tenha baixado, click aqui para acessá-la.

Só uma curiosidade: você tem mesmo que começar a lidar com banco de dados, utilizando justamente um componente que não é o "padrão" do Delphi ou escolheu ele por acaso? E que isso implicará em poucos exemplos/auxílio a respeito.

Abraços

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...