[firebase-br] De loucos...

Mário Reis secretariadogeral em acra.pt
Dom Dez 3 14:57:17 -03 2006


Do CHARSET WIN1252 + COLLATE COLLATE PXW_INTL850! Uma String lida de um 
ficheiro assim configurado
dá sempre erro ma minha procedure. O Exemplo está mais abaixo se estiver 
interessado.
QQ forma obrigado


"Fausto" <fausto.s.a em uol.com.br> escreveu na 
mensagem news:4572FC4D.7020308 em uol.com.br...
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







Mais detalhes sobre a lista de discussão lista