Ver Mensaje Individual
  #6  
Antiguo 30-05-2017
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por TheRafa Ver Mensaje
el problema es al cargarlo en ejecución, que donde debe ir una comilla me mete dos comillas simples
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
Responder Con Cita