AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

In Paradox suche

Ein Thema von Angel4585 · begonnen am 24. Okt 2005 · letzter Beitrag vom 24. Okt 2005
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

In Paradox suche

  Alt 24. Okt 2005, 09:01
Datenbank: Paradox • Version: 7 • Zugriff über: TTable Komponente und TDataSource
Hallo zusammen

Sagen wir mal ich habe eine Datenbank mit x-Spalten jede Spalte von einem anderen Typ.

Jetzt will ich eine Suchfunktion machen bei der ich zum Beispiel alle Einträge in denen 'X' vorkommt anzeigen lassen und die anderen eben nicht. Ich dachte ich kann das irgendiwe über einen Filter machen, jetzt fehlen mir allerdings

erstens die Operatoren dafür (ich brauche sowas wie *X* denke ich nur geht das so leider nicht)
zweitens kommt ne Fehlermeldung : Fehlende Typübereinstimmung in Ausdruck.
Kommt vermutlich daher das ich alle Felder durchsuchen will, auch Integerfelder.

Hat jemand Vorschläge wie man das lösen könnte?
Martin Weber
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#2

Re: In Paradox suche

  Alt 24. Okt 2005, 09:49
Verwende TQuery und SQL
SQL-Code:
SELECT *
FROM Tabelle
WHERE Feld1 like '%X%'
AND Feld2 like '%X%'
AND FeldN like '%X%'
Zitat:
vermutlich daher das ich alle Felder durchsuchen will, auch Integerfelder.
wahrscheinlich können Integer-Typen kein 'X' annehmen
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#3

Re: In Paradox suche

  Alt 24. Okt 2005, 09:54
Hallo Angel4585,

du solltest dazu ein TTableobjekt nehmen und das Array Fields in einer Schleife durchlaufen, aber was erwartest du denn als Ergebnis, wenn du ein Integer Feld nach "X" filterst?

Das sieht dann etwa wie folgt aus:

Delphi-Quellcode:
myTable.First;
while not myTable.EOF do
begin
  for i := 0 to myTable.FieldCount-1 do
  begin
    gefunden := (Fields[i].AsString = suchString);
    if gefunden then
    // ...
  end;
  myTable.Next;
end;
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#4

Re: In Paradox suche

  Alt 24. Okt 2005, 10:06
Zitat:
du solltest dazu ein TTableobjekt nehmen und das Array Fields in einer Schleife durchlaufen, aber was erwartest du denn als Ergebnis, wenn du ein Integer Feld nach "X" filterst?
Also ein Ergebnis darf es natürlich nicht geben. Es soll diese Spalte einfach nicht durchsuchen nur wie kann ich das unterscheiden ob das jetzt Integer oder ein String Feld ist, wenn ich eine Funktion für die gesamte Tabelle schreibe in der ich nach strings und nach Zahlen suchen kann?


Zitat:
Verwende TQuery und SQL
SQL-Code: markieren
SELECT *
FROM Tabelle
WHERE Feld1 like '%X%'
AND Feld2 like '%X%'
AND FeldN like '%X%'
Edit: Hups jetzt hab ich glatt auf absenden geklickt.. wie dumm.

MitSQL hab ich noch nie was gemacht.
Ich hab mir das aber gerade angeschaut nur handelt es sich um eine Tabelle mit 60 Spalten und da ist es ein bisschen mühsam jeden Spaltennamen einzeln anzugeben. Wie mach ich das jetzt das ich alle Spaltennamen in einer Schleife auslesen kann?
Martin Weber
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#5

Re: In Paradox suche

  Alt 24. Okt 2005, 10:10
Zitat von Angel4585:
Jetzt will ich eine Suchfunktion machen bei der ich zum Beispiel alle Einträge in denen 'X' vorkommt anzeigen lassen und die anderen eben nicht. Ich dachte ich kann das irgendiwe über einen Filter machen,...
Nicht sicher, ob Paradox das kann:
Delphi-Quellcode:
Table.Filter:= '"X" $ feldname';
Table.Filtered:=True;
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
marabu

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

Re: In Paradox suche

  Alt 24. Okt 2005, 10:10
Hallo Angel,

wenn du mit der Komponente TTable arbeiten willst, dann kannst du nur tail recursion in der property Filter eintragen. Für erweiterte Suchmuster musst du einen event handler für das Ereignis OnFilterRecord schreiben. Im folgenden Beispiel gehe ich davon aus, dass du SearchStr mit 'x' initialisiert hast, deine Suche nicht case sensitive sein soll und nur String-Felder untersucht werden sollen:

Delphi-Quellcode:
procedure TDataForm.TableFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
  i: integer;
begin
  with DataSet do
  begin
    Accept := false;
    for i := 0 to Pred(FieldCount) do
    begin
      Accept := Accept or (Fields[i].DataType = ftString)
        and AnsiContainsText(Fields[i].AsString, SearchStr);
      if Accept then
        Break;
    end;
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#7

Re: In Paradox suche

  Alt 24. Okt 2005, 10:16
Zitat:
wenn du mit der Komponente TTable arbeiten willst, dann kannst du nur tail recursion in der property Filter eintragen. Für erweiterte Suchmuster musst du einen event handler für das Ereignis OnFilterRecord schreiben. Im folgenden Beispiel gehe ich davon aus, dass du SearchStr mit 'x' initialisiert hast, deine Suche nicht case sensitive sein soll und nur String-Felder untersucht werden sollen:
Delphi-Quellcode:
 procedure TDataForm.TableFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
  i: integer;
begin
  with DataSet do
  begin
    Accept := false;
    for i := 0 to Pred(FieldCount) do
    begin
      Accept := Accept or (Fields[i].DataType = ftString)
        and AnsiContainsText(Fields[i].AsString, SearchStr);
      if Accept then
        Break;
    end;
  end;
end;
Also wenn ich das richtig sehe werden nur felder mit Typ ftString durchsucht. Aber es sollen ja alle Felder durchsucht werden. Also wenn der Suchwert eine 1 ist sollen alle Zahlenfelder(Integer und Fließkomma) durchsucht werden
Martin Weber
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#8

Re: In Paradox suche

  Alt 24. Okt 2005, 10:19
Ich habe das mit SQL mal so gemacht:

Delphi-Quellcode:
  SQL.Clear;
  SQL.Add('SELECT * FROM "Int.db"');
  temp:='WHERE '+Fields.Fields[0].FieldName+' LIKE '+QuotedStr('%'+suchstring+'%');
  for i:= 1 to Fields.Count - 1 do
   temp := temp +' OR '+Fields.Fields[i].FieldName+' LIKE '+QuotedStr('%'+suchstring+'%');
  SQL.Add(temp);
ist das so ok?

Edit: wenn ich das so mache kommt die Meldung Listenindex(0) überschritten. D.h. doch das die Tabelle irgendwo nicht drin sthet wo sie aber drinstehen sollte. oder?
Martin Weber
  Mit Zitat antworten Zitat
marabu

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

Re: In Paradox suche

  Alt 24. Okt 2005, 10:49
Martin, in deinem thread hast du gefragt, wie du dein Suchproblem mit der Komponente TTable lösen kannst. Eine Lösung habe ich gegeben. Ich habe die Bedingungen genannt unter denen mein Code funktioniert. Wenn du auch in anderen Feldern suchen willst, dann musst du die Bedingungen anpassen. Wenn du die Feldtyp-Prüfung wegnimmst, dann werden auch Zahlenwerte durchsucht. Für BLOB-Felder wirst du etwas mehr Aufwand treiben müssen. Wenn du das alles nicht kannst, dann bib Laut und es wird dir geholfen, aber bitte tue mir und den anderen Profis im Forum einen Gefallen:

Nenne die Invarianten deines Problems. Wenn die Komponente TTable für den Lösungsansatz irrelevant ist, dann schreibe bei der Angabe zum Zugriff nur BDE rein. Der Einsatz von TQuery in Verbindung mit LOCALSQL vereinfacht den Umgang mit komplexen Suchmustern ('*abc*123*'). Wenn du sowas brauchst, dann sage es vorher - es ist ein wertvoller Hinweis für jeden Helfer.

Ob du LOCALSQL einsetzt oder nicht, du wirst über die Felder iterieren müssen, damit dein Code nicht irgendwann bricht.

Nichts für ungut.

marabu
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#10

Re: In Paradox suche

  Alt 24. Okt 2005, 11:00
Sorry wegen der TTable, hatte es anfangs darauf aufgebaut allerdings habe ich bei der Forensuche bemerkt das es scheinbar mit einer TQuery und SQL einfacher geht und hab das Thema deswegen aufgegriffen.
Martin Weber
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:35 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