Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Problem (https://www.delphipraxis.net/54996-sql-problem.html)

Klaus D. 14. Okt 2005 18:57

Datenbank: ADS • Version: 6.2 • Zugriff über: SQL

SQL Problem
 
Hallo
was habe ich vergessen...wieso bekomme ich mit folgenden SQL-Sring kein Ergebnis?
Ich bekomme aber auch keinen Fehler...Danke Klaus
Delphi-Quellcode:
SELECT DA.id_daten
     , DA.titel
     , DA.filmlaenge
     , DA.isbn
     , DA.erstellt
     , DA.geaendert
     , DA.sid_Genre
     , DA.sid_Format
     , FA.id_format
     , FA.format
     , GR.id_genre
     , GR.genre

FROM            tbl_daten DA

LEFT OUTER JOIN tbl_format FA
ON             (DA.sid_format=FA.id_Format)

LEFT OUTER JOIN tbl_genre GR
ON             (DA.sid_genre=GR.id_Genre)

WHERE
      ((UPPER(titel)         like :p1) OR
       (UPPER(filmlaenge)    like :p1) OR
       (UPPER(isbn)          like :p1) OR
       (UPPER(FA.format)     like :p1) OR
       (UPPER(GR.Genre)      like :p1))
Delphi-Quellcode:
{Edit.OnChange}

 V_Suchstring:=SuchEdit.Text;
 DataMod.SQL.Close;
 DataMod.SQL.Params[0].AsString :=(UPPERCASE('%'+V_Suchstring+'%'));
 DataMod.SQL.Open;

Jasocul 14. Okt 2005 19:31

Re: SQL Problem
 
Ist in V_Suchstring evtl. ein deutsches Sonderzeichen? Auf jeden Fall solltest du AnsiUppercase statt Uppercase verwenden!

Falls es das nicht war solltest du das SQL-Statement mal im SQL-Editor für deine Datenbank direkt testen.

Klaus D. 14. Okt 2005 20:07

Re: SQL Problem
 
Gruß
String ist denke ich IO trotzdem Ergebnis = 0.( was ja möglicherweise richtig ist)
Ich denke das Problem sind die verknüpften Tabellen(Format und Genre)
Ich bin mir nicht so sicher das mit den Joins richtig gemacht(verstanden) zu haben.
Bin ich manchmal mit Views besser beraten?
Danke und Tschö...Klaus

kiar 14. Okt 2005 20:11

Re: SQL Problem
 
hallo klaus,

müsstest du nicht die Tabellen Format und genre mit in die From Klausel nehmen?

raik

marabu 14. Okt 2005 20:14

Re: SQL Problem
 
Hallo Klaus,

deine Joins sind in Ordnung. Dein Fehler ist die mehrfache Verwendung des gleichen Parameternamens. Der Parser für die SQL Statements kommt damit nicht zurecht. Amüsiere dich beim lesen dieses threads.

Grüße vom marabu

Klaus D. 15. Okt 2005 07:51

Re: SQL Problem
 
Guten Morgen
was meinst du mit gleichen Parameternamen (p1..?)
wo ist denn da ein Problem?
MfG..Danke..Klaus

Union 15. Okt 2005 08:04

Re: SQL Problem
 
Zitat:

Zitat von Klaus D.
Guten Morgen
was meinst du mit gleichen Parameternamen (p1..?)
wo ist denn da ein Problem?
MfG..Danke..Klaus

Follow the yellow brick road... Nein, im Ernst - marabu hat Dir doch den Link gegeben, den Du Dir durchlesen solltest. Aber hier nochmal die Zusammenfassung:
Bei mehreren Parametern mit dem selben Namen wird nur der erste gesetzt.
Also entweder Du setzt die Parameter einzeln direkt in einer Schleife order arbeitest mit StringReplace.

marabu's Lösung:
Zitat:

Zitat von marabu
Delphi-Quellcode:
for i := 0 to Parameters.Count - 1 do
      Parameters.Items[i].Value := s;


Klaus D. 15. Okt 2005 10:46

Re: SQL Problem
 
ich habe jetzt nicht 'p1' als Parametername sondern 'p0' genommen und es funkt.
kann mir das mal jemand verständlich erklären ?
Danke Klaus

Union 15. Okt 2005 12:16

Re: SQL Problem
 
Irgendwie sagst Du uns hier nicht alles... Ich habe das jetzt mal mit ADS ausprobiert. Und zwar mit
SQL-Code:
Select * from kunden
where (Upper(Name_1) like :p1) or
      (Upper(Name_2) like :p1) or
      (Upper(Name_3) like :p1) or
      (Upper(Strasse) like :p1)
Was vom Prinzip das gleiche ist. Dann folgender kleiner Code:
Delphi-Quellcode:
procedure TFormAdsTest.ButtonExecSqlClick(Sender: TObject);
var
   V_SuchString : string;
   ParamStrings : string;
   i : integer;
begin
   V_SuchString := 'AB';
   AdsQuery.Close;
   AdsQuery.Params[0].AsString := UPPERCASE('%'+V_Suchstring+'%');
   AdsQuery.Open;
   for i := 0 to AdsQuery.Params.Count-1 do
      ParamStrings := ParamStrings+inttostr(i)+': '+AdsQuery.Params[i].AsString+#13;
   ShowMessage(Format('Gefunden %d', [AdsQuery.Recordcount])+#13+ParamStrings);
end;
Ergibt folgende Ausgabe:
Zitat:

Zitat von Project1
Gefunden 140
0: %AB%
1: %AB%
2: %AB%
3: %AB%

Das gleiche noch einmal mit P1 auf P0 -> Kein Unterschied. Es werden also immer alle gleichbenannten Parameter gefüllt.

Klaus D. 15. Okt 2005 13:58

Re: SQL Problem
 
Du hast recht
Ich trau es mir bald nicht zu posten... habe jetzt aus p0 wieder p1 gemacht und es funktioniert immer noch.
Ich habe keine Ahnung was los ist, über manche Sachen sollte man auch nicht nachdenken:-(
Möglicherweise hat mein Delphi gestern nach 12 Sdt. Arbeit gebockt.
Egal... Danke für eure Hilfe und villeicht hilft dieser Thread ja jemand anderes auch.
MfG...Klaus :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 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