PDA

Ver la Versión Completa : problema al tratar de consultar un registro en firebird 1.5.


El_Chava
26-11-2008, 21:47:08
Hola amigos del foro nuevamente vengo en busca de su ayuda ya que tengo un problema al tratar de consultar un registro en una tabla dentro del firebird les comento que los datos que contiene ahora la tabla los extraje desde un archivo excel ya que eran mas de 1500 registros. bueno ya que los ingrese y estoy consultando registro por registro llega un momento en que al llegar a determinado registro el sistema me manda el siguiente mensaje de error

---------------------------
Debugger Exception Notification
---------------------------
Project Sistema.exe raised exception class EIBClientError with message 'Size Mismatch - Field DESCRIPCION size is too small for data'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
a lo que yo le entiendo es que el tamaño del campo descripcion es pequeño para el dato pero no me dio ningun error al agregar el dato pero bueno segun a lo que le entendi le aumete el size del campo descripcion de la tabla y ya van varias veces que se lo he aumentado y me sigue mandando el mismo error lo que me hace suponer que posiblemente la solucion no es de andar aumentando el tamaño del campo.

sin mas por el momento me despido y esperando su pronta respuesta al problema y le doy las gracias por tomarse el tiempo de leer este mensaje;)

eduarcol
26-11-2008, 22:02:36
Si nos das unas pista es probable que te ayudemos un poco, por ejemplo:

-Que componentes utilizas
-Como te conectas
-Que tienes en el query
-Tienes campos persistentes
-Donde Visualizas los datos

Entre otros detalles que ayudarian a entender el problem

hecospina
26-11-2008, 22:06:54
Hola
Muy extraño el error

Ya que la solucion no es aumentar el tamaño del campo por que no intentas dar al dato el tamaño del campo

Update tabla set DESCRIPCION=CAST(DESCRIPCION AS CHAR(80))

Esto suponiendo que el campo descripcion sea de 80 caracteres en la base de datos

Recuerda la copia de seguridad antes de...

El_Chava
26-11-2008, 23:14:59
Si nos das unas pista es probable que te ayudemos un poco, por ejemplo:

-Que componentes utilizas
-Como te conectas
-Que tienes en el query
-Tienes campos persistentes
-Donde Visualizas los datos

Entre otros detalles que ayudarian a entender el problem

hola y gracias por tomarte la molestia de contestar la respuesta a lo que preguntas son las siguientes:

Que componentes utilizas?
Es el componente Interfaz GH que nuestro amigo Al Gonzalez a desarrollado y nunca he tenido problemas con ellos ya que son componente derivados del IBX
Como te conectas?
Me conecto atravez del componente TghIBDatababase
que tienes el query?
bueno en si para consultar la base de datos no utilzo un query si no directamente utilizo los comandos First, prior, next y last para moverme en los registros de la tabla pero al llegar a cierto registro es cuando me arroja el mensaje

-Tienes campos persistentes?
no

-Donde Visualizas los datos?
en un dbgrid

y de nuevo gracias por su ayuda

El_Chava
27-11-2008, 00:05:32
hola amigos yo de nuevo pues tratando de resolver el problema hice lo siguiente en el dbgrid que enlazo a la tabla articulos le doy doble click para que me saliera la venta de editing gdir.columns ahi agregue todos los campos de la tabla desde ahi elimine del dbgrid la columna descripcion, luego ejecute el programa y al llegar al registro donde se detenia el programa por el error antes mencionado ya no me volvio a salir. entonces es un problema del dbGrid pero necesito mostrar la columna Descripcion en el dbGrid asi que si alguien sabes como solucionar el problema por favor que me ayude a resolverlo. espero que me haya explicado bien y saludos a todos lo que se toman la molestia de leer este mensaje bye.

Al González
27-11-2008, 03:11:27
¡Hola!

Según veo, ese error es lanzado por los IBX, específicamente en el método TIBCustomDataSet.InternalGetFieldData de la unidad IBCustomDataSet.pas:


with CurrentRecord^.rdFields[FMappedFieldPosition[Field.FieldNo - 1]] do
begin
Data := Buff + CurrentRecord^.rdFields[FMappedFieldPosition[Field.FieldNo - 1]].fdDataOfs;
if (fdDataType = SQL_VARYING) or (fdDataType = SQL_TEXT) then
begin
if fdDataLength <= Field.Size then
begin
if (Field is TStringfield) and TStringField(Field).FixedChar then
FillChar(Buffer^, Field.Size, ' ');
Move(Data^, Buffer^, fdDataLength);
if (Field is TStringfield) and TStringField(Field).FixedChar then
PChar(Buffer)[Field.Size] := #0
else
PChar(Buffer)[fdDataLength] := #0;
end
else
IBError(ibxeFieldSizeMismatch, [Field.FieldName]);
end
else
Move(Data^, Buffer^, Field.DataSize);
end;


La consulta SQL está arrojando una descripción de mayor longitud que el tamaño definido del campo. Lo curioso es que, según nos dices, no utilizas campos persistentes. Pero lo que sí es seguro es que tiene que ver con discrepancia en tamaños de campos. Mira si no estás omitiendo algo por ahí y nos comentas.

Saludos.

Al González. :)

El_Chava
27-11-2008, 04:38:23
Hola Al Gonzalez pues ya logre resolver el problema y fue algo tan simple de como lo logre y fue que elimine del data module la ibtable enlazada a la tabla articulos y luego puse un nuevo ibtable enlazada de nuevo a la tabla articulos y con eso ya no me arrojo el error la verdad que muy raro pero bueno se soluciono el problema a todos los que leyeron esta mensaje y respondieron muchas gracias estamos en contacto bye :D

eduarcol
27-11-2008, 13:45:07
Hola Al Gonzalez pues ya logre resolver el problema y fue algo tan simple de como lo logre y fue que elimine del data module la ibtable enlazada a la tabla articulos y luego puse un nuevo ibtable enlazada de nuevo a la tabla articulos y con eso ya no me arrojo el error la verdad que muy raro pero bueno se soluciono el problema a todos los que leyeron esta mensaje y respondieron muchas gracias estamos en contacto bye :D

estas seguro que no son campos persistentes?, me pareciese que si