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