Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Davi Brito

Obter o Generator

Recommended Posts

Estou desenvolvendo uma aplicação onde estou criando os componente de acesso ao Banco de Dados via código. Como eu faço para o SQLDataSet ter o campo CODIGO com a propriedade Required = false ? Só consegui fazer isso com o componente SQLDataSet da paleta DBExpress mas naun consigo fazer via código. Alguem me ajuda ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou desenvolvendo uma aplicação onde estou criando os componente de acesso ao Banco de Dados via código. Como eu faço para o SQLDataSet ter o campo CODIGO com a propriedade Required = false ? Só consegui fazer isso com o componente SQLDataSet da paleta DBExpress mas naun consigo fazer via código. Alguem me ajuda ?

 

Tente

 

SQLDataSet1.FieldByName('TESTE').Required := True;

Espero ter ajudado.

 

Sandro H. Ramos

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu já tentei isso, mas dá um erro dizendo que "Field Codigo not found".O meu Banco de Dados gera automaticamente o código do cliente (AutoIncremento), o que eu quero fazer é cadastrar um cliente sem precisar preencher o campo código pois o banco irá preencher. Eu penso que pra isso tenho colocar "Required := false " no field Codigo tanto do ClientDataSet quanto no SQLDataSet, mas o SQLDataSet dá erro, já o ClientDataSet não. Alguem pode me ajudar ? Tem que levar em consideração que tudo é criado dinâmicamente. To usando (SQLConnection, SQLDataSet, DataSETProvider e o ClientDataSET)...

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu já tentei isso, mas dá um erro dizendo que "Field Codigo not found".O meu Banco de Dados gera automaticamente o código do cliente (AutoIncremento), o que eu quero fazer é cadastrar um cliente sem precisar preencher o campo código pois o banco irá preencher. Eu penso que pra isso tenho colocar "Required := false " no field Codigo tanto do ClientDataSet quanto no SQLDataSet, mas o SQLDataSet dá erro, já o ClientDataSet não. Alguem pode me ajudar ? Tem que levar em consideração que tudo é criado dinâmicamente. To usando (SQLConnection, SQLDataSet, DataSETProvider e o ClientDataSET)...

 

Olá novamente,

 

lembrando que para usar o comando o DataSet deve estar aberto, caso contrário ele não encontra o campo retornando o erro que você mencionou.

 

Fiz um pequeno teste apenas para mudar essa propriedade de acordo com o que você quer:

 

tmp := TSQLDataSet.Create(nil);
  tmp.SQLConnection := SQLConnection1;
  tmp.CommandText := 'select * from usuarios'; // banco local que tenho para testes
  try
    try
      tmp.Open;
      tmp.FieldByName('ID').Required := False;
      ShowMessage('OK');
    except
      ShowMessage('Erro');
    end;
  finally
    FreeAndNil(tmp);
  end;

com isso não tive erro de retorno.. mas não testei para uma inserção, acredito que o banco retorne um erro mesmo estando Required False se o campo for not null no banco. Eu utilizei trigger de autoincremento apenas com componentes BDE, desque comecei a usar DBExpress uso uma procedure para essa função.

 

Espero ter ajudado.

 

Sandro

Compartilhar este post


Link para o post
Compartilhar em outros sites

sandro eu já tentei fazer isso. Só que no momento da inserção aparece novamente "Field Codido not found". Ele não está encontrando o campo código. Eu já usei o SqlDataSET como ctQuery CtTable mas não dá certo na hora de inserir.

tenta inserir algum registro e vê se isso acontece com você também... antes quando eu usava componentes em tempo de projeto, eu simplesmente adicionava todos os fields com o "Add all Fields". Tentei criar um field com o Nome do campo "Codigo" com as propriedades preenchidas igual a de um componente em tempo de projeto, mas também não deu certo. Sinceramente não tô conseguindo entende o porque, pois no clientdataset eu consigo fazer o "Regquired := false" sem usar o Add all fields mas no SqlDataSet naun tá aceitando... será que é porque estou usando ele como ctTable ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Campos que são autoincremento no BD geralmente não são informados na hora de inserir dados ... isto é, se eu tiver uma tabela com uma estrutura como a abaixo:

 

Tabela AAA
codigo autoincremento,
descricao char(20),
valor int

Ao dar o insert, eu apenas informaria os valores de descricao e valor, visto que o campo autoincremental é automaticamente alimentado pelo BD na inserção... assim sendo, o sql ficaria:

 

Insert into AAA (descricao, valor) values ('XXXX', 10)

Não se informa explicitamente campos autoincrementais no sql de inserção... só para update/delete.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde a todos.

 

Antes de mais nada, verifique a instrução SQL do seu SQLDataSet, possa ser que voce está fazendo junção de tabelas em que há mais de um campo com o nome Codigo e neste caso ele não está identificando qual campo código de qual tabela. Assim sendo, utilize aliases para as tabelas e identifique o campo precedido dos seus aliases desta forma: "Select C.*, E.* From Cliente C Inner Join Estoque E Where C.CodCliente = E.CodCliente".

 

Outra coisa bem peculiar que passa desapercebido e que muita das vezes escrevemos o nome do campo da tabela de um jeito, e na instrução SQL escrevemos de outro jeito, diferenciando apenas por um letra, verifique se o nome do campo Codigo voce não está escrevendo Codido, trocando o "g" pelo "d".

Compartilhar este post


Link para o post
Compartilhar em outros sites

a questão é que eu apenas preciso colocar o campo Codigo do meu componente SQLDataSet como não requerido, porém, quando eu coloco "SqlDataSet.FieldByName('CODIGO').Required := false", aparece uma exceção dizendo "Field Codigo not found", mais isso ocorre somente no SqlDataSet, o ClientDataSet aceita o campo Codigo normalmente. Eu estou criando tudo dinamicamente, mas esse erro no SQLDataSet está me confundindo. Se alguém souber de algo por favor me ajuda aew... Agradeço a atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia a todos.

 

a questão é que eu apenas preciso colocar o campo Codigo do meu componente SQLDataSet como não requerido, porém, quando eu coloco "SqlDataSet.FieldByName('CODIGO').Required := false", aparece uma exceção dizendo "Field Codigo not found", mais isso ocorre somente no SqlDataSet, o ClientDataSet aceita o campo Codigo normalmente. Eu estou criando tudo dinamicamente, mas esse erro no SQLDataSet está me confundindo. Se alguém souber de algo por favor me ajuda aew... Agradeço a atenção.

 

Eu acho que já sei qual é o problema.

 

Na verdade o componente SQLDataSet é um componente que apanha registros unidirecional (navegação única somente para frente - Forward Only), é por essa razão que foi elaborado um componente ClientDataSet para que a navegação fosse bidirecional. Bom mas o que isso tem a haver com o problema do nosso amigo, não sei se isto é verdade, mas acredito que quando o SQLDataSet entrega os dados para o ClientDataSet, obviamente que o faz juntamente com o seu Metadata (Estrutura de campos), e possívelmente se esvazia (dúvida minha). Digo isto porque os componentes unidirecionais são apenas usados para apanhar e enviar registros a banco após um Commit ou um Select, dentro do DBExpress que trabalha com registros desconectados.

 

Tente clicar duas vezes dentro do SQLDataSet e dentro da caixa de diálogo, click com o botão direito do mouse, preencha os campos indo em "Add All Fields", possa ser que isso resolva, nesse caso voce pode até usar assim:

 

  SQLDataSetCodigo.Require := False;

Por outro lado, se o problema persistir, o que há de errado em voce utilizar o ClientDataSet desta forma ?

 

  ClientDataSet.FieldByName('Codigo').Require := False;

Acho até que deveria ser com o ClientDataSet porque e ele que atualiza os dados em um cache local no disco (HD), e os envia para DataSetProvider que cria a instrução SQL necessária para atualização do Banco, acionando somente o SQLDataSet para enviar o receber os registros.

 

 

Espero ter ajudado.

O Senhor é meu Pastor e nada me faltará. SL 23:01.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.