AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Tabelle durchsuchen ohne Angabe eines Feldnamens
Thema durchsuchen
Ansicht
Themen-Optionen

Tabelle durchsuchen ohne Angabe eines Feldnamens

Ein Thema von smart · begonnen am 3. Dez 2011 · letzter Beitrag vom 4. Dez 2011
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#11

AW: Tabelle durchsuchen ohne Angabe eines Feldnamens

  Alt 3. Dez 2011, 22:14
Womit wir wieder bei #2 wären
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#12

AW: Tabelle durchsuchen ohne Angabe eines Feldnamens

  Alt 3. Dez 2011, 23:41
Womit wir wieder bei #2 wären
Was ja total präzise und zielweisend formuliert war, gelle?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#13

AW: Tabelle durchsuchen ohne Angabe eines Feldnamens

  Alt 4. Dez 2011, 00:17
Aber trotzdem stimmt, man braucht halt die Feldnamen, sonst wird das nix, woll?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#14

AW: Tabelle durchsuchen ohne Angabe eines Feldnamens

  Alt 4. Dez 2011, 00:37
Aber trotzdem stimmt, man braucht halt die Feldnamen, sonst wird das nix, woll?
Rüschüsch, und die werden beim öffnen des Datasets angelegt
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#15

AW: Tabelle durchsuchen ohne Angabe eines Feldnamens

  Alt 4. Dez 2011, 00:42
Ich hab das Gefühl, wir reden an einander vorbei. Um in allen Spalten zu suchen braucht man alle Feldnamen, muss diese also zunächst ermitteln, Wildcards wie "*" ziehen da nicht, man muss also ein wenig Vorarbeit investieren. Und im Prinzip nichts anderes hat Markus in #2 gesagt (OK, in seiner gewohnt knappen Art, was es trotzdem nicht falsch macht).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#16

AW: Tabelle durchsuchen ohne Angabe eines Feldnamens

  Alt 4. Dez 2011, 01:03
Bevor wir noch weiter aneinander vorbei reden, post ich einfach mal eine mögliche Lösung

Delphi-Quellcode:
for i := 0 to DataSet.FieldCount - 1 do
  if DataSet.Locate(DataSet.Fields[i].FieldName, '*' + Edit1.Text, [loPartialKey]) then
    Break
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#17

AW: Tabelle durchsuchen ohne Angabe eines Feldnamens

  Alt 4. Dez 2011, 06:18
Hmm.. O(n*m*m), wobei n=Recordcount und m=Fieldcount, weil bei dem Code immer erst das Feld anhand des Feldnamens gesucht werden muss.

Wieso nicht schlicht, ergreifend und am naheliegensten:
Delphi-Quellcode:
MyDataset.First;
While Not MyDataSet.Eof Do Begin
  For i:=0 to MyDataset.Fieldcount-1 do
     If ContaintsText (Search, MyDataset.Fields[i].AsString) Then
        ShowMEssage(Format('Gefunden in Feld "%s" in Record #%d',[MyDataSet.Fields[i].Name, MyDataSet.RecNo]));
  MyDataset.Next
End;
Der Aufwand dürfte O(n*m) sein.

Damit ist die Forderung des Fragestellers erfüllt: KEINE Feldnamen (außer zur Ausgabe).Schneller (vom algorithmischen Aufwand her) geht es in Memory nicht.

Auch per SQL wird man nicht umhin kommen, alle Spalten zu durchsuchen.

Abhilfe: Man designt die Tabelle so, das die Felder selbst als Metadaten gehalten sind.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#18

AW: Tabelle durchsuchen ohne Angabe eines Feldnamens

  Alt 4. Dez 2011, 10:28
Stevies Variante ist nicht nur kürzer sondern auchwesentlich schneller,
aber man sollte sich bewust sein, daß bei ihm die Suchreihenfolge nicht unbedingt passend sein kann, denn es wird hier ja im Printip nach den Spalten gesucht.
Code:
DS1    . . . . .
DS2    . . . a .
DS3    . . . . .
DS4    . a . . .
DS5    . . . . .
DS6    . . a . a
Eine Suche nach "a" würde hier den 4. Datensatz finden nicht den 2. Datensatz.

Iwos Variante würde dagegen zuerst den Zweiten finden, aber z.B. eine fortsetzende Suche wäre nicht mäglich > "suche nächsten Fund".

Als Suche/Filter nach allen Funden würden beide Codes sogar den Datensatz 6 doppelt finden und man müßte diesen, falls nötig, manuell rausfiltern.
Wobei man bei Iwo nun einfach die innere schleife abbricht und schon alles nur noch einmal gelistet bekommt, was bei Stevies Code schon leider nicht so einfach möglich ist.



Im Prinzip wäre hier wohl, falls keine der beiden Varianten in Frage kommt das schon vorgeschlagene die Lösung.
- erstmal alle Spaltennamen besorgen und danach erst über alle Spalten gleichzeitig suchen
- - die Suchliste für Locate zusammenbauen
- - ein Statement für .Filter zusammenbauen
- - oder das SQL-Statement für eine Query zusammenbauen
- es gibt doch bestimmt ein SQL-Staement, welches die Spaltennamen liefert ... da könnte man dann ja alle eventuell nötigen SQLs verschachteln und zu einem einzigen Aufruf vermanschen.
$2B or not $2B

Geändert von himitsu ( 4. Dez 2011 um 10:30 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Tabelle durchsuchen ohne Angabe eines Feldnamens

  Alt 4. Dez 2011, 10:55
Wenn es nur darum geht, herauszufinden, ob ein bestimmter Wert in einer beliebigen Spalte steht, es aber unerheblich ist in welcher, könnte man die Inhalte der Spalten auch aneinanderhängen und dann dieses Konstrukt durchsuchen.

Der korrekte Weg wäre es aber das DB-Schema anzupassen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#20

AW: Tabelle durchsuchen ohne Angabe eines Feldnamens

  Alt 4. Dez 2011, 12:36
Habe es mal so versucht. In der Combo sind die Feldnamen, Edit2 der zu suchende Text.

Delphi-Quellcode:
Var
A:Integer;
begin
    ComboBox1.Text := ComboBox1.Items[0];
for A := 0 to ComboBox1.Items.Count - 1 do
begin
    ComboBox1.Text := ComboBox1.Items[A];
    Form2.ABSTable2.Locate(Form2.ABSTable2.Fields[ComboBox1.ItemIndex].DisplayName , Edit2.Text,[loPartialKey]);
end;
Klappt aber nicht.
warum nicht?
Heike Kretschmann
Viele Grüße aus Bochum

kaum denkt man alles ist fertig, da fängt man wieder von Vorn an.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 12:04 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