Clipper/FiveWin - Recordser

   
Vista:

Recordser

Publicado por JUAN MORALES (37 intervenciones) el 20/11/2009 15:43:38
Hola Amigos, desde un listbox, trato de modificar un recordset, el cual lo hace bien pero al mostrar el valor en el campo get me trunca el tamano del campo solo hasta donde fue grabado, me explico el campo descripcion esde 50 char y al insertalo solo grabe 10 ,, al modificarlo y presentarlo en el get me lo trunca a 10 y no me deja insertarle mas carcacteres, alguna razon o sugerencia.. me faltara alguna instruccion...


IF nuevo = .t.
oRs:ADDNEW() // crea un nuevo registro en blanco
oRs:Fields("cuenta"):value := SPACE(9)
oRs:Fields("descta"):value := SPACE(50)
ENDIF
DEFINE DIALOG oDlg RESOURCE "CUENTA_CT"

REDEFINE GET oRs:Fields("cuenta"):value ID 101 of oDlg
REDEFINE GET oRs:Fields("descta"):value ID 102 of oDlg

REDEFINE BUTTON ID 110 OF oDlg action ( lSalvar := .T. , oDlg:End() )
REDEFINE BUTTON ID 120 OF oDlg ACTION ( lSalvar := .F. , oDlg:End() ) CANCEL

ACTIVATE DIALOG oDlg CENTERED

IF lSalvar
oRs:UPDATE()
oRs:REQUERY()
IF !empty(oRs:Filter)
oRs:REQUERY()
ENDIF
ELSE
IF SiNuevo
oRs:DELETE()
oRs:REQUERY()
ENDIF
ENDIF
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Recordser

Publicado por Gabriel Pascual (914 intervenciones) el 21/11/2009 01:04:42
Sin preguntar que herramienta SQL estás usando te comento que ese es un comportamiento normal de los SQL.

Por motivos de ahorro de espacio de almacenamiento, los SQLs truncan los valores guardados a su longitud real de caracteres, por ejemplo si tienes un campo llamado NOMBRE CHAR 50 y en ellos almacenas la palabra "GABRIEL" entonces solo se utilizan 7 caracteres, los otros 43 no se usan.

En un DBF es lo contrario, el valor del campo te devuelve "GABRIEL"+43 espacios en blanco a la derecha, pero dado que un SQL está diseñado para almacenar millones y millones de datos, es muy importante optimizar el tema del almacenamiento, con lo cual, no merece la pena desperdiciar 43 espacios en blanco por registro cuando se pueden utilizar para almacenar mas datos utiles.

Como yo lo hago es volcando a variables temporales los valores del recordset, y luego sumarle los espacios en blanco que faltan, y posteriormente lo que hago es editar las variables temporales, despues de la edición actualizo los campos del recordset.

cVar := oRS:FIELDS("nombre"):Value + SPACE(50 - LEN(oRS:FIELDS("nombre"):Value))
...
...
...

REDEFINE GET oGet VAR cVar .........
...
...
....

oRS:Fields("nombre"):Value := cVar
oRs: UPDATE()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Recordser

Publicado por Juan Morales (37 intervenciones) el 21/11/2009 20:13:16
Gracias hermano,, me lo imagine asi..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar