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 Temas de Hoy

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



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 21:47:48.


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