Erro ao passar data em branco para o paramentro de um SP?

Firebird

17/03/2007

Pessoal, nao estou consegundo gravar uma data em branco no stored procedure.

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

Adriano_servitec

Curtidas 0

Respostas

Adriano_servitec

Adriano_servitec

17/03/2007

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; 
E nada continua dando erro.

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; 
e tambem nao funcionou.

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


GOSTEI 0
POSTAR