Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-01-2004
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 22
sitrico Va por buen camino
Post Problemas con filtro... (y otros)

Se que la solución es simple, tanto que no la encuentro.

Tengo una aplicación que guarda 2 bases de datos paradox con información del usuario, (El sistema permite realizar consultas de información en textos y permite al usuario poner marcadores a los diferentes temas encontrados).

Inicialmente solo se podía exportar la tabla del usuario a excel, pero a sujerencia (y solicitud de varios usuarios) tengo que incorporar la capacidad de exportar e importar las tablas (para ser intercambiadas por los usuarios).

La exportacion no tiene problemas (aunque me enrede tratando de exportar los datos en formato XLS (Pido mis disculpas a roman por ponerlo a trabajar en un hilo anterior) ) para exportar simplemente copio los archivos al Disco\directiorio de destino.

La importación no es tan simple, ya que tengo que evitar que se repitan los datos ya existentes. Y la cosa se complica más cuando debo importar desde diferentes bases de datos ( estructura origen = estructura destino) por lo que la verificación o búsqueda que realize debe ser creada en tiempo de ejecución.

Esto es más o menos lo que quiero hacer

Código:
// El alias, tablename y demás propiedades de las tablas estan OK
// t := Tabla exportada
// a := Tabla que recibe los datos
         While not t.Eof do
            Begin
            Existe := False;
            Filtro := '';
            // Crear un filtro para el registro
            for i := 0 To t.Fields.Count-1 do
               If t.Fields.Fields[i].DataType in
                  [ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat,
                   ftCurrency, ftDate, ftTime, ftDateTime] Then
                   If t.Fields.Fields[i].DataType = ftString Then
                      filtro := Filtro + t.Fields.Fields[i].FieldName+' = "'+t.Fields.Fields[i].AsString+'" And '
                   Else
                      filtro := Filtro + t.Fields.Fields[i].FieldName+' = '+t.Fields.Fields[i].AsString+' And ';
            // Quitar el ultimo ' and '
            Delete(Filtro,Length(Filtro)-4,5);
            a.Filter := Filtro; // Me genera un error de filtro
            a.First;
            Existe := a.RecordCount > 0; // si no hay no existe
            If Not(existe) Then // si no existe lo creo
               Begin
               a.Insert;
               for i := 0 To a.Fields.Count-1 do
                  If a.Fields.Fields[i].DataType <> ftAutoInc Then
                     a.Fields.Fields[i].Value := t.Fields.Fields[i].Value;
               a.Post;
               End;
            t.Next;
            End;
         t.close;
         a.close;
La tabla tiene datos de varios tipos incluyendo Tdbmemo y un TAutoInc por eso comparo todos los campos uno a uno en lugar de validar la clave (el AutoInc las haría diferentes).

El Filtro que me genera es:

Código:
'Partida = "2106.90.90.90" And Descripcion = "---Los demas" And
Gravamen = "20" And RegimenLegal = "no" And Observaciones =
"B.system fat burner (CIP=393)"'
Me dice que es una expresion de filtro invalida ''' ???

Probe la instrucción SQL en dbExplorer:

Código:
Select *from arancel where 
Partida = "2106.90.90.90" And Descripcion = "---Los demas" And
Gravamen = "20" And RegimenLegal = "no" And
Observaciones = "B.system fat burner (CIP=393)"
y funciona perfecto

Nota: No he querido usar la sentencia SQL porque toda la aplicación está basada en TTable (no he usado TQuery) y ma parece que de hacerlo aumentaría bastante el tamaño de la aplicación, por eso las complicaciones ¿insecesarias? de hacerlo con un filtro y una tabla
__________________
Sitrico

Última edición por sitrico fecha: 21-01-2004 a las 21:39:43.
Responder Con Cita
  #2  
Antiguo 21-01-2004
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
Aquí tienes un ejemplo probado y funcionado correctamente:

Código:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Table1.Filter:='company =''Unisco'' And Addr1 =''PO Box Z-547'' and City = ''Freeport''';
Table1.filtered:=True;
end;
Me da la impresión que en vez de utilizar el apóstrofe doble '' estás utilizando comillas ".

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 21-01-2004 a las 21:59:52.
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


La franja horaria es GMT +2. Ahora son las 09:40:36.


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