Avatar billede madshenrik Nybegynder
09. marts 2000 - 18:59 Der er 10 kommentarer og
3 løsninger

Avanceret sql søgning

Hvordan får man ..wildcard til at virke eller like sætningen. f.eks. med hensyn til dette
where firmanavn like "d*" altså starter med D. Med Wildcard operator har jeg læst at det
er muligt f.eks. at hente firmanavn mellem g..t. Men jeg kan ikke få noget af dette til at
virke i database desktop fra Borland. det er meningen det skal integreres i delphi senere.
Derfor er jeg intereseret i om nogen har prøvet det og fået det til at virke.


Avatar billede volstrup Nybegynder
09. marts 2000 - 20:13 #1
det med det wildcard er, så vidt jeg lige husker, ikke '*', men '%'.
Altså:
where firmanavn like "d%"

mvh Jacob Volstrup
Avatar billede koonz Nybegynder
09. marts 2000 - 21:13 #2
Skal du have det som sql i delphi, ser det typisk sådan ud

qry.Close;
qry.sql.clear;
qry.sql.add('Select * From Table');
qry.sql.add('Where Firmanavn Like :WILDFIRMA');
qry.ParamByName('WILDFIRMA').AsString := edtFirmaSoeg.Text;
qry.Open

edtFirmaSoeg kan være en edit box hvor du fylder din søge text ind
Avatar billede koonz Nybegynder
09. marts 2000 - 21:14 #3
qry.ParamByName('WILDFIRMA').AsString := edtFirmaSoeg.Text;

Skal erstattes med qry.ParamByName('WILDFIRMA').AsString := edtFirmaSoeg.Text+'%';

Tanketorsk *SS*
Avatar billede koonz Nybegynder
09. marts 2000 - 21:15 #4
Forresten % er et procent tegn ikke tallet 96

Man kan godt se forkert her
Avatar billede volstrup Nybegynder
09. marts 2000 - 23:32 #5
koonz > Det du melder ud med, gør jo ikke nogen forskel! madshenrik manglede et wildcard (blev givet), samt noget med at hente mellem g..t (som ikke blev leveret, hverken fra dig eller fra jeg)

Ergo: det sværeste mangler stadig... (det ER svært, for efter stort opslag i min SQL-bog, fandt jeg intet, så...)

mvh Jacob Volstrup
Avatar billede koonz Nybegynder
09. marts 2000 - 23:47 #6
Volstrup - tak for rettelsen - kan ikke lige se hva den sku til for, da jeg mener han også fiskede lidt efter delphi syntaxen - men anyway, jeg havde overset det sidste i spørgsmålet

Fyld dine bogstaver (som du vil søge på) ind i et string array, søg på om strengen er tom, hvis den er det så lav ikke or sætningen
const
cMAxLetters = 28;

var
i := Integer;

qry.Close;
qry.sql.clear;
qry.sql.add('Select * From Table');
qry.sql.add('Where Firmanavn Like :WILDFIRMA');
qry.ParamByName('WILDFIRMA').AsString := BogstavArray[1] + '%';
For i := 2 To cMAxLetters do
begin
  If BogstavArray[i] <> '' then
    qry.sql.add('Or Where Firmanavn like'+ BogstavArray[i]+'%''');
end;
qry.Open;

Koden er ikke testet, så den skal måske lige kontroleres - og det kan muligvis gøres smartere
Avatar billede volstrup Nybegynder
10. marts 2000 - 00:07 #7
Selv tak - det var jo ikke ment som nogen fornærmelse, eller noget. Blot en lille rettelse, da jeg næsten kunne lugte at du også ville kunne lave det sidste...
Tror blot at madshenrik regnede med at det kunne laves smart i sql-sætningen...Måske det kan gøres med noget limit, eller lignende...
For den anden vil jo kun virke i Delphi (og det hele blev testet i database-explorer).

mvh Jacob Volstrup
Avatar billede koonz Nybegynder
10. marts 2000 - 00:17 #8
Klart nok - jeg kan ikke lure den som ren sql, ikke lige pt, så skal den hvis lige vendes, og begyndr jeg på det, kan jeg bare ikke sove haha
Avatar billede lrj Nybegynder
10. marts 2000 - 01:06 #9
noget med
"where firmanavn in
select * from firma where firmanavn >= g% and firmanavn <= j&"

Mon ikke der er en fremtid i det?
Avatar billede volstrup Nybegynder
10. marts 2000 - 09:09 #10
det ser rigtigt ud, men skal der ikke lidt paranteser ind?

mvh Jacob VOlstrup
Avatar billede canman Nybegynder
10. marts 2000 - 09:32 #11
Man kan vel også gøre således (I MSSQL):

Lad os sige du skal finde alt imellem CANMAN og NAMNAC

SELECT * FROM table WHERE field BETWEEN 'CANMAN' AND 'NAMNAC'

Eller alt imellem g og t

SELECT * FROM table WHERE field BETWEEN 'g' AND 't'+CHAR(255)


Avatar billede madshenrik Nybegynder
10. marts 2000 - 11:09 #12
Tak for hjælpen indtil videre, her er et udplug fra database desktop hjælpen, det der er problemet er hvor det skal angives og hvordan.
The .. wildcard operator matches any series of any number of characters, including blank spaces. The .. wildcard operator is case-insensitive.

Pattern    Matches

G..    Giant, gigantic, Georgia
g..t    Giant, gross weight
..D    Grand, Elm Road
..e..s    Phillip Edward Wilson, roses
7..5    7485, 70,005
6/../96    6/01/96, 6/25/96

Note:    To retrieve values from a memo or formatted memo field, you must use the .. wildcard operator to specify a pattern selection condition. (Typing an exact match in these field types means typing the entire memo value; to prevent this unnecessary effort, Paradox does not allow it.) You can also use the @ wildcard operator to specify a pattern match in these field types, but you must use it in combination with the .. wildcard operator.

Suppose you want to find shops in the Customer table with the word Dive in their names. If you used the LIKE operator and typed LIKE dive in the Name field of the Customer table, you would only get dive shops whose names started with the word Dive and for whom Dive represented at least half of the letters of the entire name value. If, instead, you type ..dive.. in the Name field, Paradox generates an Answer table that shows customers with the word Dive anywhere in their name.
håber det giver et indblik i hvad jeg mener. og jeg mener bestemt det hele skulle kunne laves i sql.
Avatar billede pellelil Nybegynder
13. marts 2000 - 15:40 #13
Man kunne også prøve noget i retning af:

SELECT * FROM table WHERE field BETWEEN 'CANMANs venstre øre' AND 'CANMANs højre øre'

Men dette vil blot returnere et tomt resultat (if you get my draft) ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester