Ir para conteúdo

POWERED BY:

Arquivado

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

FlavioTorres

Query + dbgrid + dbnavigator

Recommended Posts

Tenho uma tabela paradox filtrada por uma TQuery que é ligada à um dbgrid.Tenho também um dbnavigator conectado à mesma Query.O Dbnavigator funciona bem para navegar nos registros mas o dbgrid não fica habilitado para o modo de edição, nem tampouco o dbnavigator.Como posso atualizar o banco de dados a partir do dbgrid?Tks Flavio Torres08/ABRIL/2007-> Consegui alguns avanços, agora o grid fica habilitado para edição e os botões do dbnavigator estão ativosmas a tabela ainda não esta sendo atualizada. Eu fiz as seguintes mudanças:1- coloquei no meu datamodule um componente UpdateQuery2- Alterei algumas propriedades da minha query - __2.1- CachedUpdates-> true__2.2- UpdateObject -> apontando para o componente UpdateQuery do item 1.3- O componente UpdateQuery tem a propriedade ModifySQL em que eu posso colocar o codigo SQL para atualização ex: UPDATE "NOMEDATABELA" SET .......WHERE ......... Alguém poderia me dizer se teste tipo de implementação está correto e como eu faço o link entre o grid sendo editado com a atualizaçãoda tabela.Tks Flavio Torres

Compartilhar este post


Link para o post
Compartilhar em outros sites

No AfterPost da Query Faça:

 

procedure TFrmMenu.Query1AfterPost(DataSet: TDataSet);

begin

Query1.ApplyUpdates;

end;

Hugo, eu só consigo colocar o dbnavigator com os botões de edição, post e refresh ativos se eu colocar o componente UPDATE SQL linkado com a Query

pela propriedade Update Object. E quando eu edito o grid e aplico post o programa gera erro "No SQL Statement available" por que eu não coloquei

conteúdo no ModifySQL do Update Object.

 

Como eu posso deixar os botões edit, post e refresh ativos sem utilizar o componente UPDATE SQL?

 

Tks Flavio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente não há como...

 

Seguinte...

 

Para facilitar a sua vida...

 

Coloque no form o Navigator, uma Query, Um DAtaSource e um Update Object...

 

 

Escreve o Select na Query,,, liga ela no DataSource, liga o DBNavigator no DataSource...

 

Tudo normal...

 

 

Mas tenha uma atenção com o Update Object...

 

Dê dois cliques nele, veja se a tabela está de acordo...

 

E clique em Generate SQL e dê OK...

 

Feito isso clique na Query e vá no evento AfterPost e insira o Código abaixo...

 

procedure TFrmMenu.Query1AfterPost(DataSet: TDataSet);

begin

Query1.ApplyUpdates;

end;

Eu fiz aqui em casa e rodou na boa!!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente não há como...

 

Seguinte...

 

Para facilitar a sua vida...

 

Coloque no form o Navigator, uma Query, Um DAtaSource e um Update Object...

 

 

Escreve o Select na Query,,, liga ela no DataSource, liga o DBNavigator no DataSource...

 

Tudo normal...

 

 

Mas tenha uma atenção com o Update Object...

 

Dê dois cliques nele, veja se a tabela está de acordo...

 

E clique em Generate SQL e dê OK...

 

Feito isso clique na Query e vá no evento AfterPost e insira o Código abaixo...

 

procedure TFrmMenu.Query1AfterPost(DataSet: TDataSet);

begin

Query1.ApplyUpdates;

end;

Eu fiz aqui em casa e rodou na boa!!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Hugo, eu fiz o que você disse. Legal eu não conhecia o Generate...

 

Agora esta dando erro quando executa o comando AppyUpdates

 

"UpDate Failed".

 

void __fastcall TDataModule1::QueryKanbanAfterPost(TDataSet *DataSet)

{

QueryKanban->ApplyUpdates();

}

 

 

Tks Flavio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou programando em C++Sim, CachedUpdates está em true.Eu tenho na aplicação uma tabela e ela ativa um outro navigator que consegue atualizar a tabela. Portanto, eu acho que ela não esta em apenas leitura.Como não sei qual o trecho do codigo que você precisa, coloquei o trecho que contém a consulta da query.Tenho três campos edit e um botão de ativação da consulta -Ele monta a consulta de acordo com o preenchimento ou não destes campos edit.void __fastcall TKanbanForm::Button1Click(TObject *Sender){ //Limpa o comando SQL do programa e controi um novo com base nas opcões //feitas String sWhere; DataModule1->QueryKanban->Active = true; DataModule1->QueryKanban->SQL->Clear(); DataModule1->QueryKanban->SQL->Add("SELECT Codpro,Descr,NumKan, QKan, QKanForn, LeadTime, Ativo, Minimo, Maximo, Codfor, Ngrupo, Empresa"); DataModule1->QueryKanban->SQL->Add("FROM wbprod3"); if (FilterCod->Text != "") //filtro pelo codigo sCodpro = " AND Codpro LIKE UPPER (:VARPro)"; else sCodpro = ""; if (FilterAtivo->Text != "") // filtro pelo campo ativo sAtivo = " AND Ativo LIKE :VARAtivo"; else sAtivo = ""; if (FilterDescr->Text != "") // filtro pelo campo descrição sDescr = " AND Descr LIKE :VARDescr"; else sDescr = ""; sWhere = "WHERE Empresa = 1" + sCodpro + sAtivo + sDescr; DataModule1->QueryKanban->SQL->Add(sWhere ); DataModule1->QueryKanban->SQL->Add("ORDER BY Codpro"); //Passa o paramentro para consulta dependendo da expressão em SQL ter sido criada. if(sCodpro!="") DataModule1->QueryKanban->ParamByName("VARpro")->AsString = FilterCod->Text + "%"; if (sAtivo!="") DataModule1->QueryKanban->ParamByName("VARAtivo")->AsString = FilterAtivo->Text; if (sDescr!="") DataModule1->QueryKanban->ParamByName("VARDescr")->AsString = "%" + FilterDescr->Text + "%"; //Prepara e executa o comando DataModule1->QueryKanban->Close(); DataModule1->QueryKanban->Prepare(); DataModule1->QueryKanban->ExecSQL(); DataModule1->QueryKanban->Open();}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voltei a trabalhar no código hoje e encontrei o erro.Eu tinha gerado codigo errado no UpdateSQL Editor.Depois de selecinar...DataSetDefaultsSelect Primay KeysGenerate SQLOkO código funcionou..TKS

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.