Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ADO con Locate sólo busca 1 campo y necesito 2 :( (https://www.clubdelphi.com/foros/showthread.php?t=23117)

atirado 07-07-2005 01:33:14

ADO con Locate sólo busca 1 campo y necesito 2 :(
 
Hola a tod@s!
Les escribo porque he buscado información al respecto, pero nada parece funcionar, y ya que aquí es como la escuela Jedi de lo relacionado con Delphi, creo que podrán ayudar a este pobre padawan en desgracia :p
La cuestión es esta:
Estoy usando componentes ADO para guardar información en una tabla de Access XP donde se guardan tarifas de envíos, en dicha tabla se guarda un identificador de la ciudad destino, el costo de acuerdo a la clase del envío y una fecha que indica cuándo entra en vigor la tarifa.
Por lo anterior, antes de grabar un nuevo registro necesito verificar que no haya otro registro que tenga esa fecha con ese identificador de ciudad.
Es decir, si ya tengo lo siguiente:

Código:

IdCiudad | Costo | Fecha
        1          |  100  | 05/07/2005

con esto ya no debería permitirme grabar otra vez el IdCiudad = 1 con Fecha = '05/07/2005', ¿cierto?
Ok, intento hacer la validación de la siguiente manera:
Código Delphi [-]
If not tblTarifasPorCiudad.Locate('idciudad;fecha', VarArrayOf([vIdCiudad, dtpFecha.DateTime]), [loCaseInsensitive]) then
     Grabar
Else
     ShowMessage('El registro ya existe');
donde tblTarifasPorCiudad es la tabla de tarifas de Access XP. La fecha la obtiene de un DateTimePicker llamado dtpFecha.
Al parecer, el método Locate sólo funciona si utilizo un campo para hacer la búsqueda, sólo que en este caso, necesito que lo haga por 2 campos diferentes, pues sí puede haber repetidos en IdCiudad, ya que con el tiempo se crea otro registro con una fecha y un costo diferente, pero nunca se eliminan los anteriores, de la siguiente manera:
Código:

IdCiudad | Costo | Fecha
        1          |  100  | 05/07/2005
    1      |  110  | 01/08/2005

Alguien tiene alguna luz en este camino de oscuridad??? Que la fuerza les acompañe, jejeje :cool:

vtdeleon 07-07-2005 03:12:39

Saludos
Cita:

Al parecer, el método Locate sólo funciona si utilizo un campo para hacer la búsqueda, sólo que en este caso, necesito que lo haga por 2 campos diferentes,
Quien dijo que no podia buscar por dos campos???:confused:
No estoy seguro, ni lo he probado ppero creo qeu debes comverti dtpFecha.DateTime en String.

Neftali [Germán.Estévez] 07-07-2005 09:50:13

Yo también apuesto a que el problema va por la fecha; En la tabla tienes sólo una fecha (y no se si Access almacenará alguna hora de tipo 00:00:00); Asegurate de que al hacer la búsqueda no estás parando un campo "Fecha+Hora", porque si fuera así la comparación no sería correcta (ya que te estará comparando también la hora).

lgarcia 07-07-2005 14:47:25

ADO con Locate
 
Hola

Siguiendo con lo que se referian anteriormente del problema con la fecha del DateTimePicker trata de obtener solo la parte entera del mismo con algo asi:
Int(dtpfecha.Date)

Saludos
Luis Garcia

_____________________________
La mejor manera de decir es hacer

atirado 07-07-2005 17:00:39

Lo intento y les aviso!
 
Gracias por el tip!!! veré ahora mismo si funciona y les dejo saber :D

atirado 07-07-2005 17:30:12

ADO y Locate
 
Hola a tod@s nuevamente!
En efecto, lo que estaba pasando era que en la tabla las fechas estaban guardadas como fechas cortas y la comparación la hacía con fecha/hora, por eso el locate no parecía funcionar.
Gracias por su atención y su consejo! Yoda los envidiaría, definitivamente, jejejeje :p


La franja horaria es GMT +2. Ahora son las 21:08:01.

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