Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#1

ADOTable, Excel über Jet, Filter funktioniert nicht mit NULL

  Alt 6. Jul 2005, 19:43
Datenbank: Excel • Zugriff über: ADO über Jet
Ich habe ein Problem beim Setzen des Dataset Filters, wenn ich eine Spalte mit NULL filtern muss.

Generell funktioniert der Filter, nur werden alle Datensätze herausgefiltert, bei denen die Filterprüfung auf NULL trifft.

Generell arbeite ich so mit der Excel Datei

Delphi-Quellcode:
      
      // Opendialog öffnen und AdoConnection verbinden

      conn_import.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
        'Provider=Microsoft.Jet.OLEDB.4.0; ' +
        'Data Source=' + Opendialog.Filename + ';' +
        'Extended Properties=Excel 8.0; ' +
        'Persist Security Info=False';
      conn_Import.open;
      
      // Eine Combobox (xlsWorksheets mit den Arbeitsbereichsseiten der Excel Arbeitsmappe füllen

      xlsWorksheets.Enabled := conn_Import.Connected;
      if conn_Import.Connected then
      begin
        conn_Import.GetTableNames(xlsWorksheets.Items, true);
      end;

      // Wenn es mindestens eine Arbeitsbereichsseite gibt, die mit einem Filter versehen und Öffnen

      if xlsWorksheets.items.count =0 then
      begin
        Showmessage('In der gewählten Arbeitsmappe sind keine Arbeitsbereichsseiten verfügbar');
        exit;
      end
      else begin
         xlsWorksheets.itemindex:=0;
         With tbl_Import do
         begin
           close;
           Connection:=conn_Import;
           tablename:=xlsWorksheets.items[0];
           filter:='Name <>'''' AND gesperrt ='''' ';
           try
             open
           except
             on e:exception do
               showmessage(e.message);
           end;
           try
             filtered:=true;
           except
              on e:exception do
              Showmessage('Filter konnte nicht gesetzt werden'+#13#10+e.message);
           end;
         end;
      end;

Soweit so gut.

Wenn ich jedoch eine XLS Datei habe, in der das Feld "gesperrt" nicht vorhanden ist, und ich dieses hinzufüge,
fallen alle Datensätze durch den Filter.

Ich habe die AdoTable zur Fehlersuche nach dem Öffnen in einer "While not eof" Schleife durchlaufen und
mir im DebugMode die Werte von "Gesperrt" anzeigen lassen.
Ergebnis: ... nicht "" sondern NULL

Das Spaltenformat von "gesperrt" ist in der Excel Tabelle "Text".


Problem:

Ich habe jetzt folgende Filter vergeblich getestet :

filter:='Name <>'''' AND gesperrt ='''' ';
filter:='Name <>'''' AND gesperrt <>'''+'ja'+''' ';
filter:='Name <>'''' AND (gesperrt ='''' OR gesperrt IS NULL)';

Nichts.
Variante 1 und 2 bleiben die Datensätze mit NULL im "gesperrt" Feld im Filter hängen und Variante 3 gibt eine Fehlermeldung "Inkompatible Typen" beim Setzen von Filtered :=true aus..

Ich bin verzweifelt ...

Hilfeeeee
  Mit Zitat antworten Zitat