Entwickler-Ecke

Datenbanken - SQL filter??


foxy - Mo 10.02.03 12:07
Titel: SQL filter??
Guden ich hab ne IB Database...
ich will die nun filtern aber wie stell ich das an

erst hatte ich es so

Quelltext
1:
2:
3:
4:
Dm.Firmendb.Filtered:= False;
                Dm.Firmendb.Filter:='Produktarten='+QuotedStr(Edit3.Text);
                Dm.Firmendb.Filtered:=true;
                Pagecontrol1.ActivePageIndex:=2;


dann hab ich mir überlegt mit sql zu arbeiten

Quelltext
1:
Dm.Firmendb.execSQL 'SELECT * FROM FIRMEN WHERE FIRMA="Edit3.Text"'                    

geht auch nicht .... iss da was falsch??

FirmenDB ist ein dataset


Lake - Mo 10.02.03 12:44

Hallo,

beim ersten kann ich jetzt mal keinen Fehler feststellen. Beim zweiten muss der SQL-String wie folgt lauten

Quelltext
1:
'SELECT * FROM FIRMEN WHERE FIRMA='+QuotedStr(Edit3.Text);                    


Bei Deiner schreibweise hat die Anweisung nach dem Begriff "Edit3.Text" gesucht nicht nach dem was in dem Feld Edit3 eingegeben wurde.

mfg
Lake


foxy - Mo 10.02.03 12:57

hm ok thx aber das erste geht ga nicht ..... und das 2. versuch ich glei mal


smiegel - Mo 10.02.03 13:16

Hallo foxy,

eine SELECT-Anweisung ruft man nicht mit Query.ExecSQL auf, sondern mit Query.Open.


foxy - Mo 10.02.03 13:17

hmm gut zu wissen .. :) aber ich benutze ja dataset, da ich bei IB keine query verwende

aber ich versuchs ma


wie kann ich das wieder rückgängig machen, also wenn ich den filter aufheben will?


smiegel - Mo 10.02.03 13:18

Hallo,

Filtered:=False ;-)


foxy - Mo 10.02.03 13:19

also so, wie ich das oben im bsp. schon habe dann nur noch die SQL anweisung da rein machen anstatt

Quelltext
1:
Dm.Firmendb.Filter:='Produktarten='+QuotedStr(Edit3.Text);                    
meinst du das??? :D wenn ja isses gut h3h3


smiegel - Mo 10.02.03 13:22

Hallo foxy,

sorry, aber ich verstehe nicht genau was Du jetzt willst ? :roll:

Kannst Du das noch mal genauer präzisieren. Welche Vorgehensweise: Filter oder SQL?


foxy - Mo 10.02.03 13:26

okö :rofl:
soooo
also mir ist das eigentlich total egal wie ich das mache es soll einfach nur gehn... ich will das wenn ich z.b. nach firmen will filtern

ich gebe ein
"Firma" ----> wähle combobox aus, in welcher spalte gesucht werden soll ---> alle anzeigen die mit dem Buchstaben beginnen (Im dbGrid)

verstanden?? :D


smiegel - Mo 10.02.03 13:47

Hallo,

folgend ein Vorschlag, der eine Query benutzt:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
...
with Query1 do
begin
  Close;
  SQL.Clear;
  SQL.Add('SELECT * FROM FIRMEN WHERE FIRMA='+QuotedStr(Edit3.Text));
  Open;
end; // with Query1
...



Und folgend, man sollte Deine Frage besser lesen, für Anfangsbuchstaben:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
...
with Query1 do
begin
  Close;
  SQL.Clear;
  SQL.Add('SELECT * FROM FIRMEN WHERE FIRMA LIKE '+QuotedStr(Edit3.Text)+'%');
  Open;
end; // with Query1
...


foxy - Mo 10.02.03 14:08

ja so hätt ich das auch gemacht nur bei dataset gibts keine .SQL anweisung ;)

da gibt es .SelectSql iss, dass das selbe?? naja ich versuche es ma weiter dennoch thx ;)

Nachtrag :

habe das nun versucht mein code sieht so aus

Quelltext
1:
2:
3:
4:
5:
6:
7:
with DM.Firmendb do
                begin
                     close;
                     SelectSQL.Clear;
                     SelectSQL.Add('SELECT * FROM FIRMEN WHERE FIRMA LIKE '+QuotedStr(Edit3.Text)+'%');
                     Open;
                end;

dennoch kommt ein dynamic SQL fehler


foxy - Mo 10.02.03 15:35

jaa ich habs jetzt .... nur Smiegel das "%" zeichen ruft einen SQL fehler auf ... also ich muss den ganzen text eingeben dann ist es gefiltert ... und aufheben kann ich es auch nicht mit .filtred:=false .... wie mach ich das ... die 2 sachen dann bin ich glücklich :rofl:


smiegel - Mo 10.02.03 15:50

Hallo foxy,

bei einer SQL kannst Du den Filter nicht mit Filtered:=False ausschalten. In Deinem Fall musst Du ein SELECT-Statement benutzen, dass Dir die gewünschten Daten anzeigt, ohne eine WHERE-Einschränkung.


foxy - Mo 10.02.03 15:57

asoooo ok ok ... aber kannst du mir noch sagen, wie ich das mit den buchstaben mache?? das wenn ich a eingebe auch alles mit A erscheint?? mit dem % ging das nich da kam immer SQL error


smiegel - Mo 10.02.03 16:04

Hallo,

versuche einmal statt '%' das Zeichen "*" oder Du versuchst noch folgendes:


Quelltext
1:
SelectSQL.Add('SELECT * FROM FIRMEN WHERE FIRMA LIKE '+QuotedStr(Edit3.Text+'%'));                    


foxy - Di 11.02.03 10:01

jopp thx geht soweit .... nur wenn ich die filterung wieder auflösen will, dann ruf ich doch eigentlich die ganz normale Select wieer auf oder?

also


Quelltext
1:
Dm.Firmendb.SelectSQL.Text := 'Select FIRMA,STANDORT,PLZ,ADRESSE,TELENR,PRODUKTART,PREISKLASSE,FILES,ID from FIRMEN where FIRMA = :FIRMA ';                    


oder was anderes???


kiwicht - Di 11.02.03 11:11

wenn ich da auch noch meinen Senf zu geben dürfte:

1. ich würd empfehlen, die QuotedStr-Sachen nicht mit in die SQL-Anweisung einzubauen, das wird nämlich gerade bei größeren SQL-Abfragen sehr sehr unübersichtlich...

2. benutzte doch zusätzlich noch UpperCaser bzw. AnsiUpperCase, als Ersatz für die fehlende Eigenschaft CaseInsensitive. soll heissen, das deine Eingabe und der Inhalt des zu durchsuchenden feldes in gróßbuchstaben umgewandelt werdebn. arbeitest du mit deutschen umlauten, benutzte aufjedenfall AnsiUpperCase, sonst kommt es zu komplikationen.

und 3., zu deiner Letzten frage: eigentlich richtig dein code, klappts denn etwa nicht?

mal als beispiel zu 1 u 2:

Quelltext
1:
2:
3:
4:
Eingabe := QuotedStr('%' + AnsiUpperCase(Edit1.Text) + '%');

SQL.Text := 
'SELECT * FROM firmen WHERE upper(firma) LIKE ' + Eingabe;


find ich persönlich um einiges übersichtlicher....

idS
kiwicht


foxy - Di 11.02.03 11:28

ne geht nicht .... ich hab mich auch gewundert .... aber ka was das ist ... ich versuch das mal weiter


kiwicht - Di 11.02.03 11:53

versuch doch erstmal das normale SQL-Gebamsel, ob das geht:

SQL.Text := 'SELECT * FROM firmen';

weil wenn das nicht geht, dann stimmt tatsächlich irgendetwas ganz gewaltig nicht.. 8)


mfg


foxy - Di 11.02.03 11:58

kiwi der filtert sortiert das geht alles .....
nur wenn der gefiltert hat will ich das ja wieder aufheben, das ich alles wieder sehe ... das geht nur nicht die anderen befehle gehen ja


smiegel - Di 11.02.03 12:07

Hallo foxy,

die Filterung hebst Du folgendermaßen auf:

Quelltext
1:
'Select FIRMA,STANDORT,PLZ,ADRESSE,TELENR,PRODUKTART,PREISKLASSE,FILES,ID from FIRMEN';                    


In diesem Fall ohne WHERE, da ja "where" Deine Filterbedingung ist. Dies habe ich Dir aber bereits gepostet.


foxy - Di 11.02.03 13:19

du hast ja recht nur in meinerm DBGrid ist nach der Operation nichts mehr enthalten ... keine splaten, keine datensätze nichts ... das meinte ich die ganze zeit :)

hab mich bischen falsch ausgedrückt sry


kiwicht - Do 13.02.03 09:11

also, nach deiner "expliziten" anweisung zur Filterung, ist deine Datenbank leer. Soweit so gut.
Wenn du jetzt aber die Anweisung von Smiegel ausführst, dann "müsste" der Filter wieder entfernt werden, weil die "UR-Datenbank" nach dieser Vorgabe durchsucht wird, und nicht die, die dein Grid darstellt.

Soweit ist klar, und wenns jetzt nicht klappt, dann poste doch mal den kompletten CodeBlock, den DU benutzt, um die Datenbank zu "entfiltern", der ja nicht funktionieren soll....

mfG
kiwicht

ps:
is bei euch heute auch so kalt? sibirien in berlin... muhaha.... ;)