Ajuda com DBExpress

Delphi

29/08/2007

Oi pessoal....

Sempre utilizei os componentes da paleta Interbase mas como meu banco é o firebird 2.0 resolvi mudar pra DBExpress, e portanto, to perdido, já to a 2 dias e ainda não consegui m adaptar/dominar nada.

A minha dúvida/problema é o cguint: é possível criar parâmetros em SQLDataSets ou SimpleDataSet utilizados como tabelas (commandtype: ctTable)? Pergunto isso porque utilizo PageControl com uma aba ´Consulta´ e outra ´Cadastro´ dessa forma, queria q após realizar uma pesquisa ou selecionar o registro desejado numa grid na aba consulta o msmo seja ´levado´ à aba cadastro para ser editado ou melhor visualizado (kso possua apenas os campos principais na grid). Utilizandu um IBDataSet eu crio um parÂmetro no próprio SQL q recebe o cod da IBQuery, é tranquilo, mas pelo dbExpress não consigo, ou as vzs nem é possível fazer e eu to viajandu, ou é feito isso d outra forma.

E outro problema q estou tendo é em relação aos comandos, são iguais do IBX Append, Edit, Post...
E como chamar as triggers e generators?

Desde já, grato pela atenção!
Abr. [ ]


Ali_z

Ali_z

Curtidas 0

Respostas

Fabiano Góes

Fabiano Góes

29/08/2007

cara,

com DBExpress você tem um SQLConnection para a conexão com o Banco e um trio de componentes para acessar as tabelas:
SQLDataSet <- DataSetProvider <- ClientDataSet


para criar parametros é facil eis um pequeno exemplo:
no componente SQLDataSet na propriedade CommandText você digita a instrução:
select * from CLIENTES where IDCLIENTE = :IDCLIENTE


neste caso criei o parametro: [b:6c0e8b134c]IDCLIENTE[/b:6c0e8b134c]

no ClientDataSet com um clique de direita você seleciona [b:6c0e8b134c]Fetch Params[/b:6c0e8b134c]
ai quando o usuario seleiona o registro na grid você pega o IDCLIENTE selecionado e passa para o parametro criado:
   ClientDataSet.Close;
   ClientDataSet.Params.ParamByName(´IDCLIENTE´).AsInteger := IDselecionado na grid;
   ClientDataSet.Open


sobre os comandos são iguais e são executados sobre o ClientDataSet: Append, Cancel, Delete, Post

com a diferença que, como o ClientDataSet trabalha desconectado do banco o comando Post grava apenas na memória e não no banco, para gravar os dados no banco deve ser executado [b:6c0e8b134c]ClientDataSet.ApplyIpdates(0);[/b:6c0e8b134c]

acho que isso seria uma pequena prévia do DBExpres
espero ter ajudado !!!


GOSTEI 0
Fabiano Góes

Fabiano Góes

29/08/2007

cara só complementando:

este é um assunto bastante discutido aqui no forum então deve ter bastante material o que facilita o aprendizado.

no site da DevMedia mesmo tem varias videos sobre DBExpress que são muito boas, e tem tambem alguns mini-cursos excelentes.

bom estudo.

abraço !!!


GOSTEI 0
Brunolspp

Brunolspp

29/08/2007

No meu link de downloads gratuitos(abaixo da minha assinatura).

Lá tem uma apostila de desenvolvimento Client/Server com DBExpress bem passo a passo que com certeza irá lhe auxiliar a resolver toda esta questão.


GOSTEI 0
Ali_z

Ali_z

29/08/2007

[quote:8e5e49aa6f=´Fabiano Góes´]cara,

com DBExpress você tem um SQLConnection para a conexão com o Banco e um trio de componentes para acessar as tabelas:
SQLDataSet <- DataSetProvider <- ClientDataSet


para criar parametros é facil eis um pequeno exemplo:
no componente SQLDataSet na propriedade CommandText você digita a instrução:
select * from CLIENTES where IDCLIENTE = :IDCLIENTE


neste caso criei o parametro: [b:8e5e49aa6f]IDCLIENTE[/b:8e5e49aa6f]

no ClientDataSet com um clique de direita você seleciona [b:8e5e49aa6f]Fetch Params[/b:8e5e49aa6f]
ai quando o usuario seleiona o registro na grid você pega o IDCLIENTE selecionado e passa para o parametro criado:
   ClientDataSet.Close;
   ClientDataSet.Params.ParamByName(´IDCLIENTE´).AsInteger := IDselecionado na grid;
   ClientDataSet.Open


sobre os comandos são iguais e são executados sobre o ClientDataSet: Append, Cancel, Delete, Post

com a diferença que, como o ClientDataSet trabalha desconectado do banco o comando Post grava apenas na memória e não no banco, para gravar os dados no banco deve ser executado [b:8e5e49aa6f]ClientDataSet.ApplyIpdates(0);[/b:8e5e49aa6f]

acho que isso seria uma pequena prévia do DBExpres
espero ter ajudado !!![/quote:8e5e49aa6f]


Primeirament, vlw msmo kra pela ajuda, deu pra clareah legal... mas, msmo assim alguns problemas persistem!

Na opção q vc m indicou pra i em ClientDataSet [b:8e5e49aa6f]Fetch Params[/b:8e5e49aa6f], eu encontrei, cliquei, mas naum aconteceu nada.

E no kso da passagem d parâmetros, foi tranquilo a questaum d sql e talz, mas infelizmente naum sei c funcionou ou naum, pois ele naum krrega + os dados do grid pra q possa selecionar um e daí entaum executar o procedimento, eu fechei e abri tantu o SQLDataSet qnto o Client no evento ´onActivate´ do form, mas naum aparec os dados.

Talvez eu tenha realizado alguma ligação errada entre os componentes, vo descrever entaum as ligações q fiz:

ClienteDataSet -> ProviderName -> DataSetProvider1
DataSetProvider1 -> DataSet -> SQLDataSet

Tah certo, ou faltou algo?

Ah... otra coisa, no kso do SQLDataSet, o CommandType está definido como [b:8e5e49aa6f]ctQuery[/b:8e5e49aa6f] por ec motivo eu consegui criar o SQL, kso definido como [b:8e5e49aa6f]ctTable[/b:8e5e49aa6f] ele apenas lista as tabelas, e naum permit q eu modifique o SQl e mto menos q grave informações jah q eh uma ´query´!

O q eu preciso eh q o meu grid (aba consulta) esteja relacionado a uma query q passará um parâmetro ao meu dataset (tabela) para ser editado!

Novamente, grato pela atenção.


GOSTEI 0
Fabiano Góes

Fabiano Góes

29/08/2007

Bom,

só pra desencargo:

a sua DBGrid tem que estar ligado a um DataSource certo ?
esse mesmo data source deve estar ligado ao ClientDataSet e não ao SQLDataSet certo ?

Na opção q vc m indicou pra i em ClientDataSet Fetch Params, eu encontrei, cliquei, mas naum aconteceu nada.


a seguencia deve ser assim:

1) coloque um SQLConnection, configure e teste sua conexão.
2) coloque um SQLDataset e ligue ao SQLConnection, digite seu select no CommandText e tente abrir com Active = True.
3) coloque um DataSetProvider e ligue ao SQLDataSet.
4) coloque um ClientDataSet ligue ao DataSetProvider ai sim com o clique de direito nele selecione [b:1b33268caf]Fetch Params[/b:1b33268caf] vá a propriedade Params e verifique se recebeu o parametro corretamente e teste com Active = True.
5) coloque um DataSource e ligue ao ClientDataSet.
4) coloque uma DBGrid e ligue ao DataSouce

assim você deve vizualizar os dados na Grid.

tenta assim agora .


GOSTEI 0
Ali_z

Ali_z

29/08/2007

bom... qnto a ligação, deu td certo, e descobri q os dados naum apareciam devido o parâmetro, tirandu o parâmetro ele krrega todos os registros, ou seja, o q eu devo fazê pra constar o parâmetro no SQL e ao mesmo tempo exibir todos os dados (ex.: opção ´todos´ num radiogrup)?

e qnto a inserção, edição e gravação dos dados, cm realizar?
qual componente utilizar e cm passar parâmetros nele afim q receba
o id selecionado na grid?

Grato pela atenção....


GOSTEI 0
Fabiano Góes

Fabiano Góes

29/08/2007

Bom cara, exite varias maneiras de fazer isso que você quer, vou dar uma idéia:

em um DataModule coloque os seguintes conponentes:
SQLConnection <- SQLDataSet <- DataSetProvider

na propriedade Options do DataSetProvider configure poAllowCommandText = True (assim você pode colocar os selects no ClientDataSet)

em cada form você coloca 2 ClientDataSet e 2 DataSource sendo um pra Cadastro/Alteração e outro pra Consulta.

no ClientDataSet de Consulta você faz um select assim:
select * from TABELA


NO ClientDataSet de Cadastro você faz o select assim:
select * from TABELA where campoChave = :CampoChave

configure o parametro na propriedade Params.

na aba de consulta do pagecontrol onde vai a grid que vai estar ligado com o DataSource/ClientDataSet de Consulta em um botão Alterar você faz a passagem de parametro para o ClientDataSet de Cadastro/Alteração
ClientDataSet.Close;
ClientDataSetCadastro.Params.ParamByName(´NomeParametro´).AsInteger := 
  ClientDataSetConsulta.FieldByName(´CampoChave´).AsInteger;
ClientDataSetCadastro.Open;
ClientDataSetCadastro.Edit;  


ai você chama a aba de Cadastro do PageControl que deve estar com os DBEdit, etc ... ligados no DataSource/ClientDataSet Cadastro

no botão Salvar você faz:
ClientDataSetCadastro.Post;
ClientDataSetCadastro.ApplyUpdates(0);


se entendi o que você que fazer assim deve dar certo


GOSTEI 0
POSTAR