Fórum ApplyUpdates não Salva no Banco #130655

19/03/2010

0

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

Responder

Posts

19/03/2010

Wesley Yamazack

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
Responder

Gostei + 0

19/03/2010

Jorge Silva

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.
Responder

Gostei + 0

21/03/2010

Wesley Yamazack

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
Responder

Gostei + 0

22/03/2010

Jorge Silva

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 ?
Responder

Gostei + 0

22/03/2010

Wesley Yamazack

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
Responder

Gostei + 0

22/03/2010

Jorge Silva

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

Responder

Gostei + 0

22/03/2010

Jorge Silva

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 ?


 
Responder

Gostei + 0

22/03/2010

Wesley Yamazack

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
Responder

Gostei + 0

22/03/2010

Jorge Silva

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
Responder

Gostei + 0

22/03/2010

Wesley Yamazack

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
Responder

Gostei + 0

24/03/2010

Devmedia

Jorge,
a resposta do consultor lhe ajudou? Podemos encerrar o chamado?
Responder

Gostei + 0

24/03/2010

Jorge Silva

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
Responder

Gostei + 0

24/03/2010

Wesley Yamazack

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
Responder

Gostei + 0

24/03/2010

Jorge Silva

ok,

Vou testar amanhã no servidor do cliente.

e retorno com o resultado.

Muito grato,

Jorge
Responder

Gostei + 0

24/03/2010

Wesley Yamazack

Blz amigo, fico no aguardo

Um abraço

Wesley Y
Responder

Gostei + 0

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

Aceitar