Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Editar mayúsculas a solo primera en mayúscula por todos los registros (https://www.clubdelphi.com/foros/showthread.php?t=77555)

MartinS 07-02-2012 16:50:23

Editar mayúsculas a solo primera en mayúscula por todos los registros
 
Hola: Tengo una aplicación hecha en Firebird y luego de verificar los datos que se estan cargando he comprobado que la mayor parte de los nombres y direcciones de una de las tablas esta todo en mayusculas.
He desarrollado una pequeña funcion que me acomoda un texto al formato que quiero y es la siguiente:


Código Delphi [-]
Function AcomodarTexto(Original: String): String;
var Resultante,PLetra:string;
    i:integer;
    May : Boolean;
Begin
     PLetra := UpperCase(Copy(Original[1],1));
     i := 2;
     while I <= Length (Original) do
     Begin
     If Original[i] = ' ' then
        May := True else
        May := False;
     If May then
       Begin
       Resultante := Resultante+' ';
       Resultante := Resultante+ UpperCase(Original[I+1]);
       Inc(I);
       End
        else
       Resultante := Resultante+ LowerCase(Original[i]);
       Inc(I);
     End;
      Result := PLetra+Resultante;
end;

En una parte se verifica si existe un espacio y asigna en mayuscula al caracter que sigue ya que en general los nombres son del formato JOSE ANDRES (espacio entre jose y andres) y debe convertirlo a Jose Andres. Hasta aquí parece que funciona (igual acepto sugerencias).
El tema es como aplico esta función u otra a todos los registros de la tabla agentes para que acomode el campo nombres de acuerdo al formato que necesito? "Update Agentes Set nombres = ...... :confused:


Saludos.-

ecfisa 07-02-2012 19:14:20

Hola Martín.

Con referencia a la función probá si de este modo te resulta más eficiente:
Código Delphi [-]
function FirstUpper(Cad: string): string;
var
  i: Integer;
begin
  for i:= 1 to Length(Cad) do
    if (Cad[i] in ['A'..'Z','Á','É','Í','Ó','Ú','Ñ']) and (i <> 1) and (Cad[i-1] <> ' ') then
      Cad[i]:= Chr(Ord(Cad[i])+32);
  Result:= Cad;
end;
Cita:

El tema es como aplico esta función u otra a todos los registros de la tabla agentes para que acomode el campo nombres de acuerdo al formato que necesito?
En cuanto a aplicar la función, si está realizada en Delphi como las anteriores, vas a tener que recorrer la tabla con el componente que utilices e ir modificando los campos.

A modo de ejemplo:
Código Delphi [-]
...
  with IBDataSet1 do
  begin
    First;
    while not Eof do
    begin
      Edit;
      FieldByName('NOMBRE').AsString:= FirstUpper(FieldByName('NOMBRE').AsString);
      Next;
    end;
  end;
...

Saludos.

MartinS 08-02-2012 11:52:16

Impecable como siempre!!!. A eso me refería. Ahora bien para el dataset no veo el post antes del next. Lo olvidaste o va así? y en su caso las sentencias modificar del dataset con cual se ejecutan? Post, UpdateRecord ? :confused:

Disculpa que pregunte todo en el mismo hilo pero vi la oportunidad dado el requerimiento en general.... :D

Gracias y saludos

roman 08-02-2012 17:01:53

Un Post se ejecuta automáticamente cuando se cambia el registro activo, cosa que sucede con el Next. Por ello no es necesario ponerlo explícitamente.

// Saludos

MartinS 08-02-2012 23:40:15

Enterado!!! :D gracias....

Saludos


La franja horaria es GMT +2. Ahora son las 18:11:44.

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