Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Filter funktioniert nicht (https://www.delphipraxis.net/110948-filter-funktioniert-nicht.html)

simon790 27. Mär 2008 07:12

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:
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;
Nun will ich das ganze noch filtern mit einem String den ich in einem Edit eingebe...

Delphi-Quellcode:

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;
Leider bekomme ich als Suchergebnis immer ein leeres DBGRid :-(

Woran kann das liegen?
Besten Dank und Gruss
Smn

Bernhard Geyer 27. Mär 2008 07:36

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.

Peinhard 27. Mär 2008 08:43

Re: Filter funktioniert nicht
 
Zitat:

Zitat von Bernhard Geyer
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.

Verzeihung, aber welche sollten das sein, die TADODataset nicht auch schon hätte? Die beiden sind doch im Grunde nichts anderes als TADODatasets mit fest eingestelltem CommandType und einem Alias für CommandText. :gruebel:

marabu 27. Mär 2008 09:09

Re: Filter funktioniert nicht
 
Hallo Simon,

eine kleine Änderung an deinem Code möchte ich dir nahelegen:

Delphi-Quellcode:
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;
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.

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

simon790 27. Mär 2008 09:25

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.

Peinhard 27. Mär 2008 10:13

Re: Filter funktioniert nicht
 
Hast du das Sternchen wieder eingebaut?

simon790 27. Mär 2008 10:14

Re: Filter funktioniert nicht
 
ja habe ich, an jeder erdenklichen Position.

mkinzler 27. Mär 2008 10:28

Re: Filter funktioniert nicht
 
Der Joker in Access ist *, aber vielleicht ist es hier doch %?

Peinhard 27. Mär 2008 10:35

Re: Filter funktioniert nicht
 
Laut Dokumentation eigentlich nicht - wie sehen denn die FilterOptions (published) aus?

simon790 27. Mär 2008 10:40

Re: Filter funktioniert nicht
 
wie finde ich das heraus?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz