Fórum dbExpress ( atualizando tabela DBGrid ) #328858
07/09/2006
0
IBDataset.SelectSql.add(´SELECT * FROM tabela ORDER BY DATA´);
a questão é que agora no turbo delphi, estou usando dbExpress, pela falta dos componentes IBX, entao ja fiz minha primeira conexao com sucesso, consigo visualizar em tempo de execussão os dados da tabela no DBGrid, etc....
como fasso essa atualização que fazia antes com IBX em dbExpress clicando em um botão??? nao sei se estou certo, mas creio que o componente que se igualará ao IBDataset para realizar essas rotinas seria o ClientDataSet, estou certo?
Componentes que estou usando na conexão:
- SQLConnection
- SQLDataset
- DataSource
- DataSetProvider
- ClientDataSet
Banco de dados: Firebird 1.5.3
Abraços!
Mahdak
Curtir tópico
+ 0Posts
07/09/2006
Marco Salles
voce fez isto ???
para atualizar algum dado , o clientdataset permite a edição.. Basta alterar o que voce quer na Grid e faer
ClietDataset.applyupdates(0); por exemplo....
Gostei + 0
07/09/2006
Mahdak
o que eu gostaria mesmo é de saber em qual componente eu vou trabalhar os comandos SQL de forma ao meu DBGrid atualizar os dados em tempo de execussão, como eu fazia com o IBX, e como trabalhar...
exemplo:
procedure TPrincipal.Btn_CancelarClick(Sender: TObject); begin Componente.Cancel; // Atualiza tabela + DBGRID Componente.Close; Componente.SQL := ´SELECT * FROM tabela order by DATA´; Componente.Open; end;
nao sei se fiz me entender...
abraços!
Gostei + 0
07/09/2006
Marco Salles
para isto voce deve usar a propreidade ComandText do ClientDataSet
ClientDataSet1.CommandText:=´coloque aqui sua isnstrução´; ClientDataSet1.Close; ClientDataSet1.Open;
[b:05983dee4f]voce deve alterar a propriedade poAlowComandText para True do DataSetProvider1... Isto de altera em Options no Objecto Inspector[/b:05983dee4f]
tente ai...
so um detalhe... quem trabalha com clientDataSet , vicia.. é o melhor componente que a borland Ja fez , sem sombra de duvida
Gostei + 0
07/09/2006
Mahdak
erro: SQLDataSet : cannot perform this operation on a OPEN DataSet
Gostei + 0
07/09/2006
Marco Salles
ClientDataSet1.CommandText:=´coloque aqui sua isnstrução´; ClientDataSet1.Close; ClientDataSet1.Open;
[b:881f7265ab]o certo é[/b:881f7265ab]
ClientDataSet1.Close; ClientDataSet1.CommandText:=´coloque aqui sua isnstrução´; ClientDataSet1.Open;
Gostei + 0
07/09/2006
Giordano
giordano
Gostei + 0
08/09/2006
Arc@njo
Uma outra sugestão que poderia ser utilizada é a seguinte, pelo que entendi vc quer atualizar os dados apresentados no DBGrid por ordem de data, se sua necessidade for simplesmente alterar a ordem dos dados apresentados pode ser usado o seguinte:
procedure TPrincipal.Btn_CancelarClick(Sender: TObject); begin ClientDataSet1.IndexFieldName:=´DATA´; ClientDataSet1.First; End;
A propriedade IndexFieldName do ClientDataSet pode receber qualquer campo existente na lista de campos do ClientDataSet (exceção para os campos virtuais, calculados, loockups, etc), atraves dela vc podera ordenar sua tabela por seus campos sem a necessidade de executar outro acesso ao banco de dados, evitando assim o trafego na rede, pois o ClientDataSet trabalha com a tabela na memoria e todo seu acesso é na memoria, ate ser feita a atualização no banco, atraves da rotina ApplyUpdates, ou cancelada as atualizacoes por CancelUpdates.
Como disse Marco Salles:
Espero ter ajudado
Gostei + 0
08/09/2006
Mahdak
seta na opção ready only do componente para true se vc quer editar os dados direto nele
Aproveitando o tópico....
Alguem sabe me dizer onde está, nos componentes dbExpress a propriedade equivalente ao ´GeneratorField´ do componente IBData Set da paleta interbase... ?????
abração!
Gostei + 0
08/09/2006
Mahdak
SQLDataSet2.Close; SQLDataSet2.CommandText := ´Select GEN_ID(gen_agenda_id,1) as PROX from RDB$DATABASE´; SQLDataSet2.Open; Edit_Codigo.text := IntToStr(SQLDataSet2PROX.AsInteger); ClientDataSet1.Open; ClientDataSet1.Insert; // comandos para salvar no banco.... ClientDataSet1.post ClientDataSet1.applyupdates;
Gostei + 0
08/09/2006
Arc@njo
Gostei + 0
08/09/2006
Mahdak
abração!
Gostei + 0
08/09/2006
Mahdak
com os componentes da paleta IBX eu trabalhava as transações nas tabelas colocando por exemplo, um código parecido com o que segue abaixo nos eventos AfterDelete e AfterPost do IBDataset
Tr_Cidade = IBTransaction
if Not Tr_Cidade.InTransaction then Tr_Cidade.StartTransaction; Try if Tr_Cidade.InTransaction then Tr_Cidade.CommitRetaining Except if Tr_Cidade.InTransaction then Tr_Cidade.RollbackRetaining; end;
tem como realizar essas transações com dbExpress??? se sim, como e em qual componente? por que tentei da maneira acima aqui e nao funcionou com os componentes da minha conexao aqui...
abração!
Gostei + 0
08/09/2006
Mahdak
if Not Tr_Cidade.InTransaction then Tr_Cidade.StartTransaction; Try if Tr_Cidade.InTransaction then Tr_Cidade.CommitRetaining Except if Tr_Cidade.InTransaction then Tr_Cidade.RollbackRetaining; end;
ta na mão: http://forum.devmedia.com.br/viewtopic.php?t=58547
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)