Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Convertir State a tipo String (https://www.clubdelphi.com/foros/showthread.php?t=36216)

Marcela 05-10-2006 02:13:24

Convertir State a tipo String
 
:o Hola a todos, requiero que el estado de una tabla (Tabla.State) quede guardado en un campo de tipo string para posteriormente insertarlo en una tabla que realice en Sql donde el campo "Estado" es de tipo varchar(20).

La idea es que en el campo me quede guardado dsBrowse o dsInsert o dsEdit o ds....)

Como hago para poder realizar esto????,

La otra opción podria estar en definir el campo donde va quedar este valor de otra forma (otro tipo que no sea varchar), para que pueda guardarlo directamente, pero no se cual.

Gracias por su colaboracion. :o

Héctor Randolph 05-10-2006 02:53:57

Una opción:

En el archivo DB.PAS está definido este tipo de datos para los estados del DataSet

Código Delphi [-]
  TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
    dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
    dsInternalCalc, dsOpening);

Puedes crear un arreglo que contenga los estados en cadenas de caracteres, pero respetando el mismo orden en el que están definidos



Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
  const MyArray:array[0..12] of String = ('dsInactive', 'dsBrowse', 'dsEdit',
   'dsInsert', 'dsSetKey', 'dsCalcFields', 'dsFilter', 'dsNewValue', 'dsOldValue',
   'dsCurValue', 'dsBlockRead', 'dsInternalCalc', 'dsOpening');

begin
  //Ejemplo de como usarlo
  ShowMessage(MyArray[Ord(IBQuery1.State)]);
end;

Saludos

jachguate 05-10-2006 02:58:53

Para seguir con la idea de Hector (sin meterse a los abismos de RTTI) podes declarar directamente un vector sobre el tipo enumerado:

Código Delphi [-]
function StateToStr(AState: TDataSetState): string;

  const StateDesc:array[dsInactive..dsOpening] of String = 
  ('dsInactive', 'dsBrowse', 'dsEdit',
   'dsInsert', 'dsSetKey', 'dsCalcFields', 'dsFilter', 'dsNewValue', 'dsOldValue',
   'dsCurValue', 'dsBlockRead', 'dsInternalCalc', 'dsOpening');

begin
  Result := StateDesc[AState];
end;

Puede que no compile, pues no lo he probado, pero dejo la idea.

Hasta luego.

;)

Héctor Randolph 05-10-2006 03:00:56

Por otra parte, la instrucción Ord(Query1.State) te devuelve el índice o la posición de cada elemento dentro del arreglo, otra opción es guardar ese índice, es decir, un entero tomando en cuenta lo siguiente

[0] dsInactive
[1] dsBrowse
[2] dsEdit
[3] dsInsert
...


Saludos

roman 05-10-2006 03:21:55

Cita:

Empezado por jachguate
sin meterse a los abismos de RTTI

Bueno, no es que esté muy profundo :)

Código Delphi [-]
uses TypInfo;

function RTTI_StateToStr(State: TDataSetState): String;
begin
  Result := TypInfo.GetEnumName(TypeInfo(TDataSetState), Integer(State));
end;

Por otra parte, un tipo enumerado como lo es TDataSetState no es más que un escalar que puede guardarse como entero:

Integer(Table.State)

y recuperarse con el moldeo inverso:

TDataSetState(3)

En otras palabras, ¿para qué guardar el string, que ocupará más espacio? Mejor cambia el tipo de datos a INTEGER.

Eso sí, me pica la curiosidad de por qué alguien querría guardar este dato en una tabla?

Agrego

Por cierto, en la versió jachguatiana, el arreglo

Código Delphi [-]
const StateDesc:array[dsInactive..dsOpening] of String = ...

también puede ponerse así:

Código Delphi [-]
const StateDesc:array[TDataSetState] of String = ...


// Saludos

Marcela 05-10-2006 17:20:09

Listolis
 
Listo muchas gracias a todos por su colaboracion

jachguate 05-10-2006 19:38:44

Cita:

Empezado por roman
Por cierto, en la versió jachguatiana, el arreglo

:o :o :o :eek: :eek :eek:

nunca había oido cosa semejante... :D:D:D

roman 05-10-2006 19:43:58

¡Oh! ¿Quizá debí decir jachapina? :rolleyes:

:D

// Saludos

jachguate 05-10-2006 20:00:38

:D:D:D muy buena!!! :D:D:D


La franja horaria es GMT +2. Ahora son las 06:17:03.

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