Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Renanbg

Agenda - Editar informações...

Recommended Posts

Montei uma pequena agenda conforme mostra a imagem

 

Imagem Postada

 

Esta tudo ligado a uma table e um datasource no datamodule

 

Para fazer a consulta coloquei uma query e uma datasource no form e,

 

Então se eu clicar nas letras de A-Z é executada a seguinte SQL

 

DBGrid1.DataSource:=DataSource1;

query1.close;

query1.sql.clear;

query1.sql.text:= 'Select * from TBCADASTRO where Nome LIKE "A%" order by Nome';

query1.open;

 

Funciona bem, mas se eu quiser editar um registro dessa consulta eu não consigo...

 

Tem outra forma de fazer essa consulta para que eu possa editar os resultados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que o grid esta ligado ao datasource do datamodule e para fazer a pesquisa eu tive que ligar ele a um outro datasource e uma query pq senão ele não fazia a busca na tela...

Compartilhar este post


Link para o post
Compartilhar em outros sites

perai...você tm um datamodule certo?nele você tm 2 dts e 2 qry ...um dts esta ligado com o grid e outro esta ligado com o navigator ?pq isso?particularmente lhe aconselharia a usar uma qry so, pq evita grandes trabalhos posteriores ...ambas as qry filtram dados de uma msm tabela naum é? entao qdo você da um post pela qry1 precisa da um close e open da qry2 tbm ... pra ela pegar novamente os dados da tabela ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

No DataModule tenho 1 table e um datasourcegravo e edito os dados com eles...No form da imagem acima tenho uma query e um datasource pois se eu apenas ligasse a query ao datasource do datamodule a busca não ocorria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode sim ...

 

é so fazer assim :

 

coloca o data module nas uses do form q tm o grid, e seta o data source do grid com o dts da adotable:

 

ADOTable.Locate('ID_CONTATO', txtConsulta.text,[]);

 

mais particularmente eu mudaria isso, colocaria no datamodule apenas um qry e um dts ligado ao msm...

 

dai faria tanto consulta qto insercao ou edicao atraves da qry...

edicao = qry.Edit;new  = qry.Append;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei uma query no lugar da table, mas agora (no form onde tenho os dbedits que estavam ligados ao datasource ) a conexao com os campos se perdeu...

 

EX: Seleciono um DBedit, ai seleciono a propriedade datasouce e escolho o datasouce que esta lá ligado a query, mas no datafield não aparece o campo para eu selecionar

 

Agora consegui, só que da o erro abaixo ao tentar inserir um novo registro e a query tbm n reconhece os meus comandos de busca

 

 

Codigo da busca ...da o erro no indexfieldnames

 

if radiobutton1.Checked=true thenfrmdm.tbcadastro.[b]indexfieldnames[/b]:='Nome'
Codigo da inserção

 

frmdm.querycadastro.append;Application.CreateForm(Tfrmedcadastro, frmedcadastro);frmedcadastro.showmodal;
Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

da um duplo click na sua qry ... vai clika com o botao direito do mouse em adiciona os fields ..

 

pra consultar registro no DB faz assim:

 

 

with DataModule.qry dobegin Close; SQL.Clear; SQL.Add('SELECT * FROM TABELA'); SQL.Add('WHERE CAMPO LIKE' + QuotedStr('%' + txtConsulta.text + '%')); Open;end;

 

pra efetuar insercao faz assim:

 

frmedcadastro:= Tfrmedcadastro.Create(Application);if (frmdm.querycadastro.Active = false) thenbegin frmdm.querycadastro.Active:= True;end;frmdm.querycadastro.append;  frmedcadastro.showmodal;

Compartilhar este post


Link para o post
Compartilhar em outros sites

da um duplo click na sua qry ... vai clika com o botao direito do mouse em adiciona os fields ..

fiz isso, mas antes tive q colocar na SQL select * from tbcadastroativer ela e ai sim veio os campos..mas agora fiquei com os problemas q citei acima

Compartilhar este post


Link para o post
Compartilhar em outros sites

nesse caso algum de seus objetos (table) esta somente para leitura....você esta usando os camponentes da palheta (ADO) msm ?

uso da paleta BDE

se estiver usando objetos da paleta BDE, coloque um TUpdateSQL e configure-o! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Nunca usei esse componente, mas vou tentar mecher aquiEdit: pelo que vi tem q colocar a programação do botão alterar, excluir e inserir ali dentro desse componente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mais é estranho estar dando esse erro, se naum existir nenhum objeto setado como read only ...faz um teste ... vai no form q tm sua grid e adiciona um ADOQuery e um DataSource... ligue o ADOQuery com sua Connection .... e no faz a rotina q t passei antes ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, no caso você aponta para qual Tabela ele vai editar, depois clica em Generate SQL e ele lhe faz as instruções automaticamente, PS.: Não se esqueça de colocar na query a propriedade UpdateObject como o que você criou anteriormente...

 

e é só isso...

 

qq dúvida posta aew. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque a propriedade RequestLive como True, vai permitir editar e inserir sem problemas.

Opa...funcionou. obrigado...você tem me ajudado muito...

 

Agora como vou trocar Table por Query tenho mais um problema na busca,

 

Se você olhar a imagem no topo vera que faço a busca de tres formas nos radiobutton

 

codigo do radiobutton

 

if radiobutton1.Checked=true thenfrmdm.tbcadastro.indexfieldnames:='Nome'elseif radiobutton2.Checked=true thenfrmdm.tbcadastro.indexfieldnames:='Endereco'elseif radiobutton3.Checked=true thenfrmdm.tbcadastro.indexfieldnames:='Cidade';edit1.setfocus;edit1.clear;
e codigo do edit

 

procedure Tfrmprincipal.Edit1Change(Sender: TObject);VarMensagem : String;beginif Edit1.Text <> '' thenbegintryif Radiobutton1.Checked=true thenfrmdm.tbcadastro.Locate('Nome',Edit1.Text,[lopartialkey])elseif Radiobutton2.Checked=true thenfrmdm.tbcadastro.Locate('Endereco',Edit1.Text,[lopartialkey])elseif Radiobutton3.Checked=true thenfrmdm.tbcadastro.Locate('Cidade',Edit1.Text,[lopartialkey]);exceptMensagem := 'Consulta muito longa, digite menos caracteres.';if Application.MessageBox(PCHAR(Mensagem), 'Agenda de Telefones', MB_ICONINFORMATION + MB_OK)=MROK thenEdit1.clear;edit1.SetFocus;end;end;
Só que com a query o comando indexfieldnames não é reconhecido

 

como posso fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa... Bom que funcionou... :DCom a query, você precisa usar o comando ORDER BY, e mandar ordenar pelo campo desejado da tabela...

select *from tabela order by tabela.campo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.