Dúvida ClientDataSet

07/07/2008

2

Saudações!

Amigos(as), tenho uma dúvida ´besta´. Eu trabalho com os componentes dbxpress, banco sqlserver, delphi 2005. Atualmente, eu tenho utilizado três clientdatasets, um para cada instrução (insert, update, delete). A pergunta é a seguinte, poderia utilizar, ao invés de três, um clientdataset para as instruções citadas anteriormente?

Grato.

[]s


Responder

Posts

07/07/2008

Paulo

Sim, sem nenhum problema:

Cds.Close; Cds.CommandText := ´Select * from tabela´ Cds.Open; Cds.Close; Cds.CommandText := ´Insert Into tabela values(val1,val2)´; Cds.Execute; Cds.Close; Cds.CommandText := ´Delete from tabela´ Cds.Execute;



Responder

08/07/2008

Luiz Henrique

Bom dia Roger, blz

Para cada situacao, temos que adequar nosso projeto. O importante Roger e voce aplicar da maneira correta dentro do teu desenvolvimento as funcoes e finalidades dos componentes.
Conhecer corretamente Metodos/Eventos e funcionamento dos componentes que voce esta usando no momento, facilita e muito o desenvolvimento/ continuacao do teu projeto.

Para operaçoes comuns de cadastro, poderia padronizar o teu CDS e componentes de acesso, configurando-os corretamente como KeyFields, Provider Flags e etc....e usar assim:
Delecao:
CDS.Param...:= valor(key field)
CDS.Delete

CDS.Insert
...valores dos field´s

CDS.Edit.
....valores dos field´s

Nao esqueça dos Post´s e UpplyUpdate....
Componentes e formas de programacao, podem ser usados de diversas formas, mas execute teus projetos baseando-se em POO, reutilizacao de codigo, heranças e etc...
Aprofunde seus conhecimentos antes de elaborar projetos maiores, para nao ter dor de cabeça futura, tendo dificuldades em dar continuidade à projetos em andamento.

Espero que te ajude ai

Abraco e T+


Responder

10/07/2008

Roger1976

Amigos Paulo e Luiz Henrique, desculpem-me pela demora, tive um problema seríssimo com a telefônica, o grande problema é que se eu cancelar não terei opções de banda larga, porque infelizmente o sinal da net, por exemplo, não chega na minha cidade (Guarulhos). Eu coloquei o tema em questão porque na época em que fiz o curso, eu aprendi a criar um cds para cada operação, por exemplo, cdsIncluir, cdsAlterar, cdsExcluir, cdsPesquisar. Nos 2 primeiros, configuro parâmetros, encontrei uma solução onde economizo várias linhas de código quando digito os parâmetros, como no exemplo abaixo:

- Na procedure que eu criei:

procedure TfrmTermosResp.PassaParametrosCampos(vCDS: TClientDataSet);
begin
with vCDS do
begin
close;
params.ParamByName(´RP_PACI_NOM´).AsString := edtResp.Text;
params.ParamByName(´RP_PACI_NAT´).AsString := edtNat.Text;
params.ParamByName(´RP_PACI_RG´).AsString := edtRg.Text;
if mskedtDataNasc.Text = ´ / / ´ then
params.ParamByName(´RP_PACI_DT_NASC´).Value := null
else
params.ParamByName(´RP_PACI_DT_NASC´).AsString := FormatDateTime(´dd/mm/yyyy´, strtodate(mskedtDataNasc.Text));
params.ParamByName(´RP_PACI_END´).AsString := edtEndereco.Text;
params.ParamByName(´RP_PACI_END_NRO´).AsString := edtNro.Text;
params.ParamByName(´RP_PACI_END_COMPL´).AsString := edtCompl.Text;
params.ParamByName(´RP_PACI_END_BAIRRO´).AsString := edtBairro.Text;
params.ParamByName(´RP_PACI_END_CID´).AsString := edtCidade.Text;
params.ParamByName(´RP_PACI_END_CEP´).AsString := mskedtCep.Text;
params.ParamByName(´RP_PACI_TEL´).AsString := edtTel.Text;
if gbSexo.ItemIndex = 0 then
params.ParamByName(´RP_PACI_SEXO´).AsString := ´M´
else
params.ParamByName(´RP_PACI_SEXO´).AsString := ´F´;
// Este parâmetro será aplicado somente na INCLUSÃO do registro
if vModoDataSet = dsInsert then
params.ParamByName(´PACI_COD´).AsString := dm.vPaci_cod;
// Este parâmetro será aplicado somente na ATUALIZAÇÃO do registro
if vModoDataSet = dsEdit then
params.ParamByName(´RP_PACI_COD´).AsInteger := dmAtendimento.cdsCarregarRespPaci.FieldByName(´RP_PACI_COD´).AsInteger;
execute;
end;
end;

No botão Ok:

procedure TfrmTermosResp.btnOkRespClick(Sender: TObject);
begin
if not ValidaCampos then
exit;

GravaRespPaci;
ControlaComponentes(dsBrowse);
end;

Na procedure GravaRespPaci:

procedure TfrmTermosResp.GravaRespPaci;
begin
if vModoDataSet = dsInsert then
PassaParametrosCampos(dmAtendimento.cdsIncluirRespPaci)
else
PassaParametrosCampos(dmAtendimento.cdsAlterarRespPaci);
CarregaDadosResp;
end;

Como disse o amigo Luiz Henrique, deveremos fazer adequações de acordo com o sistema.

A minha preocupação era ao utilizar um clientdataset para incluir, atualizar e excluir dar algum problema. Agradeço muito pelas dicas de vocês e caso queiram acrescentar algo, por favor fiquem à vontade.

[]s


Responder

10/07/2008

Luiz Henrique

Blz roger...
Nestes ´params.ParamByName...´ nao seria ´FieldByName(campo).Value´...

...para atribuir informação a campo, se nao for , desculpe.


Abraco


Responder

10/07/2008

Roger1976

Luiz Henrique, poderia ser sim, mas há várias maneiras de se fazer isto. Neste caso, no commandtext do componente eu coloquei a instrução sql:

insert into RESP_PACI
(PACI_COD, RP_PACI_NOM, RP_PACI_NAT, RP_PACI_RG, RP_PACI_SEXO, RP_PACI_DT_NASC, RP_PACI_END, RP_PACI_END_NRO, RP_PACI_END_COMPL, RP_PACI_END_BAIRRO, RP_PACI_END_CID, RP_PACI_END_CEP, RP_PACI_TEL)
values
(:PACI_COD, :RP_PACI_NOM, :RP_PACI_NAT, :RP_PACI_RG, :RP_PACI_SEXO, :RP_PACI_DT_NASC, :RP_PACI_END, :RP_PACI_END_NRO, :RP_PACI_END_COMPL, :RP_PACI_END_BAIRRO, :RP_PACI_END_CID, :RP_PACI_END_CEP, :RP_PACI_TEL)

Você levantou uma questão interessante, qual destas soluções seria a melhor para em termos de performace, isto é se realmente há alguma.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira