Delphi - Indice en componente ADO

 
Vista:

Indice en componente ADO

Publicado por Maximiliano Enrique Morales Mo (50 intervenciones) el 07/05/2003 17:37:31
Tengo un TADOtable al cual le e declarado un indice (este es unico, es loxico .-)) le declare un indice en IndexFieldName =fecha, ya que no me deja colocar el indice que tengo en sql server 2000, el problema es que se pasa el IndexFieldName por donde quere, ya que al dar un locate no me encuentra el registro. No domino bien el ADO pero es lo unico que puedo usar, hay algunas condiciones especiales para este componenete (TADOtable ) en cuanto a indices??, cualquier ayuda es valida, gracias URGENTEEEE!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Indice en componente ADO

Publicado por BigLuis (463 intervenciones) el 07/05/2003 21:58:47
Hola Maximiliano......Una de las caracteristicas de ADO es que trabaja en caché, por lo que cuando recuperas datos de la Base de Datos puedes aplicar los índices que quieras en runtime sin necesidad que estne declarados en la estructura de los datos, por lo que me resulta muy raro eso que te pasa. Con este código por ejemplo puedes elegir la ordenacion del capo que quieras sobre un DBGrid sin necesidad que existan los indices creados
En el evento DBGrid1TitleClik añade
With DMTablas(modulo de datos) do
if TableClientes.Indexfieldnames = Column.Field.FieldName then
TableClientes.Indexfieldnames:= Column.Field.FieldName+' DESC'
else
TableCientes.Indexfieldnames:= Column.Field.FieldName;
De todas formas te aconsejo que utilices TADODataset en vez de TADOTable ya que es mas potente pues une la TADOTable y TADOQuery (mas o menos) en uno solo.
Respecto al locate, si no encuentra lo que buscas no es su culpa ya que locate no utiliza indices obligatoriamente para las búsquedas(al contrario que SetKey, GotoKey etc).Si existe el indice en el campo de busqueda lo utiliza y es mas rapido, pero si no existe busca igual.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mira este codigo

Publicado por Maximiliano Enrique Morales Mo (50 intervenciones) el 07/05/2003 22:05:18
If db_laboratorio.Densidad.Locate('fecha',
db_laboratorio.QryDensidad.FieldByName('fecha').AsDateTime,[]) then
begin
muestra_registro
end;

nunca encuentra el registro
que me aconsejas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mira este codigo

Publicado por BigLuis (463 intervenciones) el 09/05/2003 16:42:48
Inicialmente no tenia porque fallarte pero prueba de esta forma a ver
db_laboratorio.Densidad.Indexfieldnames:='fecha';
If db_laboratorio.Densidad.Locate('fecha',
db_laboratorio.QryDensidad.FieldByName('fecha').AsDateTime,[loPartialKey]) then
begin
muestra_registro
end;
De todas formas piensa que el formato Datetime es "traicionero" al menos para mi porque tenemos en mente la fecha por ejemplo asi 01/12/2002 y nos olvidamos de la parte Time que en TDateTime seria 01/12/2002 08:00:00 y muchas veces no salen las cosas como pensamos por ese motivo.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar