Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-05-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Error al activar Indice Secundario

Hola a todos. De nuevo solicito vuestra ayuda, las bases de datos no son mi fuerte, ya os habréis dado cuenta.

La cuestión es la siguiente:
Estoy usando D7 y bases Paradox en un sistema Master/Detail.
En la base Detalle, necesito instalar un índice específico para un campo ftDate. (Lo llamo "FechCitaActo")

Tanto si dejo activado el índice ("Fe"), asignando su nombre a la propiedad "IndexName" en el Object Inspector, como si lo activo por código, se produce el mismo error al abrir la base Detalle ("Actos.DB") o al insertar un registro en la base Maestro ("Clien.DB"), aunque no haya ningún registro en la base Detalle.
Copio el texto del error en inglés: "Could not convert variant of type (String) into type (Date)"

No me deja crear la base, si está activado el índice "Fe".

Aunque sea un poco pesado, transcribo parte del fichero .dfm, por si alguno tenéis un ratito par echarle un vistazo y encontráis el error que yo soy incapaz. (LLEVO 4 DÍAS COMPLETOS, BUSCANDO EN EL CLUB Y HACIENDO PRUEBAS)

GRACIAS ANTICIPADAS.

Código Delphi [-]
  object ClienDB: TTable
    DatabaseName = '\'
    SessionName = 'Default'
    FieldDefs = <
      item
        Name = 'His'
        Attributes = [faRequired]
        DataType = ftString
        Size = 7
      end
      item
        Name = 'NIF'
        Attributes = [faRequired]
        DataType = ftString
        Size = 12
      end
      item
        Name = 'Nom'
        Attributes = [faRequired]
        DataType = ftString
        Size = 50
      end
      item
        Name = 'AutoNum'
        Attributes = [faReadonly]
        DataType = ftAutoInc
      end
      item
        Name = 'Compa1'
        DataType = ftString
        Size = 15
      end
      item
        Name = 'Compa2'
        DataType = ftString
        Size = 15
      end
      item
        Name = 'Compa3'
        DataType = ftString
        Size = 15
      end
      item
        Name = 'Compa4'
        DataType = ftString
        Size = 15
      end
      item
        Name = 'Poliza1'
        DataType = ftString
        Size = 25
      end
      item
        Name = 'Poliza2'
        DataType = ftString
        Size = 25
      end
      item
        Name = 'Poliza3'
        DataType = ftString
        Size = 25
      end
      item
        Name = 'Poliza4'
        DataType = ftString
        Size = 25
      end
      item
        Name = 'Tel1'
        DataType = ftString
        Size = 12
      end
      item
        Name = 'Tel2'
        DataType = ftString
        Size = 12
      end
      item
        Name = 'Mail'
        DataType = ftString
        Size = 50
      end
      item
        Name = 'Dir'
        DataType = ftString
        Size = 50
      end
      item
        Name = 'CP'
        DataType = ftString
        Size = 5
      end
      item
        Name = 'Pob'
        DataType = ftString
        Size = 40
      end
      item
        Name = 'Prv'
        DataType = ftString
        Size = 30
      end
      item
        Name = 'FNac'
        DataType = ftString
        Size = 10
      end
      item
        Name = 'LoManda'
        DataType = ftString
        Size = 40
      end
      item
        Name = 'TotSesio'
        DataType = ftSmallint
      end
      item
        Name = 'PendSesio'
        DataType = ftSmallint
      end
      item
        Name = 'FaltasSesio'
        DataType = ftSmallint
      end
      item
        Name = 'TotConsul'
        DataType = ftSmallint
      end
      item
        Name = 'PendConsul'
        DataType = ftSmallint
      end
      item
        Name = 'FaltasConsul'
        DataType = ftSmallint
      end
      item
        Name = 'TotPagado'
        DataType = ftCurrency
      end
      item
        Name = 'TotDeuda'
        DataType = ftCurrency
      end
      item
        Name = 'FaltaSeguidasCon'
        DataType = ftSmallint
      end
      item
        Name = 'FaltaSeguidasSes'
        DataType = ftSmallint
      end>
    IndexDefs = <
      item
        Name = 'ClienDBIndex1'
        Fields = 'His;NIF;Nom'
        Options = [ixPrimary, ixUnique]
      end
      item
        Name = 'Ni'
        Fields = 'NIF'
        Options = [ixCaseInsensitive]
      end
      item
        Name = 'Hi'
        Fields = 'His'
        Options = [ixCaseInsensitive]
      end
      item
        Name = 'No'
        Fields = 'Nom'
        Options = [ixCaseInsensitive]
      end>
    IndexName = 'No'
    StoreDefs = True
    TableName = 'Clien.DB'
    Left = 108
    Top = 30
    object ClienDBHis: TStringField
      FieldName = 'His'
      Required = True
      Size = 7
    end
    object ClienDBNIF: TStringField
      FieldName = 'NIF'
      Required = True
      Size = 12
    end
    object ClienDBNom: TStringField
      FieldName = 'Nom'
      Required = True
      Size = 50
    end
    object ClienDBAutoNum: TAutoIncField
      FieldName = 'AutoNum'
      ReadOnly = True
    end
    object ClienDBCompa1: TStringField
      FieldName = 'Compa1'
      Size = 15
    end
    object ClienDBCompa2: TStringField
      FieldName = 'Compa2'
      Size = 15
    end
    object ClienDBCompa3: TStringField
      FieldName = 'Compa3'
      Size = 15
    end
    object ClienDBCompa4: TStringField
      FieldName = 'Compa4'
      Size = 15
    end
    object ClienDBPoliza1: TStringField
      FieldName = 'Poliza1'
      Size = 25
    end
    object ClienDBPoliza2: TStringField
      FieldName = 'Poliza2'
      Size = 25
    end
    object ClienDBPoliza3: TStringField
      FieldName = 'Poliza3'
      Size = 25
    end
    object ClienDBPoliza4: TStringField
      FieldName = 'Poliza4'
      Size = 25
    end
    object ClienDBTel1: TStringField
      FieldName = 'Tel1'
      Size = 12
    end
    object ClienDBTel2: TStringField
      FieldName = 'Tel2'
      Size = 12
    end
    object ClienDBMail: TStringField
      FieldName = 'Mail'
      Size = 50
    end
    object ClienDBDir: TStringField
      FieldName = 'Dir'
      Size = 50
    end
    object ClienDBCP: TStringField
      FieldName = 'CP'
      Size = 5
    end
    object ClienDBPob: TStringField
      FieldName = 'Pob'
      Size = 40
    end
    object ClienDBPrv: TStringField
      FieldName = 'Prv'
      Size = 30
    end
    object ClienDBFNac: TStringField
      FieldName = 'FNac'
      Required = True
      Size = 10
    end
    object ClienDBLoManda: TStringField
      FieldName = 'LoManda'
      Size = 40
    end
    object ClienDBTotSesio: TSmallintField
      FieldName = 'TotSesio'
    end
    object ClienDBPendSesio: TSmallintField
      FieldName = 'PendSesio'
    end
    object ClienDBFaltasSesio: TSmallintField
      FieldName = 'FaltasSesio'
    end
    object ClienDBTotConsul: TSmallintField
      FieldName = 'TotConsul'
    end
    object ClienDBPendConsul: TSmallintField
      FieldName = 'PendConsul'
    end
    object ClienDBFaltasConsul: TSmallintField
      FieldName = 'FaltasConsul'
    end
    object ClienDBTotPagado: TCurrencyField
      FieldName = 'TotPagado'
    end
    object ClienDBTotDeuda: TCurrencyField
      FieldName = 'TotDeuda'
    end
    object ClienDBFaltaSeguidasCon: TSmallintField
      FieldName = 'FaltaSeguidasCon'
    end
    object ClienDBFaltaSeguidasSes: TSmallintField
      FieldName = 'FaltaSeguidasSes'
    end
  end
  object ActosSource: TDataSource
    DataSet = ActosDB
    Left = 200
    Top = 30
  end
  object ActosDB: TTable
    OnCalcFields = ActosDBCalcFields
    AutoRefresh = True
    DatabaseName = '\'
    SessionName = 'Default'
    FieldDefs = <
      item
        Name = 'His'
        Attributes = [faRequired]
        DataType = ftString
        Size = 7
      end
      item
        Name = 'FechCitaActo'                    // aqui
        DataType = ftDate
      end
      item
        Name = 'Espe'
        DataType = ftString
        Size = 15
      end
      item
        Name = 'Compa'
        DataType = ftString
        Size = 15
      end
      item
        Name = 'Profe'
        DataType = ftString
        Size = 15
      end
      item
        Name = 'NumOrden'
        Attributes = [faReadonly]
        DataType = ftAutoInc
      end
      item
        Name = 'CitConSes'
        DataType = ftString
        Size = 3
      end
      item
        Name = 'HoraCitaActo'
        DataType = ftString
        Size = 5
      end
      item
        Name = 'SiPaga'
        DataType = ftString
        Size = 1
      end
      item
        Name = 'SiAsiste'
        DataType = ftString
        Size = 1
      end
      item
        Name = 'Obs'
        DataType = ftString
        Size = 70
      end
      item
        Name = 'EurPaga'
        DataType = ftCurrency
      end
      item
        Name = 'EurProfe'
        DataType = ftCurrency
      end
      item
        Name = 'Poliza'
        DataType = ftString
        Size = 25
      end>
    IndexDefs = <
      item
        Name = 'ActosDBIndex1'
        Fields = 'His;FechCitaActo;Espe;Compa;Profe;NumOrden'
        Options = [ixPrimary]
      end
      item
        Name = 'Fe'
        Fields = 'FechCitaActo'                          // Aquí
        Options = [ixCaseInsensitive]
      end>
    MasterFields = 'His'
    MasterSource = ClienSource
    StoreDefs = True
    TableName = 'Actos.DB'
    Left = 172
    Top = 30
    object ActosDBHis: TStringField
      FieldName = 'His'
      Required = True
      Size = 7
    end
    object ActosDBFechCitaActo: TDateField                   // Aquí
      FieldName = 'FechCitaActo'
      Required = True
    end
    object ActosDBHoraCitaActo: TStringField
      FieldName = 'HoraCitaActo'
      Required = True
      Size = 5
    end
    object ActosDBProfe: TStringField
      FieldName = 'Profe'
      Size = 15
    end
    object ActosDBCompa: TStringField
      FieldName = 'Compa'
      Size = 15
    end
    object ActosDBEspe: TStringField
      FieldName = 'Espe'
      Size = 15
    end
    object ActosDBCitConSes: TStringField
      FieldName = 'CitConSes'
      Size = 3
    end
    object ActosDBSiPaga: TStringField
      FieldName = 'SiPaga'
      Required = True
      Size = 1
    end
    object ActosDBSiAsiste: TStringField
      FieldName = 'SiAsiste'
      Required = True
      Size = 1
    end
    object ActosDBObs: TStringField
      FieldName = 'Obs'
      Required = True
      Size = 85
    end
    object ActosDBEurPaga: TCurrencyField
      FieldName = 'EurPaga'
    end
    object ActosDBEurProfe: TCurrencyField
      FieldName = 'EurProfe'
    end
    object ActosDBCliente: TStringField
      FieldKind = fkCalculated
      FieldName = 'Cliente'
      Size = 50
      Calculated = True
    end
    object ActosDBPoliza: TStringField
      FieldName = 'Poliza'
      Size = 25
    end
    object ActosDBNumOrden: TAutoIncField
      FieldName = 'NumOrden'
      ReadOnly = True
    end
  end
  object ClienSource: TDataSource
    DataSet = ClienDB
    Left = 138
    Top = 30
  end
  object Database1: TDatabase
    SessionName = 'Default'
    Left = 276
    Top = 42
  end
end
Responder Con Cita
  #2  
Antiguo 15-05-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
No tengo tiempo de leerme todo, pero intuyo que el fallo se debe al hecho de que la tabla es detalle de otra.

Supongo que tienes tabla A relacionada con otra B y quieres cambiar el índice activo de la tabla relacionada con lo cual no funcionará la propiedad Master-Detai.

Yo crearía un nuevo Ttable y en este que no está relacionada con nada cambiaría el índice activo sin ningún problema......

Ya nos dirás.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 15-05-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Gracias, Marcos, una vez más por tu desinteresada y eficiente ayuda.

Estoy convencido de que tienes razón, (¡como siempre!).

Lo que necesito conseguir es un filtrado de la tabla detalle por fechas en tiempo de ejecución, para sacar de aquí ciertos valores-resumen basados en el resto de campos.

Te ruego que me orientes, si tienes alguna otra idea que no sea recorrer toda la tabla, (pues puede llegar a ser muy extensa en número de registros).

No sé si sería muy lenta la ejecución del programa si hubiera que duplicar la tabla detalle y reindexarla. Además tampoco sé como hacerlo, aunque supongo que podría aprenderlo.

La tercera opción sería mantener un duplicado de la tabla detalle con el índice por fechas. Aunque esta opción sería la última que me gustaria implementar, pues dado que las tablas Paradox tienden a fallar, multiplicaríamos esta posibilidad. Y, aunque el programa realiza copias de seguridad diarias, desearía no tener que utilizarlas nunca.

No sé qué hacer. Tú ¿qué me aconsejarías?

Siempre agradecido.
Un Saludo.
Responder Con Cita
  #4  
Antiguo 15-05-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Creo que no me has entendido bien. No se trata de tener 2 tablas detalle sino dos Ttable que son el componente de conexión con las tablas uno de ellos tendría relación maestro/detalle y el otro no, este segundo se usaría para el filtrado, pero ahora que explicas más lo que quieres, sería mejor en vez de utilizar un segundo Ttable utilizar un Tquery y en este utilizando SQL extraer los datos.
Código Delphi [-]
Var
dIni,dFin:TDate;
Begin
..
Query1.Sql.Close;
Query1.Sql.Clear;
Query1.Sql.Add('Select * from MiTabla');
Query1.Sql.Add('Where Fecha between :F1 And :F2');
Query1.ParamByName(F1).AsDate:=dIni;
Query1.ParamByName(F2).AsDate:=dFin;
Query1.Open;


Esta consulta le pones un TDataSource y a éste por ejemplo le conectas con una rejilla para ver el resultado, dIni y dFin que son variables de tipo fecha habrá que capturarlas antes de realizar la consulta.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 16-05-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
GRACIAS, de nuevo, Marcos.

Soy muy novato en tablas, disculpa las barbaridades que pueda decir.

Nunca he utilizado un TQuery, pero voy a hacerte caso y lo voy a estudiar y utilizar. Ya te contaré.

Surgen algunas dudas.
1.-¿Necesito mantener el índice "Por fechas" en la base detalle para usar el TQuery?
2.-¿Cómo accedo a los registros del intervalo de fechas seleccionado, para obtener sumas y proporciones?
3.-¿La tabla de referncia del TQuery, se especifica en tiempo de ejecución, no en la fase de disaño?

GRACIAS, otra vez, me pongo con el TQuery?
Un saludo.
Responder Con Cita
  #6  
Antiguo 18-05-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Hola, otra vez.

Estoy intentando instaurar el TQuery como te comenté.

Pero no me compila las siguientes líneas. (Uso Delphi 7)
Código Delphi [-]
Query1.Sql.Close;  // He tenido que cambiar por Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add('Select * from MiTabla');
Query1.Sql.Add('Where Fecha between :F1 And :F2');
Query1.ParamByName(F1).AsDate:=dIni; // "Undeclared identifier: 'F1' "
Query1.ParamByName(F2).AsDate:=dFin; // "Undeclared identifier: 'F2' " 
Query1.Open;

No sé si D7 no admite estos comandos...

Respecto a mis 3 preguntas.

la númro 1 no tengo ni idea.
las otras dos, creo que las tengo solucionadas, aunque como no he podido compilarlo, no estoy seguro.

Si alguien sabe sacarme de mis apuros, muchas gracias, si no, seguiremos peleando.

Saludos a todos.
Responder Con Cita
  #7  
Antiguo 18-05-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Yo mismo me respondo.
Faltaban los apóstrofos (')
Código Delphi [-]
Query1.Sql.Close;  // He tenido que cambiar por Query1.Close;Query1.Sql.Clear;Query1.Sql.Add('Select * from MiTabla');Query1.Sql.Add('Where Fecha between :F1 And :F2');Query1.ParamByName('F1').AsDate:=dIni;Query1.ParamByName('F2').AsDate:=dFin; Query1.Open;

Bien, he conseguido compilar el código, pero no consigo listar el contenido.
Ya os contaré.
Saludos.
Responder Con Cita
  #8  
Antiguo 18-05-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Hola de nuevo.
Perdonad que el código saliera en una línea, pero no me explico por qué. Sólo hice copiar y pegar entre los corchetes de código.

!! SOLUCIONADO !!

Con este código:
Código Delphi [-]
dIni:=StrToDate(FechaDesde.Text);
dFin:=StrToDate(FechaHasta.Text);
Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add('Select * from Actos.DB');
Query1.Sql.Add('Where FechCitaActo between :F1 And :F2');
Query1.ParamByName('F1').AsDate:=dIni;
Query1.ParamByName('F2').AsDate:=dFin;
Query1.Open;

Siempre estamos aprendiendo.
Lo más importante de este post es lo que me dijo Marcos:
"Supongo que tienes tabla A relacionada con otra B y quieres cambiar el índice activo de la tabla relacionada con lo cual no funcionará la propiedad Master-Detai."



GRACIAS A MARCOS QUE FUE QUIEN ME PUSO EN EL CAMINO.
SALUDOS PARA TODO EL FORO.
Responder Con Cita
  #9  
Antiguo 19-05-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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:
Perdonad que el código saliera en una línea, pero no me explico por qué. Sólo hice copiar y pegar entre los corchetes de código.
Hola jhonalone.

Es un problema que tiene la interfaz del editor de mensajes cuando tenés seleccionada la opción: Interfaz mejorada - Edición con WYSIWYG.
Esto no sucede si utilizas la opción: Editor Estándar - Controles de Formato Extra.

Podés cambiar la opción desde: User CP -> Editar Opciones -> Interfaz del Editor de Mensajes.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



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
No puedo crear Indice Secundario jhonalone Tablas planas 10 31-12-2011 19:07:16
Error: No se encuentra el indice. asoto92 Conexión con bases de datos 0 18-02-2011 01:20:02
Update índice secundario con ADOQuery miquellg SQL 1 09-04-2006 18:30:15
error con ADO indice no encontrado ingel Conexión con bases de datos 3 29-06-2005 15:20:20
Indice Secundario en Firebird barrauda Conexión con bases de datos 4 01-02-2004 13:38:32


La franja horaria es GMT +2. Ahora son las 00:13:10.


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