[firebase-br] RES: De loucos...
Mário Reis
secretariadogeral em acra.pt
Seg Dez 4 18:00:47 -03 2006
Andei aqui na lista à procura da V/informação melhor do limite de caracteres
da exception e não encontro lembra-se do tamanho do nº de caracteres. Tenho
a minha s_out/ou/S_erro definida como varchar(254)? Quanto deveria ser.
Obrigado
Mário
"José Aparecido da Silva"
<joseasilva em bol.com.br> escreveu na mensagem
news:20061204114812.3943C480001F4 em smart3.bol.com.br...
Outro dia li aqui na lista que exception tem limitação quanto ao numero de
caracteres a ser apresentado. Não será isso que está acontecendo!
-----Mensagem original-----
De: lista-bounces em firebase.com.br
[mailto:lista-bounces em firebase.com.br] Em
nome de Fausto
Enviada em: domingo, 3 de dezembro de 2006 14:33
Para: Mário Reis; FireBase
Assunto: Re: [firebase-br] De loucos...
Do que vc esta falando???
Fausto
Mário Reis escreveu:
> Caríssimos,
>
> Uma decepção!!! A UDF funciona mas quanto ao exemplo da Procedure
> MS_NO('APL034', New.Var) já não. E, o pior é que não percebo
> porque razão recebo sempre a mensagem: "Arithemetic overflow or division
by
> zero has occured. Arithmetic exception, numeric oferflow or string
> truncation.", isto sempre que a String a formatar vem do meu fichero de
> mensagens.
>
> No entanto se passar a mensagem HardCoded tipo:
> S1=Udf_Format('O Cliente %S indicado, não se encontra registado',
> NEW.My_NCLI) seguido de: EXCEPTION STOP S1, funciona, sempre e na
perfeição.
> Tenho as Variáveis de ficheiro MSG.MSG_TXT (varchar(130) CHARACTER SET
> WIN1252 NOT NULL COLLATE PXW_INTL850 ) quer as da Procedure(Varchar(254)
> CHARACTER SET WIN1252 ) ou seja, ambas do mesmo tipo.
>
> Serei eu que não percebo nada disto ou estaremos perante um bug do
> FireBird1.5 ou 2.0. É que tenho o mesmo problema com ambos.
>
> Haverá alguém capaz de dar ajuda para perceber que raio se está a passar.
> Obrigado
> Mário Reis
>
>
> Antes havia escrito assim, e, p/qq razão não ficou registado no grupo nem
> sei a onde foi parar:
>
> Olhem acabei resolvendo assim. É uma adaptação de um exemplo desse que há
> aos montes na NET Que pena não lembro o autor.
> Mas é assim: como não consigo passar um array of const do Firebird para
esta
> função resolvi assim e creio, deve dar para todas as necessidades
> só temos de fazer Cast( ??? AS CHAR/VARCHAR) que de resto funciona sempre.
É
> o meu modesto contributo mas, acredito que pode ser util a todos.
>
> Cumprimentos de um novato do Firebird.
>
> Mário Reis
>
> PS-Desculpem qq coisa.
>
> function udf_format(Str, Str_Rpl: PChar): PChar; cdecl; export;
> Var Str1,Str2,Str3:String;
> nlen, npos, pos1:Integer;
> begin
>
> nPos:=0;
> nLen:=2;
> str1 := ''; str2 := ''; str3 := '';
> pos1 := pos(';',Str_Rpl); // Isolar os pedaços separados por
> Ponto&Vírgula
> if pos1 = 0 then
> begin
> npos := pos('%S', Str);
> if nPos>0 Then
> Str := Pchar(StuffString(Str, npos, nLen, Str_Rpl));
> end
> else
> begin
> str3 := Str_Rpl;
> repeat
> str1 := copy(str3,1,pos1-1);
> str2 := copy(str3,pos1+1,(length(str3)-length(str1)));
> npos := pos('%S', Str);
> Str := PChar(StuffString(Str, npos, nLen,Str1));
> str3 := str2;
> pos1 := pos(';',str3);
> until pos1 = 0;
> end;
>
> Result := Str;
> StrPCopy(Str, Copy(Str,1,254));
>
> end;
>
> Exemplo:
>
> CREATE PROCEDURE MS_NO(
> S_IN CHAR(6) CHARACTER SET WIN1252,
> S_RPL VARCHAR(254) CHARACTER SET WIN1252)
> RETURNS(
> S_OUT VARCHAR(254) CHARACTER SET WIN1252)
> AS
> BEGIN
> /* Procedure body */
> Select msg_txt from MSG Where Msg_No=:s_IN into S_OUT ;
> if (s_out=' ') then
> Exception Stop 'Erro campo «Código Erro» vazio: ';
> ELSE
> S_OUT=udf_format(s_out, s_rpl);
>
> SUSPEND;
> END;
>
> // Registo no FireBird:
>
> DECLARE EXTERNAL FUNCTION UDF_FORMAT
> CSTRING(254) CHARACTER SET WIN1252,
> CSTRING(254) CHARACTER SET WIN1252
> RETURNS CSTRING(254) CHARACTER SET WIN1252
> ENTRY_POINT 'udf_format' MODULE_NAME 'tbudf';
>
>
>
>
>
> ------------------------------------------------------------------------
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> ------------------------------------------------------------------------
>
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.5.430 / Virus Database: 268.14.19/555 - Release Date:
27/11/2006 18:09
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista