Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas con procedure con parametro BLOB (https://www.clubdelphi.com/foros/showthread.php?t=77579)

LEVV 08-02-2012 21:13:19

Problemas con procedure con parametro BLOB
 
Hola de nuevo a todos..

Estoy creando una sentencia para Interbase 7.5 para que me adicione un registro con una observacion por cliente .. el problema es que cuando envio un texto como parametro en el Blob me sale error interno..

PERO ... esta sentencia funciona perfectamente en Interbase XE..

¿que estoy haciendo mal? o ¿como puedo hacer para que funcione en ambos Interbase..???

Es necesario que funcione asi como procedure pues es invocado en varios Triggers.. y en el Programa...


GRACIAS



--------- LA TABLA --------------
CREATE TABLE CLIENTES_CREDITO_LOG
(
CODCLI VARCHAR(20) NOT NULL,
ITEM INTEGER NOT NULL,
CREDITO INTEGER,
FCREAC TIMESTAMP,
USUARI VARCHAR(10),
OBSERVA BLOB SUB_TYPE TEXT SEGMENT SIZE 80,
CONSTRAINT PK_CLIENTES_CREDITO_LOG PRIMARY KEY (CODCLI, ITEM)
);




---------EL PROCEDURE ------------

CREATE PROCEDURE "SP000_GRABAR_CLIENTES_CREDITO_LOG"
(
WCODCLI VARCHAR(20),
WITEM INTEGER,
WCREDITO INTEGER,
WUSUARI VARCHAR(10),
WOBSERVA BLOB SUB_TYPE TEXT SEGMENT SIZE 80
)
AS
DECLARE VARIABLE WX INTEGER;

BEGIN
/*
-------- Ejemplos de Uso ------


-- Funciona Bien ---
Execute Procedure SP000_GRABAR_CLIENTES_CREDITO_LOG('201112312',0,1, 'MAN' ,NULL);
Execute Procedure SP000_GRABAR_CLIENTES_CREDITO_LOG(New.CodCli,-1,0, New.Usuari,NULL);
Execute Procedure SP000_GRABAR_CLIENTES_CREDITO_LOG(New.CodCli,-1,0, New.Usuari,NULL);

-- Funciona MAL ---
Execute Procedure SP000_GRABAR_CLIENTES_CREDITO_LOG('20516612143',-1,0,'MAN',' Sin Comentarios...');


*/
WX=0;
IF (WItem is Not Null) Then
Select Count(0) From Clientes_Credito_Log Where (CodCli=:WCodCli) And (Item=:WITEM) Into :WX;
IF ((WX is Null)or(WX=0)) Then
Insert Into Clientes_Credito_Log ( CodCli, Item, Credito, Usuari, Observa)
Values(:WCodCli,:WITEM,:WCredito,:WUsuari,:WOBSERVA);
Else
Update Clientes_Credito_Log Set Credito =:WCredito,
Usuari =:WUsuari,
Observa =:WObserva
Where CodCli=:WCodCli And Item=:WITEM;
END;

kapcomx 08-02-2012 21:16:21

varchar
 
y si declaras la observacion como tipo varchar (200)....
yo siempre la uso asi...:cool:

LEVV 08-02-2012 21:22:20

Puedo Declarar el Parametro WObserv como varChar(20000) pero.. vuelve a tener el mismo problema cuando lo quiero asignar al Insert o al Update...

Casimiro Notevi 09-02-2012 01:07:09

Recuerda encerrar el código entre etiquetas, ejemplo:



.

LEVV 09-02-2012 14:54:01

HA OK.. gracias.. no sabia como

ojala que asi quede OK...:D

--------- LA TABLA --------------
Código SQL [-]
CREATE TABLE CLIENTES_CREDITO_LOG
(
   CODCLI  VARCHAR(20) NOT NULL,
   ITEM INTEGER NOT NULL,
   CREDITO  INTEGER,
   FCREAC  TIMESTAMP,
   USUARI  VARCHAR(10),
   OBSERVA BLOB SUB_TYPE TEXT SEGMENT SIZE 80,
   CONSTRAINT PK_CLIENTES_CREDITO_LOG PRIMARY KEY (CODCLI, ITEM)
);



---------EL PROCEDURE ------------
Código SQL [-]
CREATE PROCEDURE "SP000_GRABAR_CLIENTES_CREDITO_LOG"
(
  WCODCLI  VARCHAR(20),
  WITEM INTEGER,
  WCREDITO  INTEGER,
  WUSUARI  VARCHAR(10),
  WOBSERVA BLOB SUB_TYPE TEXT SEGMENT SIZE 80
)
 AS
  DECLARE VARIABLE WX INTEGER;
 BEGIN
   WX=0;
   IF (WItem is Not Null) Then
     Select Count(0) From Clientes_Credito_Log Where (CodCli=:WCodCli) And (Item=:WITEM) Into :WX;
   IF ((WX is Null)or(WX=0)) Then
     Insert Into Clientes_Credito_Log ( CodCli, Item, Credito, Usuari, Observa)
                                        Values(:WCodCli,:WITEM,:WCredito,:WUsuari,:WOBSERVA);
    Else
     Update Clientes_Credito_Log Set Credito =:WCredito,
                                                  Usuari =:WUsuari,
                                                  Observa =:WObserva
        Where CodCli=:WCodCli And Item=:WITEM;
 END;


/*
-------- Ejemplos de Uso ------


-- Funciona Bien ---
Código SQL [-]
Execute Procedure SP000_GRABAR_CLIENTES_CREDITO_LOG('201112312',0,1, 'MAN' ,NULL);
Execute Procedure SP000_GRABAR_CLIENTES_CREDITO_LOG(New.CodCli,-1,0, New.Usuari,NULL);
Execute Procedure SP000_GRABAR_CLIENTES_CREDITO_LOG(New.CodCli,-1,0, New.Usuari,NULL);
-- Funciona MAL ---
Código SQL [-]
Execute Procedure SP000_GRABAR_CLIENTES_CREDITO_LOG('20516612143',-1,0,'MAN',' Sin Comentarios...');


*/


Porfa.. ¿alguna solucion para que la variable BLOB reciba el texto...??

GRacias :)

Casimiro Notevi 09-02-2012 15:15:59

Cita:

Empezado por LEVV (Mensaje 424648)
ojala que asi quede OK...:D

Mucho mejor ;)

¿No hay documentación de interbase donde expliquen qué han añadido de nuevo o qué han cambiado con la anterior versión?.
Porque así a simple vista, por lógica, no tiene mucha explicación.


La franja horaria es GMT +2. Ahora son las 00:10:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi