AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Filter funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Filter funktioniert nicht

Ein Thema von simon790 · begonnen am 27. Mär 2008 · letzter Beitrag vom 27. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
simon790

Registriert seit: 6. Mär 2008
43 Beiträge
 
Delphi 7 Professional
 
#1

Filter funktioniert nicht

  Alt 27. Mär 2008, 07:12
Datenbank: EXCEL • Version: ? • Zugriff über: ADO/SQL
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
Es gibt 10 Arten von Menschen.
Diejenigen, die das binäre System verstehen, und die, die es nicht verstehen.
Aber ich frag mich was ist mit den anderen 8?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Filter funktioniert nicht

  Alt 27. Mär 2008, 07:36
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#3

Re: Filter funktioniert nicht

  Alt 27. Mär 2008, 08:43
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.
Confuzius say: Early worm have death wish.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Filter funktioniert nicht

  Alt 27. Mär 2008, 09:09
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
  Mit Zitat antworten Zitat
simon790

Registriert seit: 6. Mär 2008
43 Beiträge
 
Delphi 7 Professional
 
#5

Re: Filter funktioniert nicht

  Alt 27. Mär 2008, 09:25
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.
Es gibt 10 Arten von Menschen.
Diejenigen, die das binäre System verstehen, und die, die es nicht verstehen.
Aber ich frag mich was ist mit den anderen 8?
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#6

Re: Filter funktioniert nicht

  Alt 27. Mär 2008, 10:13
Hast du das Sternchen wieder eingebaut?
Confuzius say: Early worm have death wish.
  Mit Zitat antworten Zitat
simon790

Registriert seit: 6. Mär 2008
43 Beiträge
 
Delphi 7 Professional
 
#7

Re: Filter funktioniert nicht

  Alt 27. Mär 2008, 10:14
ja habe ich, an jeder erdenklichen Position.
Es gibt 10 Arten von Menschen.
Diejenigen, die das binäre System verstehen, und die, die es nicht verstehen.
Aber ich frag mich was ist mit den anderen 8?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Filter funktioniert nicht

  Alt 27. Mär 2008, 10:28
Der Joker in Access ist *, aber vielleicht ist es hier doch %?
Markus Kinzler
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#9

Re: Filter funktioniert nicht

  Alt 27. Mär 2008, 10:35
Laut Dokumentation eigentlich nicht - wie sehen denn die FilterOptions (published) aus?
Confuzius say: Early worm have death wish.
  Mit Zitat antworten Zitat
simon790

Registriert seit: 6. Mär 2008
43 Beiträge
 
Delphi 7 Professional
 
#10

Re: Filter funktioniert nicht

  Alt 27. Mär 2008, 10:40
wie finde ich das heraus?
Es gibt 10 Arten von Menschen.
Diejenigen, die das binäre System verstehen, und die, die es nicht verstehen.
Aber ich frag mich was ist mit den anderen 8?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
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