Cadena de caracteres muy larga!

Como estas yo de nuevo! XD

Te molesto por lo siguiente tengo que guenerar una cadena de texto con la sentencia sql para una rutina de actualización de datos a una tabla que se encuentra en un servidor de MySQL, el problema es que son varios campos y sobrepasa el limite de 255 caracteres y la cadena la genero de varios lados Ejemplo:

vWhere = "update direcciones "
vWhere = vWhere + "set código="+ ALLTRIM(STR(vCodigo))+" and "
vWhere = vWhere + "país='" + ALLTRIM(PROPER(thisform.txpais.value)) + "' and "
vWhere = vWhere + "provincia='" + ALLTRIM(PROPER(thisform.txprovincia.value)) + "' and "
vWhere = vWhere + "departamento='" + ALLTRIM(PROPER(thisform.txdepartamento.value)) + "' and "
vWhere = vWhere + "barrio='" + ALLTRIM(PROPER(thisform.txbarrio.value)) + "' and "
vWhere = vWhere + "calle='" + ALLTRIM(PROPER(thisform.txcalle.value)) + "' and "
vWhere = vWhere + "numero=" + ALLTRIM(STR(thisform.txnumero.value)) + " and "
vWhere = vWhere + "piso=" + ALLTRIM(STR(thisform.txpiso.value)) + " and "
vWhere = vWhere + "depto=" + ALLTRIM(STR(thisform.txdepto.value)) + " and "
vWhere1 = "fecha='" + pFecha(thisform.txfecha.value)+ "' and "
IF thisform.chactual.Value = 1
vWhere1 = vWhere1 + "actual='Si' and "
IF cSQL <= 0
cSQL = SQLCONNECT("central")
endif
IF cSQL > 0
vResult = SQLEXEC(cSQL,"update direcciones set actual='No' where código="+ALLTRIM(STR(vCodigo)))
ELSE
vResult = -1
ENDIF
ELSE
vWhere = vWhere1 + "actual='No' and "
ENDIF
vWhere1 = vWhere + "sinc=0 and "
vWhere = vWhere + "codtemp=0"
WAIT windows vWhere

¿Y bueno como puedo hacer? No se como manejar cadenas de caracteres tan grandes y que tengan que insertar datos desde una variable o Texbox o variar el contenido por un IF

¿Cómo puedo hacer?

1 Respuesta

Respuesta
1

Pues por lo que veo tu problema es que el where es muy largo y pues creo que de pronto tendrias que ver alguna manera de en la tabla agregar algun campo que sea unico y asi no tengas que preguntar por tantos campos para actualizar un dato, es la unica manera que veo, trata de ver de esa posibilidad sino me comentas

Bueno si en el ejemplo lo corrijo con eso pero tengo tablas que son mas grandes y cuando tenga que dar un alta? mas que nada a eso estaba enfocada la pregunta como haría para trabajar cadenas de textos mas grandes para poder hacer mis comandos de MySQL desde ya muchas Gracias!

Pues tienes razón estariamos limitados a 254 caracteres y en el caso de un insert largo pues te quedarias truncado, algo q se me ocurre aunque no suene tan bien pues seria hacer el insert de ciertos campos obtener un id y en base a ese id hacer un update de dicho registro para asi guarda el resto de campos, no se si me entiendas, pero tambien deberias ver la opcion de modificar la estructura de tus tablas hasta donde te sea posible

Pues si,
parece ser que no existe forma de hacer lo que quiero que es aumentar
el tamaño de caracteres de una variable!, pero el problema lo solucione
haciendo el mismo en varias variables! también osea tengo sqlexec(cSQL,vWhere + vWhere1 ... ) y funciona bien lo malo es cuando quiero mostrar todos juntos tengo que mostrar uno por uno por pantalla (esto es solo para comprobar que la cadena se genera bien!) ahora el problema que tengo es que a pesar de que la cadena se genera bien y el comando "SQLEXEC" me devuelve el valor 1 informando que el cambio se realizo bien, los valores en la tabla no se actualizan! puedo eliminar, y cargar pero cuando los actualizo no lo hacer no me da error! me informa como correcto! pero los cambios no surten efecto!

Eso si ya debe ser por problema de que en el where algun campo no esta cumpliendo la condicion y si la mayoria son caracteres pues por ahi alguno debe estar pasandote con un espacio o en fin no esta cumpliendo la condicion que deberia y por eso no te actualiza es lo mas probable y de ahi que te digo la necesidad de tener un campo indice unico y de preferencia numerico en tu tabla con el cual puedes diferenciar cada registro y asi no se complique el tema justamente de las actualizaciones

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas