Ver Mensaje Individual
  #7  
Antiguo 31-05-2017
TheRafa TheRafa is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Reputación: 0
TheRafa Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Pero es que eres tú mismo quien mete la otra comilla:

Código Delphi [-]for I := 1 to Length(Cad) do begin Aux := Aux+Cad[i]; if Cad[i] = '''' then Aux := Aux+''''; end;


Si Cad[i] es una comilla, la línea

Código Delphi [-]Aux := Aux+Cad[i];


la pone en Aux, PERO, la siguiente línea:

Código Delphi [-]if Cad[i] = '''' then Aux := Aux+'''';


la vuelve a poner.

La verdad es que no tienes porqué agregar nada. En Delphi pones doble comilla simple para que el compilador entienda que es una comilla, ya que en pascal las cadenas van entre comillas simples. Pero esto sólo es necesario cuando escribes la cadena directamente en el código Delphi.

En tu función CadenaSQL, ya recibes una cadena y lo que deberías hacer con esas comillas sería, en todo caso, "escaparlas" con una diagonal \ o con el caracter de escape de tu manejador de bases de datos, pero no colocando una comilla extra porque éso sólo Delphi lo entiende, no el gestor de bases de datos.

Por otro lado, "escapar" tú mismo ese tipo de caracteres no es para nada recomendable. Por ello es que debes usar parámetros. Y cuando digo parámetros no mer refiero a valores que se pasen en tiempo de ejecución, sino a valores que se pasan a la sentencia SQL.

Algo así (aunque depende un poco de los componentes que uses para acceder a BD):

Código Delphi [-]Query.SQL.Text := 'select * from usuario where nombre = :nombre'; Query.ParamByName('nombre').AsString := 'Donald'; Query.Open;


LineComment Saludos
Hola, ya se que soy yo el que mete otra comilla, pero como he comentado antes en delphi5 funcionaba sin problemas, porque llegaba al qry con 2 comillas simples y lo entendía como texto, de hecho el QuotedStr hace exactamente lo mismo, eso es lo que me vuelve loco y no entiendo.
Voy a probar todo el tema con los parámetros y ya os contaré, si se os ocurre algo diferente comentarlo.
De nuevo, gracias por tu tiempo.
Responder Con Cita