Ver Mensaje Individual
  #6 (permalink)  
Antiguo 02/04/2008, 11:18
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Re: Problemas con insert =S

Jurena:
Un error mío: Me estaba olvidando del uso que PHP le da a las comillas. Perdón por ello.

Yendo al tema, en algunos casos he tenido algunos problemas al crear los strings necesarios para ciertas consultas, sea desde VB.net o bien desde otros lenguajes. Especialmente cuando hay que manipular las comillas o caracteres especiales de cualquier tipo.

Un caso ejemplar es cuando se requiere que el string entre con las comillas dentro del mismo("), en otros casos el problema estuvo dado por la conversión de los separadores de decimales, ya que por default en MySQL es el punto, pero dependiendo de la región declarada, esto hacía entrar comas(,) donde debía haber puntos... y la coma es separador de campos de MySQL... Imagínate el problema que causaba esto.

Una de las soluciones que encontré en algunos foros y manuales, era usar la función Char() de VB al construir la sentencia, lo que generaba estructuras del tipo:
Código:
sString = "INSERT INTO Tabla1(Campo1) VALUES(" + Char(39) + _
"valor" + Char(39)
o bien en VB.net
Código:
sString = "INSERT INTO Tabla1(Campo1) VALUES(" + _
ControlChars.Quote + "valor" + ControlChars.Quote
Habría que probar que tal funciona la función CHR() en este caso, y si puede ayudar a manejar mejor el problema.

De todos modos hago hincapié en una prueba que propuse al final, y que a veces es algo tosca pero te permite controlar errores que no entran en la categoría de Exception.

Por un lado, en vez de construir la sentencia dentro de la misma función de llamada al query, es mejor cargarla en una variable primero, de modo que puedas revisarla menjor.
Después, previo a enviarla a MySQL, sería bueno mostrarla para ver si la sintaxis se está construyendo bien. Ocasionalmente se olvidan algunos espacios y ciertos valores se encadenan indebidamente, dando lugar a errores casi imperceptibles a simple vista.
Después, si la consulta falla, sería bueno tomar el string construido y probarlo directamente en la base por medio de uina interfase del tipo MySQL Query Browser (de MySQL), o bien myphpAdmin. Sugiero el primero porque es nativo de MySQL. AL ejecutar la sentencia, puede aparecer cuál es el verdadero problema.