![]() |
Datenbank: EXCEL • Version: ? • Zugriff über: ADO/SQL
Filter funktioniert nicht
Hallo Ich habe folgenes Problem
Per ADO verbinde ich auf ein Excelfile und zeige die Daten in einem DBGrid an:
Delphi-Quellcode:
procedure TMainForm.ConnectToExcel;
var StrConn: Widestring; begin strConn:= 'Provider=Microsoft.Jet.OLEDB.4.0;' + 'Data Source=c:\Tests\Telefon_MMZO.xls' + ';' + 'Extended Properties=Excel 8.0;'; MainData.ADOConnection1.Connected := False; MainData.ADOConnection1.ConnectionString:=StrConn; try MainData.ADOConnection1.Open; Except ShowMessage('Unable to connect to Excel!!!'); raise; end; end;
Delphi-Quellcode:
Nun will ich das ganze noch filtern mit einem String den ich in einem Edit eingebe...
procedure TMainForm.FetchData;
begin ConnectToExcel; MainData.ADOQuery1.Close; MainData.ADOQuery1.SQL.Text := 'SELECT F2 AS Name,F3 AS Telefon,F5 AS EMail,F6 AS Bezeichnung,F7 AS Zimmer,F8 AS Adresse,F9 AS KST FROM [Telefon$] WHERE NOT F2 = "Name" AND F2 IS NOT NULL '; MainData.ADOQuery1.Open; DBGrid.Columns[0].Width :=150; DBGrid.Columns[1].Width :=50; //ect. end; procedure TMainForm.FormCreate(Sender: TObject); begin MainData.ADOConnection1.LoginPrompt :=False; MainData.ADOQuery1.Connection := MainData.ADOConnection1; MainData.DataSource1.DataSet := MainData.ADOQuery1; FetchData; end;
Delphi-Quellcode:
Leider bekomme ich als Suchergebnis immer ein leeres DBGRid :-(procedure TMainForm.FilterEditChange(Sender: TObject); begin if FilterEdit.Text<>'' then begin MainData.DataSource1.DataSet.Filter := DBGrid.Columns.Items[DBGrid.SelectedIndex].FieldName+' = '+char(39)+FilterEdit.Text+'*'+char(39); MainData.DataSource1.DataSet.Filtered := True; end else MainData.DataSource1.DataSet.Filtered := False; end; Woran kann das liegen? Besten Dank und Gruss Smn |
Re: Filter funktioniert nicht
Pass lieber deinen Querystring an. Filter ist ein überbleibsel aus BDE-Zeiten und funktioniert bei ADO nicht unbedingt überall.
Ach ja. Ersetz am besten alle TADOQuery/TADOTable durch TADODataset. TADOQuery/TADOTable ist primär wegen besserer Altkompatiblität zur BDE vorhanden und ist mit einigen Macken belegt welche man bei TADODataset nicht hat. |
Re: Filter funktioniert nicht
Zitat:
|
Re: Filter funktioniert nicht
Hallo Simon,
eine kleine Änderung an deinem Code möchte ich dir nahelegen:
Delphi-Quellcode:
Bei den ADO-Komponenten verwendest du TADODataSet für Eregbnismengen und TADOCommand (oder direkt TADOConnection) für alles andere. TADIQuery und TADOTable sind eine Migrationshilfe für BDE-Projekte.
procedure TMainForm.FilterEditChange(Sender: TObject);
begin with DBGrid do begin DataSource.DataSet.Filtered := Trim(FilterEdit.Text) <> ''; if DataSource.DataSet.Filtered then DataSource.DataSet.Filter := Format('%s = %s', [SelectedField.FieldName, QuotedStr(FilterEdit.Text)]); // Edit else DataSource.DataSet.Filter := ''; end; end; Nur weil es die Filter-Eigenschaft auch im IDAPI Funktionsumfang gab, ist sie nichts Schlechtes. Sie ist eine ureigene Eigenschaft jedes ADO RecordSets und dient der schnellen client-seitigen Filterung. Wenn MainData ein Datenmodul ist, dann würde ich DataSource1 dort nur dann hinsetzen, wenn sie dort eine Master-Detail-Beziehung steuert. Die DataSource für das DBGrid gehört zum DBGrid. Freundliche Grüße Edit: spaces around operator |
Re: Filter funktioniert nicht
Vielen Dank
Dies funktioniert nun mal soweit, dass dei Zeile nur angezeigt wird wenn der Suchstring exakt mit dem Feldinhalt übereinstimmt. Wie muss ich den Code noch ergänzen wenn auch Zeilen zurückgegeben werden die mit dem Suchstring beginnen? Also bei Suche mit "Sa" im EditFeld kommt Sabine, Sandra und Sascha zurück. |
Re: Filter funktioniert nicht
Hast du das Sternchen wieder eingebaut?
|
Re: Filter funktioniert nicht
ja habe ich, an jeder erdenklichen Position.
|
Re: Filter funktioniert nicht
Der Joker in Access ist *, aber vielleicht ist es hier doch %?
|
Re: Filter funktioniert nicht
Laut Dokumentation eigentlich nicht - wie sehen denn die FilterOptions (published) aus?
|
Re: Filter funktioniert nicht
wie finde ich das heraus?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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-2025 by Thomas Breitkreuz