![]() |
Datenbank: Excel • Zugriff über: ADO über Jet
ADOTable, Excel über Jet, Filter funktioniert nicht mit NULL
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 :shock: 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 ... :roll: Hilfeeeee |
Re: ADOTable, Excel über Jet, Filter funktioniert nicht mit
Du hast leider ein echtes Problem. Im Abschnitt Filter property der ADO 2.8 API Reference steht unter anderem:
Zitat:
|
Re: ADOTable, Excel über Jet, Filter funktioniert nicht mit
Problem gelöst.
Habe es rausgefunden ... :nerd: Die Filter-Bedingungen
Delphi-Quellcode:
funktionieren.
'gesterrt = NULL'
bzw. 'gesperrt <> NULL' Um demnächst etwas flexibler arbeiten zu können, habe ich jetzt aber eine AdoQuery anstatt der AdoTable verwendet. SQL ist einfach besser. Für alle die diesen Thread mal lesen und auch besser gleich zur AdoQuery greifen... In dem SQL Statement muss der Arbeitsbereichsseitenname (tolles Wort :mrgreen: ) in eckigen Klammern stehen, da dieser ein "$" enthält und SQL das sonst nicht versteht ...
Delphi-Quellcode:
Trotzdem danke für Eure Mühe ...
tbl_Import.SQL.Text:='SELECT * FROM ['+xlsWorksheets.items[xlsWorksheets.itemindex]+ ']'+#13#10+' '+
'WHERE NAME <>'''' AND NAME IS NOT NULL AND '+#13#10+' '+ ' (Gesperrt = '''' OR Gesperrt IS NULL)'; Schöne Grüße, Jens // edit: ein paar Schreibfehler korrigiert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz