ApplyUpdates não Salva no Banco

19/03/2010

Bom Dia,

Estou realizando processos de cadastros em uma aplicação, no botão “Salvar” coloquei o Applyupdates não identifiquei erro algum, coloquei o comando dentro de um Try e o mesmo passou só que quando visualizei no banco o registro não tinha sido salvo.

O interessante que o processo funcionava com o MSSQLSERVER mas quando troquei o banco para o Oracle passou a não funcionar.

Tem alguma paramentrização nos componentes ou no banco necessária para que o ApplyUpadades funcione ?

Estou usando estrutura Client/Server Utilizando DataSnap
Estou usando TSQLDataSet, TDataSetProvider, TClientDataSet

Fico no Aguardo.


Jorge Farias

Jorge Silva

Jorge Silva

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

19/03/2010

Olá amigo,
   o que funciona para o SQL Server, tem que fucionar para o Oracle, se da mesma forma estava funcionando, para um tem que funcionar para outro, o seu problema, derrepente não esta no ApplyUpdates, mas sim no Oracle.

  Você realmente esta usando o ApplayUpdates no lugar certo  ?

  Na hora de montar as suas instruções SQL, você colocou o Owner das tabelas ?

Exemplo :  Select * from bdauser.cliente


Pois já trabalhei com Oracle a um tempo atras, e ele tinha esta necessidade de colocar o Dono da tabela, para poder ter acesso.

Veja se isso irá lhe ajudar.

Um abraço

Wesley Y
GOSTEI 0
Jorge Silva

Jorge Silva

19/03/2010

O onwer que você está falando é o schema ? Que estou usando no banco, achei que poderia ser alguma coisa com o provider. Estou usando a tela do CommandText editor do TSQLDATASET.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

19/03/2010

Olá amigo,

  O onwner que digo , é o usuário do Oracle, no qual você cria as tabelas e tudo mais, o administrador. Quanto ao CommandText, não tem problema pois é lá mesmo que você tem que colocar, agora por que você achou que fosse problema de provider ?

Um abraço

Wesley Y
GOSTEI 0
Jorge Silva

Jorge Silva

19/03/2010

Bom dia Wesley,

Estava achando que tinha algum problema com a comunicação do TClienteDataSet com o TSqlDataSet (Configuração do Provider)

Coloquei o usuario com que criei as tabelas no commandtext, mas mesmo assim não funcionou.

E agora ?
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

19/03/2010

Bom dia amigo,
   Mas qual é o erro que acontece ? Pois se antes funcionava com um banco, e agora parou de funcionar o problema esta neste novo banco, ele apresenta algum erro ?

Um abraço

Wesley Y
GOSTEI 0
Jorge Silva

Jorge Silva

19/03/2010

Exatamente isso, funcionava mas agora não funciona como disse coloquei o aplyupdates dentro de um try mandando dar uma mensagem se não fosse aplicado ele passe sem problema, utilizei o botão delete e funcionou a questão é só para auterar e inserir dados.

Não dá mensagem nenhuma

Para testas depois do applyupdates coloquei um reflesh esse sim dá erro indicando que nada foi salvo no banco

GOSTEI 0
Jorge Silva

Jorge Silva

19/03/2010

Wesley,

Fiz uma nova tela de cadastro mais simples e vi que o erro está dando no numero que esta dando invalido, originalmente tinha colocado para as chaves um campo do tipo INT no MSSQLSERVER, mas como no Oracle não existe campo do tipo INT troquei para tipo Number.

agora esta exibindo a seguinte mensagem: Numero invalido.

O que devo fazer ?


 
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

19/03/2010

Olá amigo,

   Este erro como você pode notar é por que esta passando um valor inválido, um número inválido, depure o seu código e veja qual é o conteúdo passado para este campo que esta dando erro, caso tenha dúvidas faço o seguinte


Antes de gravar o registro faça isso :

Showmessage(CDSCliente.FieldByName('IDCLiente').Asstring);

Veja qual é o resultado, faça isso para todos os campos da sua tabela, para testar também faça um script na mão e rode direto no Oracle , veja um exemplo


Insert into Cliente (IDCliente, Nome, Sexo)
Values (1, 'Wesley','M');


Veja se isso irá lhe ajudar.

Um abraço

Wesley Y
GOSTEI 0
Jorge Silva

Jorge Silva

19/03/2010

Wesley, Já fiz isso, direto no banco funciona e o valor que estou passando para o campo é um inteiro, lembrando que estou usando os componentes da palheta DBExpress. Estava lendo e vi que o Oracle tem uma tratativa diferente para campos do tipo inteiro, na verdade pelo que entendi o Oracle não tem a opção de um tipo inteiro. Tem tipo Number que não entendi direito como funciona. Complicado Jorge
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

19/03/2010

Olá amigo,
   Há um tempo atraz me deparei com este erro, acabei de me lembrar, faça o seguite selecione o SQLCOnnection , e vá no evento AfterConnect

procedure TMainDM.SQLConnectionAfterConnect(Sender: TObject);
const
    SQL = 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS=''.,''';
begin
   SQLConnection.ExecuteDirect(SQL);
end;


Veja se isso irá resolver seu problema

Um abraço

Wesley Y
GOSTEI 0
Devmedia

Devmedia

19/03/2010

Jorge,
a resposta do consultor lhe ajudou? Podemos encerrar o chamado?
GOSTEI 0
Jorge Silva

Jorge Silva

19/03/2010

Só uma duvida: Estou usando dois conectores um na aplicação cliente e outra na aplicação servidora coloco isto no evento AfterConnect servidora que conecta com o banco ? No aguardo, Jorge
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

19/03/2010

Olá amigo, você esta trabalhando com MultiCamadas ? Não Certo ? Se você tem os dois, coloque nos dois para garantir.

Um abraço

Wesley Y
GOSTEI 0
Jorge Silva

Jorge Silva

19/03/2010

ok,

Vou testar amanhã no servidor do cliente.

e retorno com o resultado.

Muito grato,

Jorge
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

19/03/2010

Blz amigo, fico no aguardo

Um abraço

Wesley Y
GOSTEI 0
Jorge Silva

Jorge Silva

19/03/2010

OK, Wesley Funcionou,

Pode fachar o chamado.

Obrigado.

Jorge
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

19/03/2010

Olá amigo, chamado fechado.

Um abraço

Wesley Y
GOSTEI 0
POSTAR