Jump to content

logo_acbr_paygo.png

TEF ACBr PayGo
Seja um revendedor e ofereça uma solução completa para seu cliente.


Saiba mais

beneficios.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png click.png click.png

Salvando String com valor null no postgres utilizando DBExpress e conexão ODBC


  • Este tópico foi criado há 702 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui

Recommended Posts

Boa tarde Pessoal,

   Estou com a seguinte dificuldade.

       - Tenho um campo chamado usuario do tipo character varying em uma tabela com base de dados Postgres.

       - Utilizo o DBExpress com a conexão ODBC

      - Preciso Salvar esse campo em uma determinada situação como null, mais ele sempre esta salvando como ''. Faço da seguinte forma:

                ClientDataset.Edit;
                ClientDataset.FieldByName('usuario=').AsString := '';
                ClientDataset.post;
                ClientDataset.ApplyUpDates(-1);

    Pesquisei e tentei fazer assim, mas ai ele me retorna erro: 'No error Information; Error while executing the query':

                ClientDataset.Edit;
                ClientDataset.FieldByName('usuario').Value := Null;
                ClientDataset.post;
                ClientDataset.ApplyUpDates(-1);

  Se faço o mesmo teste usando Firedac ele salva corretamente como null, tanto usando conexão ODBC como direto pelo driver do Postgres.

  Resumindo, tem alguem que utilize DBExpress com ODBC e conexão postgres, que consiga ou saiba salvar null um campo String?

 

 

Edited by douglas_k
Link to comment
Share on other sites

Em 21/08/2019 at 14:40, douglas_k disse:

Boa tarde Pessoal,

   Estou com a seguinte dificuldade.

       - Tenho um campo chamado usuario do tipo character varying em uma tabela com base de dados Postgres.

       - Utilizo o DBExpress com a conexão ODBC

      - Preciso Salvar esse campo em uma determinada situação como null, mais ele sempre esta salvando como ''. Faço da seguinte forma:

                ClientDataset.Edit;
                ClientDataset.FieldByName('usuario=').AsString := '';
                ClientDataset.post;
                ClientDataset.ApplyUpDates(-1);

    Pesquisei e tentei fazer assim, mas ai ele me retorna erro: 'No error Information; Error while executing the query':

                ClientDataset.Edit;
                ClientDataset.FieldByName('usuario').Value := Null;
                ClientDataset.post;
                ClientDataset.ApplyUpDates(-1);

  Se faço o mesmo teste usando Firedac ele salva corretamente como null, tanto usando conexão ODBC como direto pelo driver do Postgres.

  Resumindo, tem alguem que utilize DBExpress com ODBC e conexão postgres, que consiga ou saiba salvar null um campo String?

 

 

Ainda não encontrei a solução, acredito que vou trocar nesse caso para firedac essas leituras, mais se alguém tiver alguma solução para o DBExpress me avise.

 

Obrigado.

Link to comment
Share on other sites

  • Consultores

Até onde me lembro o código deveria ser algo como:

                ClientDataset.Edit;
                ClientDataset.FieldByName('usuario').Clear;
                ClientDataset.post;
                ClientDataset.ApplyUpDates(-1); 

 

  • Like 1

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

1 hora atrás, EMBarbosa disse:

Até onde me lembro o código deveria ser algo como:

                ClientDataset.Edit;
                ClientDataset.FieldByName('usuario').Clear;
                ClientDataset.post;
                ClientDataset.ApplyUpDates(-1); 

 

Boa tarde, Obrigado pela sugestão. Testei de algumas formas assim, usando o Clear, mais devo estar fazendo algo incorreto, pois mesmo o código executando e não retornando nenhum erro, na base de dados o valor não salva, ele sempre fica com o valor já salvo no campo string. Testei com duas tabelas diferentes, com clientdatasets diferentes e não tive sucesso.

 

Obrigado.

Link to comment
Share on other sites

  • Consultores
Agora, douglas_k disse:

Boa tarde, Obrigado pela sugestão. Testei de algumas formas assim, usando o Clear, mais devo estar fazendo algo incorreto, pois mesmo o código executando e não retornando nenhum erro, na base de dados o valor não salva, ele sempre fica com o valor já salvo no campo string. Testei com duas tabelas diferentes, com clientdatasets diferentes e não tive sucesso.

 

Obrigado.

Se no lugar do clear acontecer o mesmo problema com outros valores então possivelmente é problema na lógica mesmo. Talvez controle transacional.

  • Like 1

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

5 minutos atrás, EMBarbosa disse:

Se no lugar do clear acontecer o mesmo problema com outros valores então possivelmente é problema na lógica mesmo. Talvez controle transacional.

Na verdade se salvo outros valores ele faz corretamente, se por exemplo mover o valor 'Teste' ele salva corretamente, agora o .Clear, simplesmente não altera o valor, fica o mesmo que ja estava.

Link to comment
Share on other sites

8 minutos atrás, douglas_k disse:

Na verdade se salvo outros valores ele faz corretamente, se por exemplo mover o valor 'Teste' ele salva corretamente, agora o .Clear, simplesmente não altera o valor, fica o mesmo que ja estava.

Só para exemplificar, nessa sequencia de testes todos executam e tem o resultado esperado, menos o ultimo que seria o .clear. Ele chega executar só não altera a base de dados.

  dmSupervisor.cldsTeste.Active := False;
  dmSupervisor.cldsTeste.CommandText := 'SELECT * ' +
                                         'FROM sis_usuarios ' +
                                         'WHERE login_siusua=:P1';
  dmSupervisor.cldsTeste.Params[0].DataType := ftString;
  dmSupervisor.cldsTeste.Params[0].AsString := '0';
  dmSupervisor.cldsTeste.Active := True;
  while not dmSupervisor.cldsTeste.Eof do
    begin
      dmSupervisor.cldsTeste.Edit;
      dmSupervisor.cldsTeste.FieldByName('nome_siusua').AsString := 'Teste';
      dmSupervisor.cldsTeste.post;
      dmSupervisor.cldsTeste.ApplyUpDates(-1);
      dmSupervisor.cldsTeste.Next;
    end;

  dmSupervisor.cldsTeste.Active := False;
  dmSupervisor.cldsTeste.CommandText := 'UPDATE sis_usuarios ' +
                                        'SET nome_siusua=null ' +
                                        'WHERE login_siusua=:P1';
  dmSupervisor.cldsTeste.Params[0].DataType := ftString;
  dmSupervisor.cldsTeste.Params[0].AsString := '0';
  dmSupervisor.cldsTeste.Execute;

  dmSupervisor.cldsTeste.Active := False;
  dmSupervisor.cldsTeste.CommandText := 'SELECT * ' +
                                        'FROM sis_usuarios ' +
                                        'WHERE login_siusua=:P1';
  dmSupervisor.cldsTeste.Params[0].DataType := ftString;
  dmSupervisor.cldsTeste.Params[0].AsString := '0';
  dmSupervisor.cldsTeste.Active := True;
  while not dmSupervisor.cldsTeste.Eof do
    begin
      dmSupervisor.cldsTeste.Edit;
      dmSupervisor.cldsTeste.FieldByName('nome_siusua').AsString := 'Outro Teste';
      dmSupervisor.cldsTeste.post;
      dmSupervisor.cldsTeste.ApplyUpDates(-1);
      dmSupervisor.cldsTeste.Next;
    end;

  dmSupervisor.cldsTeste.Active := False;
  dmSupervisor.cldsTeste.CommandText := 'SELECT * ' +
                                        'FROM sis_usuarios ' +
                                        'WHERE login_siusua=:P1';
  dmSupervisor.cldsTeste.Params[0].DataType := ftString;
  dmSupervisor.cldsTeste.Params[0].AsString := '0';
  dmSupervisor.cldsTeste.Active := True;
  while not dmSupervisor.cldsTeste.Eof do
    begin
      dmSupervisor.cldsTeste.Edit;
      dmSupervisor.cldsTeste.FieldByName('nome_siusua').Clear;
      dmSupervisor.cldsTeste.post;
      dmSupervisor.cldsTeste.ApplyUpDates(-1);
      dmSupervisor.cldsTeste.Next;
    end;

 

Link to comment
Share on other sites

  • Consultores
29 minutos atrás, douglas_k disse:

Na verdade se salvo outros valores ele faz corretamente, se por exemplo mover o valor 'Teste' ele salva corretamente, agora o .Clear, simplesmente não altera o valor, fica o mesmo que ja estava.

Pode ser um bug no componente então. Ou no ClientDataSet ou no DBX que você usa por trás.

Lembro de ter tido um problema como esse. Estava até no QC da Embarcadero...

  • Thanks 1

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

14 horas atrás, EMBarbosa disse:

Pode ser um bug no componente então. Ou no ClientDataSet ou no DBX que você usa por trás.

Lembro de ter tido um problema como esse. Estava até no QC da Embarcadero...

Show, contornei usando o update direto com sql, se encontrar alguma solução para o caso publico aqui.

Muito obrigado EMBarbosa.

Até mais.

  • Like 1
Link to comment
Share on other sites

  • Este tópico foi criado há 702 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.