Fórum Erro ao passar data em branco para o paramentro de um SP? #58021
17/03/2007
0
Pessoal, nao estou consegundo gravar uma data em branco no stored procedure.
Olhem o codigo
O problema esta na linha do codigo em destaque em vermelho.
Estou usando um ibQuery para gravar.
[b:bc9cdf2d43]Nota E18 eh o nome de um MASKEDIT[/b:bc9cdf2d43]
O erro soh ocorre quando tento passar a data em branco
Olhem o codigo
procedure TFCPaciente.Button39Click(Sender: TObject);
begin
if application.messagebox(PChar(´Deseja Gravar este Paciente?´), PChar(´Incluir Dados´+Self.Caption),MB_IConquestion +MB_YesNo)=IDYES then
begin
with dm.spgravapaciente do
begin
close;
SQL.clear;
sql.text :=
´EXECUTE PROCEDURE new_procedure ´ +
´(:id, :paciente, :rg, :cpf, :sexo, :profissao, ´ +
´ :endereco, :numero, :complemento, :bairro, ´ +
´ :cidade, :cep, :uf, :fone, :celular, :fonecom, ´ +
´ :nascimento, :dtcadastro, :email, :convenio, ´ +
´ :titular, :anotacoes, :rgconvenio, :contato, ´ +
´ :nrdep, :matriculatitconv )´;
ParamByName(´paciente´ ).AsString := e1.text;
ParamByName(´rg´ ).AsString := e2.text;
ParamByName(´cpf´ ).AsString := e3.Text;
ParamByName(´sexo´ ).AsString := e4.text;
ParamByName(´profissao´ ).AsString := e16.text;
ParamByName(´endereco´ ).AsString := e5.text;
ParamByName(´numero´ ).AsString := e6.Text;
ParamByName(´complemento´ ).AsString := e7.text;
ParamByName(´bairro´ ).AsString := e8.text;
ParamByName(´cidade´ ).AsString := e9.text;
ParamByName(´cep´ ).AsString := e11.Text;
ParamByName(´uf´ ).AsString := e10.text;
ParamByName(´fone´ ).AsString := e12.text;
ParamByName(´celular´ ).AsString := e14.text;
ParamByName(´fonecom´ ).AsString := e13.Text;
ParamByName(´nascimento´ ).AsDate := StrToDate(e17.Text);
[color=red:bc9cdf2d43]if (e18.Text = ´ / / ´) or (e18.Text = ´´) then
parambyname(´dtcadastro ´).value := null
else
ParamByName(´dtcadastro´ ).AsDate := StrToDate(e18.Text);[/color:bc9cdf2d43]
ParamByName(´email´ ).AsString := e19.text;
ParamByName(´convenio´ ).AsString := e22.Text;
ParamByName(´titular´ ).AsString := e24.text;
ParamByName(´anotacoes´ ).AsString := m1.text;
ParamByName(´rgconvenio´ ).AsString := e23.text;
ParamByName(´contato´ ).AsString := e15.Text;
ParamByName(´nrdep´ ).AsString := e21.text;
ParamByName(´matriculatitconv´).AsString := e25.text;
try
ExecSQL;
dm.tPaciente.Active:=true;
dm.tPaciente.Commit;
except
on E:Exception do
begin
dm.tPaciente.RollBack;
ShowMessage(´Falha na Inclusão dos Dados!´#1310´ Mensagem: ´+E.Message);
dm.tPaciente.Active:=true;
end;
end; //final do try/exeption
end; //final do begin da SQL
end; //final do begin do with
end; //final do codigo
O problema esta na linha do codigo em destaque em vermelho.
Estou usando um ibQuery para gravar.
[b:bc9cdf2d43]Nota E18 eh o nome de um MASKEDIT[/b:bc9cdf2d43]
O erro soh ocorre quando tento passar a data em branco
Adriano_servitec
Curtir tópico
+ 0
Responder
Posts
28/03/2007
Adriano_servitec
Obs: Ja tentei usar no lugar do NULL assim:
if (e18.Text = ´ / / ´) or (e18.Text = ´´) then
[color=green:4357a0c185][b:4357a0c185][i:4357a0c185]parambyname(´dtcadastro´).value := ´´[/i:4357a0c185][/b:4357a0c185][/color:4357a0c185]
else
ParamByName(´dtcadastro´ ).AsDate := StrToDate(e18.Text);
e assim tambem
if (e18.Text = ´ / / ´) or (e18.Text = ´´) then
[color=green:4357a0c185][b:4357a0c185][i:4357a0c185]parambyname(´dtcadastro´).isnull[/i:4357a0c185][/b:4357a0c185][/color:4357a0c185]
else
ParamByName(´dtcadastro´ ).AsDate := StrToDate(e18.Text);
E tambem nao obtive resultado, inclusive tambem mudei de [b:4357a0c185]VALUE[/b:4357a0c185] para [b:4357a0c185]AsDate[/b:4357a0c185] e nada tambem :( .....Usando query simples sem ser SP nao tenho problemas em gravar datas em branco.Tambem tentei assim
ParamByName(´fonecom´ ).AsString := e13.Text; ParamByName(´nascimento´ ).AsDate := StrToDate(e17.Text); if (e18.Text = ´ / / ´) or (e18.Text = ´´) then ParamByName(´dtcadastro´ ).clear else ParamByName(´dtcadastro´ ).AsDate := StrToDate(e18.Text); ParamByName(´email´ ).AsString := e19.text;
Tambem tentei entao passar o valor apenas se o campo for preenchido.
ParamByName(´fonecom´ ).AsString := e13.Text; ParamByName(´nascimento´ ).AsDate := StrToDate(e17.Text); if not ((e18.Text = ´ / / ´) or (e18.Text = ´´)) then ParamByName(´dtcadastro´ ).AsDate := StrToDate(e18.Text); ParamByName(´email´ ).AsString := e19.text;
Inclusive passar como string tambem e nao funcionou.
********************************************
A estrutura da SP eh essa
SET TERM ^ ; CREATE PROCEDURE NEW_PROCEDURE ( id integer, paciente varchar(70), rg varchar(15), cpf varchar(14), sexo varchar(20), profissao varchar(50), endereco varchar(60), numero varchar(10), complemento varchar(30), bairro varchar(50), cidade varchar(50), cep varchar(10), uf varchar(2), fone varchar(14), celular varchar(14), fonecom varchar(14), nascimento date, dtcadastro date, email varchar(60), convenio varchar(60), titular varchar(70), anotacoes blob sub_type 1 segment size 80, rgconvenio varchar(12), contato varchar(40), nrdep varchar(2), matriculatitconv varchar(10)) as begin if ( not exists(select id from paciente where id = :id) ) then Insert Into paciente (id, paciente, rg, cpf, sexo, profissao, endereco, numero, complemento, bairro, cidade, cep, uf, fone, celular, fonecom, nascimento, dtcadastro, email, convenio, titular, anotacoes, rgconvenio, contato, nrdep, matriculatitconv ) Values (:id, :paciente, :rg, :cpf, :sexo, :profissao, :endereco, :numero, :complemento, :bairro, :cidade, :cep, :uf, :fone, :celular, :fonecom, :nascimento, :dtcadastro, :email, :convenio, :titular, :anotacoes, :rgconvenio, :contato, :nrdep, :matriculatitconv); end^ SET TERM ; ^ GRANT SELECT,INSERT ON PACIENTE TO PROCEDURE NEW_PROCEDURE; GRANT EXECUTE ON PROCEDURE NEW_PROCEDURE TO SYSDBA;
******************************************
Bom resolvi criar uma variavel global chamada [b:4357a0c185]dtcad : TDate;[/b:4357a0c185]
ai passar o maskedit para a variavel assim
dtcad:=strtodate(e18.text);
e na hora de passar para SP assim
if dtcad <> null then ParamByName(´dtcadastro´ ).AsDate := dtcad;
Mais a SP esta acusando um erro estranho que nao entendi
[b:4357a0c185][color=red:4357a0c185]Invalid BLOB ID
At procedure ´New_Procedure´[/color:4357a0c185][/b:4357a0c185]
***********************************
[color=blue:4357a0c185]Obs:
New_Procedure eh o nome da SP[/color:4357a0c185]
***********************************
[b:4357a0c185]A estrutura da SP ja esta postada acima, tem algo de errado com ela? Pq agora nao estou mais conseguindo gravar?[/b:4357a0c185]
Tenho esta Trigger para gerar o codigo da ID
CREATE TRIGGER PACIENTE_BI0 FOR PACIENTE ACTIVE BEFORE INSERT POSITION 0 AS begin /* Trigger text */ if (new.ID is null) then select coalesce(max(ID),0)+1 from PACIENTE into new.ID; end
Agradeço a ajuda de todos.
Adriano
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)