Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Carácter en Firebird utilizando Charset ASCII (https://www.clubdelphi.com/foros/showthread.php?t=88742)

novato_erick 25-07-2015 01:19:54

Carácter en Firebird utilizando Charset ASCII
 
1 Archivos Adjunto(s)
Hola Chicos:

Cómo han estado?


Me ah estado pasando algo curioso en mi base de datos que tiene como Charset ASCII en la cual aparece cuando el usuario en ocasiones hace copy/Paste

Archivo Adjunto 3224

Como pueden ver el usuario realiza un copiado y luego pega agrega al final lo que necesita complementar en la descripción alguien le ah pasado eso y como se puede solucionar?:D


Saludos

novato_erick

Casimiro Notevi 25-07-2015 01:37:17

Esos cuadraditos, evidentemente, son CR + LF (return + avance línea) chr(13) + chr(10)

No son caracteres imprimibles ascii, por eso salen cuadraditos.
Puedes eliminarlos cuando vayas a grabar los datos.

novato_erick 25-07-2015 02:14:23

Cita:

Casimiro Notevi:

Puedes eliminarlos cuando vayas a grabar los datos.
La pregunta es: Eliminar cuando vaya a grabar? como? no se notan cuando se ingresa la descripción y el usuario no lo ve en la interfaz.

Saludos;

Casimiro Notevi 25-07-2015 02:26:58

No puedo adivinar qué haces tú, qué hace tu código, qué hace el usuario... ;)

ecfisa 25-07-2015 06:30:20

Hola novato_erick.

Es decir,
  • ¿ De donde los copia ?
  • ¿ En donde los pega ?
  • ¿ Como y cuando lo guardas ?

Saludos :)

novato_erick 05-08-2015 22:25:10

Hola a todos de nuevo disculpe el atraso que tuve en responder sin embargo ya que me quedé sin internet durante buen rato...

Cita:

ecfisa:

Hola novato_erick.

Es decir,
¿ De donde los copia ?
¿ En donde los pega ?
¿ Como y cuando lo guardas ?
Sinceramente lo que he notado que hacen es en el mismo todo lo hacen desde el mismo programa la configuración de idioma es Español Panamá y respondiendo la tercera interrogante de como y cuando lo guardo utilizando el componente DBExpress de Delphi con tdbxTransaction.

Saludos

ecfisa 06-08-2015 04:39:33

Hola novato_erick.
Cita:

Empezado por novato_erick (Mensaje 495262)
...
Sinceramente lo que he notado que hacen es en el mismo todo lo hacen desde el mismo programa la configuración de idioma es Español Panamá y respondiendo la tercera interrogante de como y cuando lo guardo utilizando el componente DBExpress de Delphi con tdbxTransaction.

No sé cuál de los componentes de la biblioteca DBExpress estás usando, pero el TSimpleDataSet posee el evento OnBeforePost que podrías aprovechar para eliminar los caracteres CR y LF antes del guardado.

Algo parecido a esto:
Código Delphi [-]
procedure TForm.SimpleDataSet1BeforePost(DataSet: TDataSet);
var
  i : Integer;
  sds: TSimpleDataSet;
begin
  sds := SimpleDataSet1;
  sds.Edit;
  for i := 0 to sds.FieldCount-1 do
    if sds.Fields[i] is TStringField then
    begin
      sds.Fields[i].AsString := StringReplace(sds.Fields[i].AsString,#$A,'',[rfReplaceAll]);
      sds.Fields[i].AsString := StringReplace(sds.Fields[i].AsString,#$D,'',[rfReplaceAll]);
    end;
end;

Otra opción es capturar el evento WM_DRAWCLIPBOARD que se dispara cuando el contenido del clipboard es modificado:
Código Delphi [-]
type
  TForm1 = class(TForm)
    ...
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure ClipBoardChanged(var Message: TMessage); message WM_DRAWCLIPBOARD;
  public
  end;

...

implementation

uses Clipbrd;

var
  hClipbrd: HWND;

procedure TForm1.FormCreate(Sender: TObject);
begin
  hClipbrd := GetClipboardViewer;
  SetClipboardViewer(Handle);
end;

procedure TForm1.ClipBoardChanged(var Message: TMessage);
begin
  if Clipboard.HasFormat(CF_TEXT) then // formato texto ? -> eliminar CR y LF
  begin
    Clipboard.AsText := StringReplace(Clipboard.AsText, #$A, '', [rfReplaceAll]);
    Clipboard.AsText := StringReplace(Clipboard.AsText, #$D, '', [rfReplaceAll]);
  end;
end;

// ...

procedure TForm1.FormDestroy(Sender: TObject);
begin
  SetClipboardViewer(hClipbrd);
end;

Saludos :)

novato_erick 06-08-2015 19:49:33

Hola ecfisa:

Gracias por tu sucerencia en la que estoy utilizando:
Cita:

Otra opción es capturar el evento WM_DRAWCLIPBOARD

Hice prueba yo mismo y realmente funciona ahora me toca que más hace el usuario para ver los comportamientos en la db.

Saludos

novato_erick


La franja horaria es GMT +2. Ahora son las 09:06:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi