deio Postado Abril 25, 2007 Denunciar Share Postado Abril 25, 2007 oi pessoal, sou iniciante no delphi, e estou criando um projeto que trabalha com banco de dados do tipo .dbfestou 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Abril 26, 2007 Denunciar Share Postado Abril 26, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Abril 26, 2007 Autor Denunciar Share Postado Abril 26, 2007 desculpa a ignorância, mas em que paleta fica o datamodule? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Abril 26, 2007 Denunciar Share Postado Abril 26, 2007 OpaNa verdade não é um componente em si, não fica em nenhuma paleta, adicionaele pelo Menu: File > New > Other e procure por Data Moduleabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Abril 26, 2007 Autor Denunciar Share Postado Abril 26, 2007 legal, mas como funciona esse datamodule? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Abril 26, 2007 Denunciar Share Postado Abril 26, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Abril 27, 2007 Autor Denunciar Share Postado Abril 27, 2007 não estou conseguindo fazer ligação do datamodule e o form, em qual cláusula uses eu coloco? aquela que diz as unit ou a outra? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Abril 27, 2007 Denunciar Share Postado Abril 27, 2007 OpaPrimeira coisa, vai em File > Use Unit e seleciona o Data Module...Depois você pode trabalhar com ele seja ligando datasource, ou chamando pelo código atravésdo nome que você deu ao datamodule...abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Abril 27, 2007 Autor Denunciar Share Postado Abril 27, 2007 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);varcount : integer;begincount := datamodule6.Dbf1.RecordCount;statusbar1.Panels[0].Text :='Records ' + inttostr(count);statusbar1.panels[1].Text := FormatDateTime('hh:mm:ss', Now); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Abril 27, 2007 Denunciar Share Postado Abril 27, 2007 OpaQual a mensagem de erro que aparece naquela janelinha de mensagens?Porque o código em si está correto, tem outra coisa dando erro como a ligação ou sei láabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Abril 27, 2007 Autor Denunciar Share Postado Abril 27, 2007 (editado) 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 Abril 27, 2007 por deio Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Abril 27, 2007 Denunciar Share Postado Abril 27, 2007 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éiaDaí, 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Abril 30, 2007 Autor Denunciar Share Postado Abril 30, 2007 (editado) consegui resolver o erro que tava dando XDjá 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);varbusca : variant;beginbusca := 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 Abril 30, 2007 por deio Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Abril 30, 2007 Denunciar Share Postado Abril 30, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Abril 30, 2007 Autor Denunciar Share Postado Abril 30, 2007 não funciono T.To que eu faço agora? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 1, 2007 Denunciar Share Postado Maio 1, 2007 não funciono T.To 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
deio
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
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.