Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2013
Avatar de Jere_84
Jere_84 Jere_84 is offline
Miembro
NULL
 
Registrado: sep 2011
Ubicación: Córdoba, Argentina
Posts: 214
Poder: 0
Jere_84 cantidad desconocida en este momento
Exclamation Error en Array

Hola club. La verdad que tengo poca experiencia con arrays y me gustaría ver si me pueden ayudar esta vez, este es mi código:

Código Delphi [-]
var
  vFormuABMCiuda: TvFormuABMCiuda;
  BaseFieldTypes: array of TFieldType;

procedure TvFormuABMCiuda.FormCreate(Sender: TObject);
var
  I: integer;
begin
  inherited;
  CrearDataModule(TDataModuleCiuda, DataModuleCiuda);
  AbrirQuery([DataModuleCiuda.ADODataSetCiudad]);

  for I := 0 to DataModuleCiuda.ADODataSetCiudad.FieldCount - 1 do
     if ((DataModuleCiuda.ADODataSetCiudad.Fields[i].DataType = ftString) or (DataModuleCiuda.ADODataSetCiudad.Fields[i].DataType =    ftInteger)) then
     begin
       BaseFieldTypes[i] := DataModuleCiuda.ADODataSetCiudad.Fields[i].DataType;
       JfComboBoxCampoBusca.Items.AddEx(DataModuleCiuda.ADODataSetCiudad.Fields[i].FieldName, DataModuleCiuda.ADODataSetCiudad.Fields[i].DisplayLabel, '', 0, nil);
     end;
  JfComboBoxCampoBusca.ItemIndex := 0;
end;

Me sale error de memoria en esta linea

Código Delphi [-]
 BaseFieldTypes[i] := DataModuleCiuda.ADODataSetCiudad.Fields[i].DataType;

cuando intento asignar al Array.. que estoy haciendo mal?
Responder Con Cita
  #2  
Antiguo 25-04-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Jere_84 Ver Mensaje
Me sale error de memoria en esta linea
Código Delphi [-]
 BaseFieldTypes[i] := DataModuleCiuda.ADODataSetCiudad.Fields[i].DataType;
Hola Jere_84. Es muy importante poner los mensajes de error exactos para saber con más precisión de qué se trata.

Pero, según se puede ver en el código, te ha hecho falta darle un tamaño a la matriz dinámica BaseFieldTypes. Antes del ciclo For puedes llamar al procedimiento SetLength:
Código Delphi [-]
SetLength (BaseFieldTypes, DataModuleCiuda.ADODataSetCiudad.FieldCount);
Y tras finalizar el ciclo For, conviene que ajustes su tamaño a la cantidad de elementos que hayan sido asignados:
Código Delphi [-]
SetLength (BaseFieldTypes, X);
Donde "X" podría ser una variable que lleve la cuenta de las veces que entra el programa a ese If.

Saludos.

Al González.
Responder Con Cita
  #3  
Antiguo 25-04-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Un consejo más. Dado que las constantes ftString y ftInteger son de un tipo enumerado (TFieldType), y por tanto valores ordinales, la doble condición del If puede reducirse a:
Código Delphi [-]
If DataModuleCiuda.ADODataSetCiudad.Fields [i].DataType In [ftString, ftInteger] Then
Esa sola condición pregunta si el valor de la propiedad DataType es uno de los del conjunto expresado entre corchetes detrás la palabra reservada In.

Saludos.
Responder Con Cita
  #4  
Antiguo 25-04-2013
Avatar de Jere_84
Jere_84 Jere_84 is offline
Miembro
NULL
 
Registrado: sep 2011
Ubicación: Córdoba, Argentina
Posts: 214
Poder: 0
Jere_84 cantidad desconocida en este momento
Gracias Al...

Anda perfecto sabes como podría consultar estos datos ya que en otra parte de mi codigo hago algo asi:

Código Delphi [-]
procedure TvFormuABMCiuda.JfEditValorBuscaChange(Sender: TObject);
begin
   if JfRadioGroupTipoBusca.Value = 1 then
    if (JfEditValorBusca.InputText = '') then
    begin
      DataModuleCiuda.ADODataSetCiudad.Filtered := False;
      DataModuleCiuda.ADODataSetCiudad.Filter := '';
    end
    else
    begin
      if BaseFieldTypes[JfComboBoxCampoBusca.ItemIndex] = ftString then
        DataModuleCiuda.ADODataSetCiudad.Filter := JfComboBoxCampoBusca.Value + ' LIKE ' + QuotedStr(JfEditValorBusca.InputText + '*' )
      else
        DataModuleCiuda.ADODataSetCiudad.Filter := JfComboBoxCampoBusca.Value + ' = ' + QuotedStr(JfEditValorBusca.InputText);
      DataModuleCiuda.ADODataSetCiudad.Filtered := True;
    end;

end;

Y me gustaría ver lo que se cargo en el BaseFieldTypes para ver que coincida con el campo que tengo en el combo...
Responder Con Cita
  #5  
Antiguo 25-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Jere_84 Ver Mensaje
...
Y me gustaría ver lo que se cargo en el BaseFieldTypes para ver que coincida con el campo que tengo en el combo...
Hola Jere_84.

Código Delphi [-]
...
implementation

uses  TypInfo;

type
  TArrayFieldTypes = array of TFieldType;

var
  BaseFieldTypes : TArrayFieldTypes;

procedure GetFieldsTypes(aft: TArrayFieldTypes; ts: TStrings);
var
  i: Integer;
begin
  for i:= Low(aft) to High(aft) do
    ts.Add(GetEnumName(TypeInfo(TFieldType), Ord(aft[i])))
end;
...

Llamada ejemplo:
Código Delphi [-]
   GetFieldsTypes(BaseFieldTypes, ListBox1.Items);

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 26-04-2013
Avatar de Jere_84
Jere_84 Jere_84 is offline
Miembro
NULL
 
Registrado: sep 2011
Ubicación: Córdoba, Argentina
Posts: 214
Poder: 0
Jere_84 cantidad desconocida en este momento
Muchisimas gracias lo voy a testear esta noche en mi maquina...

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error al guardar valores en un Array de TRemotable. mlegnazzi Internet 8 20-07-2012 22:40:31
Error con Array of String orlando9427 Varios 1 25-01-2011 05:26:20
Error: Array type required??? Jhonjhon_123 Varios 4 18-05-2010 01:07:54
Error al utilizar Array dinámicos hjpires Varios 0 12-09-2007 19:16:36
Error en Array Trecord. alfredosg19 Varios 1 20-03-2005 17:55:04


La franja horaria es GMT +2. Ahora son las 21:52:51.


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
Copyright 1996-2007 Club Delphi