incluir, excluir e pesquisar em delphi

Delphi

06/09/2013

ola amigos gostaria de saber como faço para incluir, excluir e pesquisar dados em um dbgrid
eu queria criar um programa sem banco de dados de outra tabela, dessa forma

incluir
excluir
pesquisar (mostrar dados no dbgrid)

pode ser qualquer coisa, como por exemplo, digito 'teste' no edit e depois clico em incluir
ai clico em pesquisar e mostra a palavra 'teste' no dbgrid
Eros Cardoso

Eros Cardoso

Curtidas 0

Respostas

Marcos Oliveira

Marcos Oliveira

06/09/2013

Eros, vamos por parte. Não entendi direito quando você quis dizer "criar um programa sem banco de dados de outra tabela". Se você quer incluir alguma coisa para aparecer no DBGrid, você terá que ter pelo menos uma tabela, nem que seja em memória, utilizando o ClientDataSet, por exemplo. O DBGrid apenas mostra os dados na tela, que são gravados em alguma tabela. Não tem como inserir dados diretamente nele.
GOSTEI 0
Wilton Júnior

Wilton Júnior

06/09/2013

Eros se eu entendi bem vc vai ter que usar o clientdataset para realizar o trabalho que vc quer fazer.
Da um procurada no google que tem milhares de artigos de como manipular o clientdatase.

Veja:
ClientDataset.append; é para inserir
ClientDataset.edidt é alterar.
ampos no final vc coloca clientdataset.post para confirmar a operação

clientdataset.locate('campo',edit1.text,[]); é para localiza

e finalmente clientdataset.delete para exclusão.

Espero ter ajudado
"Deus Abençoes"
GOSTEI 0
Eros Cardoso

Eros Cardoso

06/09/2013

é isso ai, vou pesquisar aqui, valeu ai marcos e wilton
vou ver aqui como funciona o ClientDataSet
obrigado
GOSTEI 0
Eros Cardoso

Eros Cardoso

06/09/2013

Eros se eu entendi bem vc vai ter que usar o clientdataset para realizar o trabalho que vc quer fazer.
Da um procurada no google que tem milhares de artigos de como manipular o clientdatase.

Veja:
ClientDataset.append; é para inserir
ClientDataset.edidt é alterar.
ampos no final vc coloca clientdataset.post para confirmar a operação

clientdataset.locate('campo',edit1.text,[]); é para localiza

e finalmente clientdataset.delete para exclusão.

Espero ter ajudado
"Deus Abençoes"




Wilton, eu pesquisei aqui sobre o clientdataset
coloquei o xmltransformerprovider, clientdataset e datasource ambos da paleta (data access) e o dbgrid (data controls)

ai criei os botoes de adicionar, alterar, delete e pesquisa (delete e pesquisa nao funcionaram)
os botoes de adicionar e alterar so funcionam no momento que abre o executavel, quando fecho o executavel e abro novamente o codigo, nome e tel nao estao mais la

//cadastrar
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.Append;
ClientDataSet1.FieldByName('codigo').Value:=(Edit1.Text);
ClientDataSet1.FieldByName('nome').Value:=(Edit2.Text);
ClientDataSet1.FieldByName('telefone').Value:=(Edit3.Text);
ClientDataSet1.Post;
end;

//alterar
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientDataSet1.edit;
ClientDataSet1.FieldByName('codigo').Value:=(Edit1.Text);
ClientDataSet1.FieldByName('nome').Value:=(Edit2.Text);
ClientDataSet1.FieldByName('telefone').Value:=(Edit3.Text);
ClientDataSet1.Post;
end;

//deleta
procedure TForm1.Button3Click(Sender: TObject);
begin
ClientDataSet1.Delete;
ClientDataSet1.FieldByName('codigo').Value:=(Edit1.Text);
ClientDataSet1.FieldByName('nome').Value:=(Edit2.Text);
ClientDataSet1.FieldByName('telefone').Value:=(Edit3.Text);
ClientDataSet1.Post;
end;

//pesquisa
procedure TForm1.Button4Click(Sender: TObject);
begin
ClientDataSet1.locate('codigo',edit1.text,[]);
ClientDataSet1.locate('nome',edit2.text,[]);
ClientDataSet1.locate('telefone',edit3.text,[]);
ClientDataSet1.FieldByName('codigo').Value:=(Edit1.Text);
ClientDataSet1.FieldByName('nome').Value:=(Edit2.Text);
ClientDataSet1.FieldByName('telefone').Value:=(Edit3.Text);
ClientDataSet1.Post;
end;


no arquivo xml deixei da seguinte forma
<clientes>
<cliente>
<codigo>1</codigo>
<nome>joao</nome>
<telefone>3222-2222</telefone>
</cliente>
</clientes>

esse do xml esta sempre mostrando, sempre quando abro o executavel mostra o cod; 1 / nome; joao e tel; 3222-2222

veja na imagem como ta o programa
http://img27.imageshack.us/img27/6272/97sf.jpg
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

06/09/2013

Eros, Vamos lá:

Ao deletar, você simplesmente dê o comando ClientDataSet1.Delete.
Ao Pesquisar, você deve informar somente o comando ClientDataSet1.locate, com os parâmetros que você quiser.
Os comandos ClientDataSet1.FieldByName(....), e o Post só deve ser colocados quando for adicionar ou alterar algum registro.

Do jeito que você informou no pesquisar, ele vai executar 3 pesquisas, uma por código, outra por nome, e a última por telefone, sendo que a que vai prevalecer será a última.
Se quiser fazer uma pesquisa, por nome, você deve usar somente o comando ClientDataSet1.locate('codigo',edit1.text,[]);

Quanto ao XML, não entendi direito. Quando você cadastra, mostra na tela, mas quando você fecha e abre o programa, só mostra o código 1?

Att,

Marcos
GOSTEI 0
Eros Cardoso

Eros Cardoso

06/09/2013

Eros, Vamos lá:

Ao deletar, você simplesmente dê o comando ClientDataSet1.Delete.
Ao Pesquisar, você deve informar somente o comando ClientDataSet1.locate, com os parâmetros que você quiser.
Os comandos ClientDataSet1.FieldByName(....), e o Post só deve ser colocados quando for adicionar ou alterar algum registro.

Do jeito que você informou no pesquisar, ele vai executar 3 pesquisas, uma por código, outra por nome, e a última por telefone, sendo que a que vai prevalecer será a última.
Se quiser fazer uma pesquisa, por nome, você deve usar somente o comando ClientDataSet1.locate('codigo',edit1.text,[]);

Quanto ao XML, não entendi direito. Quando você cadastra, mostra na tela, mas quando você fecha e abre o programa, só mostra o código 1?

Att,

Marcos


Marcos obrigado, do jeito que vc disse eu consegui consertar o delete e o pesquisar
so que quando eu fecho o programa e abro novamente e tento pesquisar nao aparece nada (eu gostaria que os cadastros ficassem)

Quanto ao XML, não entendi direito. Quando você cadastra, mostra na tela, mas quando você fecha e abre o programa, só mostra o código 1?
eu cadastro e aparece na tela, so que quando fecho e abro novamente o programa os cadastros nao ficam, nao mostra nenhum, gostaria de saber se tem um codigo (botao) para visualizar os cadastros
obrigado
GOSTEI 0
Eros Cardoso

Eros Cardoso

06/09/2013

olha so esse video
http://vimeo.com/45411385
so que nele o cara usa o navigator e o meu no caso seria botoes
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

06/09/2013

Eros, agora entendi... Tem uma propriedade no ClientDataSet que chama "FileName". Você deve informar um nome de arquivo, mesmo que ele não exista, para que o ClientDataSet salve os seus registros. O arquivo é um XML. Informe, por exemplo, "C:\BANCO.XML", que dessa forma o ClientDataSet vai armazenar seus registros nesse arquivo XML. Como te falei, o arquivo não precisa existir. O ClientDataset cria automaticamente.

Att,

Marcos
GOSTEI 0
Eros Cardoso

Eros Cardoso

06/09/2013

Eros, agora entendi... Tem uma propriedade no ClientDataSet que chama "FileName". Você deve informar um nome de arquivo, mesmo que ele não exista, para que o ClientDataSet salve os seus registros. O arquivo é um XML. Informe, por exemplo, "C:\BANCO.XML", que dessa forma o ClientDataSet vai armazenar seus registros nesse arquivo XML. Como te falei, o arquivo não precisa existir. O ClientDataset cria automaticamente.

Att,

Marcos



Marcos, estou com um problema aqui, o pesquisar nao esta funcionando (parece que falta parametros)
e gostaria que pesquisasse somente o que eu colocasse no codigo (por exemplo; digito 1 no codigo e mostrasse na tela somente os codigos com 1)

o deletar, cadastrar e alterar estao funcionando
GOSTEI 0
Wilton Júnior

Wilton Júnior

06/09/2013

olha esse link para vc entender como se faz https://www.devmedia.com.br/quick-tips-locate-no-clientdataset/15708

//pesquisa
procedure TForm1.Button4Click(Sender: TObject);
begin
ClientDataSet1.locate('codigo;nome;telefone',VarArrayOf([edit1.text,edit2.text,edit3.text])[]);
end;

nao precisa por o post para esse caso.
GOSTEI 0
Eros Cardoso

Eros Cardoso

06/09/2013

olha esse link para vc entender como se faz https://www.devmedia.com.br/quick-tips-locate-no-clientdataset/15708

//pesquisa
procedure TForm1.Button4Click(Sender: TObject);
begin
ClientDataSet1.locate('codigo;nome;telefone',VarArrayOf([edit1.text,edit2.text,edit3.text])[]);
end;

nao precisa por o post para esse caso.



wilton obrigado ai pela resposta, o pesquisar eu que tava errando aqui um detalhe, agora ta certo
queria saber como mostrar apenas o que foi pesquisado (eu clico em pesquisar e mostra tudo, eu queria que nao mostrasse os outros itens)
e outra coisa queria que desse um clear (apagar o que ta escrito) cada vez que abrisse o programa (nao deixar gravado o que digitou)
obrigado ae
GOSTEI 0
Wilton Júnior

Wilton Júnior

06/09/2013

https://www.devmedia.com.br/trabalhando-a-propriedade-filter-do-clientdataset-parte-1/13571
https://www.devmedia.com.br/trabalhando-a-propriedade-filter-do-clientdataset-parte-2/13575

cdsInscricoes.Filtered := false;
cdsInscricoes.Filter := Edit1.Text;
cdsInscricoes.Filtered := true;

Acho que é isso que deseja

Os dois link acima pode te ajudar entender melhor.


GOSTEI 0
Eros Cardoso

Eros Cardoso

06/09/2013

https://www.devmedia.com.br/trabalhando-a-propriedade-filter-do-clientdataset-parte-1/13571
https://www.devmedia.com.br/trabalhando-a-propriedade-filter-do-clientdataset-parte-2/13575

cdsInscricoes.Filtered := false;
cdsInscricoes.Filter := Edit1.Text;
cdsInscricoes.Filtered := true;

Acho que é isso que deseja

Os dois link acima pode te ajudar entender melhor.






wilson, tentei colocar esse e nao deu certo aqui, ai pensei de outra forma
um botao pra limpar (clear no dbgrid)
ai coloquei assim
edit1.text:='';
edit2.text:='';
edit3.text:='';

so que isso so limpa o que ta no edit, eu queria um assim...
dbgrid1:='';
nesse modelo, nao apagar o que esta na tabela, apenas limpar
obrigado
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

06/09/2013

Eros, creio que tenha um erro na linha do Filtro. Tente o código abaixo:

ClientDataSet1.Filtered := False; 
ClientDataSet1.Filter:='codigo= '+QuotedStr(Edit1.Text); 
ClientDataSet1.Filtered:=True;


Quanto a limpar o DBGrid sem apagar os registros, não sei se isso é possível.
O que você pode fazer é uma "gambiarra", fazendo um filtro com um valor que nunca vá existir... Aí sim ele não irá retornar nada.

Att,

Marcos
GOSTEI 0
Eros Cardoso

Eros Cardoso

06/09/2013

Eros, creio que tenha um erro na linha do Filtro. Tente o código abaixo:

ClientDataSet1.Filtered := False; 
ClientDataSet1.Filter:='codigo= '+QuotedStr(Edit1.Text); 
ClientDataSet1.Filtered:=True;


Quanto a limpar o DBGrid sem apagar os registros, não sei se isso é possível.
O que você pode fazer é uma "gambiarra", fazendo um filtro com um valor que nunca vá existir... Aí sim ele não irá retornar nada.

Att,

Marcos


marcos, agora sim deu certo o codigo de apagar, so que o pesquisar ainda nao esta dando certo
por ex; eu cadastro um nome la, dpois digito o nome cadastrado e clico em pesquisar e nao aparece nada (deveria aparecer os dados do nome que foi cadastrado), poderia me ajudar
obrigado mais uma vez
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

06/09/2013

Eros, se você estiver procurando pelo nome, terá que fazer o filtro pelo nome. O código que te mandei faz o filtro pelo código.
Você teria que fazer um filtro assim:
ClientDataSet1.Filtered := False; 
ClientDataSet1.Filter:='nome= '+QuotedStr(Edit2.Text); 
ClientDataSet1.Filtered:=True;


Att,

Marcos
GOSTEI 0
Helton Garrido

Helton Garrido

06/09/2013

Meu caro estou com um pequeno problema em resolver uma situação de um código

excluir um item quando chegar na quantidade 0(zero). Ex:

Tenho um produto com quantidade 10 vou fazendo a retirada deste produto de um a um até zerar quando zerá ele excluirá do banco de dados o item.

uso os componentes: IBDataBase, IBTransaction, IBTable, IBQuery

Me ajudem nessa por favor
GOSTEI 0
POSTAR