Parâmetro de SQL = Null
22/02/2005
0
Estou com o seguinte problema.
Tenho Inserts e Updates via Sql que recebem parametros. Só que em alguns casos os parametros recebem Null, neste momento a Sql dá erro pq tem q receber algum valor.
Exemplo:
with Q do begin Close; Sql.Clear; SQL.Add(´INSERT INTO CLIENTES´); SQL.Add(´(CODIGO,NOME,DATA_NASC)´); SQL.Add(´VALUES SQL.Add(´(:CODIGO,:NOME,:DATA_NASC)´); ParamByName(´CODIGO´).AsInteger := StrtoInt(Edit1.Text); ParamByName(´NOME´).AsString := Edit2.Text; if Edit3.text <> ´´ then ParamByName(DATA_NASC´).AsDate := StrtoDate(Edit3.Text); ExecSql; end;
O problema está na Data_Nasc que pode ou não ter valor. Antes de passá-la verifico se tem valor caso não tenha, como faço para passar um valor Null para o parametro DT_NASC ?
agradecido
Diogo
Diogoalles
Post mais votado
22/02/2005
if Edit3.text <> ´´ then ParamByName(DATA_NASC´).AsDate := StrtoDate(Edit3.Text) else with ParamByName(DATA_NASC´) do begin DataType = ftDate; Clear; Bound := True; end;
Massuda
Mais Posts
22/02/2005
Cristiam
if Edit3.text <> ´´ then ParamByName(DATA_NASC´).AsDate := StrtoDate(Edit3.Text); else ParamByName(DATA_NASC´).AsDate := nil;
Ou
ParamByName(DATA_NASC´).AsDate := ´´;
Se não me engano com isso vc consegue passar nulo. espero poder te ajudar
22/02/2005
Marcio.theis
declaro duas variáveis do tipo string, exemplo: campo, valor: String;
campo:=´CODIGO´; valor:=Edit1.Text; campo:=campo + ´, NOME´; valor:=valor + ´, ´´´ + Edit2.Text + ´´´´; if Edit3.text <> ´´ then begin campo:=campo + ´, DATA_NASC´; valor:=valor + ´, ´´´ + ConverteData(Edit3.Text) + ´´´´; end; with Q do begin Close; Sql.Clear; SQL.Add(´INSERT INTO CLIENTES´); SQL.Add(´(´ + campo + ´)´); SQL.Add(´VALUES (´ + valor + ´)´); ExecSql; end;
Não testei, mas agredito que funcione certinho...
22/02/2005
Diogoalles
Já testei várias formas inclusive passando Null que também dá erro.
agradecido
22/02/2005
Diogoalles
desculpe, mas não funciona a sugestão do ´cristiam´, a sua idéia está ok.
só que como tenho um sistema com mais de 70 Sql onde posso ter valores Null eu gostaria de ver se não tem somente um paramêtro Null pra passar.
agradecido
Diogo
22/02/2005
Massuda
with Q do begin Close; Sql.Clear; SQL.Add(´INSERT INTO CLIENTES´); SQL.Add(´(CODIGO,NOME,DATA_NASC)´); SQL.Add(´VALUES SQL.Add(´(:CODIGO,:NOME,:DATA_NASC)´); ParamByName(´CODIGO´).AsInteger := StrtoInt(Edit1.Text); ParamByName(´NOME´).AsString := Edit2.Text; if Edit3.text <> ´´ then ParamByName(DATA_NASC´).AsDate := StrtoDate(Edit3.Text) else with ParamByName(DATA_NASC´) do begin Clear; Bound := True; end; ExecSql; end;
22/02/2005
Rjun
Depois é so passar Null.
Exemplo :
qryTeste.Parameters.ParamByName(´Parametro´).DataType = ftInteger;
qryTeste.Parameters.ParamByName(´Parametro´).Value = Null;
22/02/2005
Paulo_amorim
Pode-se usar a funçao Clear também não? Até onde eu lembro isso passa NULL pro parâmetro...
qry.ParamByName(´p1´).Clear;
Até+
22/02/2005
Diogoalles
realizei mais uma série de testes e nenhuma das sugestões funcionou.
para o ´qry.ParamByName(´p1´).Clear;´ e para a questão do Massuda, todas deram erro no execsql, não aceitando.
se alguem ainda tiver uma ideia fico agradecido
abraço
Diogo
22/02/2005
Massuda
(não se ofenda com a pergunta!) Por acaso, na definição da tabela CLIENTES, o campo DATA_NASC está como NOT NULL ou coisa parecida?
22/02/2005
Diogoalles
é um Campo normal DATE não é chave nem nada e não é obrigatório valor.
mas o caso não seria só para compos DATE, para campos números, data, hora..(exceto String) dá erro.
Os Erros no Exmplo do Massuda é Invalid Type,
as outras mensagens são que o parametro precisa de valor ou que o valor recebido pelo campo é inválido.
agradecido
Diogo
22/02/2005
Diogoalles
Problema resolvido.
obrigado a todos e fica aqui registrada essa solução.
abraço
Diogo
23/02/2005
Replicante
if Edit3.text <> ´´ then ParamByName(DATA_NASC´).AsDate := StrtoDate(Edit3.Text) else ParamByName(DATA_NASC´).IsNull;
Testei e gravou tranquilo.
23/02/2005
Massuda
ParamByName(DATA_NASC´).IsNull;
Clique aqui para fazer login e interagir na Comunidade :)