Fórum TSQLDataSet ou TClientDataSet? #412971

19/02/2012

0

Galera,

estou em dúvida em qual componente devo dar o insert.

TSQLDataSet ou TClientDataSet?

Estou utilizando da seguinte maneira:

TSQLConnection > TSQLDataSet > TDataSetProvider > TClientDataSet > TDataSource
Fábio Banhos

Fábio Banhos

Responder

Posts

19/02/2012

Marco Salles

Se for no aplicativo (cliente) voce deve dar no CDS

Clientdataset.append >>> clientdataset.post >> clientDataSet.ApplayUpdates(0);

se for na camada do servidor voce vai utilizar intruções Sql .. Insert Into configurado no TSqldataSet

quando na Applicação abri e fechar o clientDataSet , por meiuo do DataSetprovider , ele resolvera
o Insert Into que esta na Camada do servidor de Aplicação

ps) Alguns utilizam o commandText do Clientdataset em conjunto com a devida configuração do
datasetProvider para executar Sql no Banco . esta prática não é aconselhável numa estrtura DataSnap
Lugar de Sql é no servidor de aplicação e não no Cliente

ps) sobre o tópico
https://www.devmedia.com.br/forum/delphi/412957-Verificando-o-tipo-do-campo-selecionado-no-DBGrid.html
voce não consegui resolver ????

Responder

Gostei + 0

19/02/2012

Fábio Banhos

Cara,

eu sempre trabalhei com Delphi conectado ao SQL Server utilizando componentes ADO.
Agora estou tendo a necessidade de trabalhar com o Firebird e para conectar ao banco estou utilizando componentes dbExpress.
Para conectar ao banco SQL Server utilizando ADO faço da seguinte maneira:

ADOConnection > ADOQuery > DataSource

- Conecto o ADOConnection ao banco.
- Faço referencia do ADOConnection na ADOQuery.
- Coloco o comando SQL na ADOQuery.
- Faço referencia da ADOQuery no DataSource

Assim, quando quero inserir um novo registro, eu simplesmente faço o comando ADOQuery.Insert.

Mas agora, com o dbExpress estou em duvida como faço isso. Estou fazendo da seguinte maneira:

TSQLConnection > TSQLDataSet > TDataSetProvider > TClientDataSet > TDataSource

- Conecto o TSQLConnection ao banco.
- Faço referencia do TSQLConnection ao TSQLDataSet.
- Faço o comando SQL no TSQLDataSet.
- Faço referencia do TSQLDataSet no TDataSetProvider.
- Faço referencia do TDataSetProvider no TClientDataSet
- E faço referencia do TClientDataSet no TDataSource.

Quando necessário pegar valor de algum campo, estou pegando do TClientDataSet:

VARIAVEL := TClientDataSet.FieldByName(CAMPO).AsString;

E para inserir um novo registro, estou fazendo o comando TClientDataSet.Insert.

Fazendo assim o programa está compilando normalmente, mas quando clico em Salvar os dados aparentemente não estão sendo guardados.
Dou um close e open no TSQLDataSet e no TClientDataSet para ver se atualiza os dados mas não acontece nada.

Com todas as informações acima, aparentemente estou fazendo certo e só mes descuidei com o TClientDataSet.Post?
Tens algumas dicas e macetes que pode me ajudar a entender melhor?
Responder

Gostei + 0

19/02/2012

Marco Salles

Fazendo assim o programa está compilando normalmente, mas quando clico em Salvar os dados aparentemente não estão sendo guardados.
Dou um close e open no TSQLDataSet e no TClientDataSet para ver se atualiza os dados mas não acontece nada.

Com todas as informações acima, aparentemente estou fazendo certo e só mes descuidei com o TClientDataSet.Post?
Tens algumas dicas e macetes que pode me ajudar a entender melhor?


È assim , nesta arquitetura os Dados ficam na memória . O Post não Aplica essa atualização no Banco

Voce deve editar , inserir , deletar utlizando o CDS , depois para aplicar estas modificações que estão
no Delta do Cds e sera enviado ao datasetProvider , voce tem que dar um APPLAYUPDATES(0)

Agora se tiver algum erro , vc não conseguirá aplicar , vc acha que foi mas não foi

Tem que utilizar o Evento OnReconcileError do Cds (ou evebtos do DataSetProvider Prefiro)
para ver se houve algum erro. Pois a Exceção lançada no ApplayUpdates é selenciosa

Voce pode testar tb

if cds.ApplayUpdates(0) = 0 then
significa que não deu erro .. Ai com certeza os dados foram aplicados
else
xiiiiiiiiiiiii
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar