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