AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Parameterübergabe
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Parameterübergabe

Ein Thema von Luciano · begonnen am 27. Jun 2005 · letzter Beitrag vom 29. Jun 2005
Antwort Antwort
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#1

SQL Parameterübergabe

  Alt 27. Jun 2005, 20:49
Datenbank: MSDE • Version: SP3a • Zugriff über: dbGo / ADO
Hi,

ich habe folgendes Problem was ich nicht nachvollziehen kann. Über eine ADOQuery starte ich folgende Anfrage.
(SN ist ein Integerwert)

Delphi-Quellcode:
  if RadioButton1.Checked = True then
    begin
      with Q_SUCHE do
        begin
          Close;
          SQL.Clear;
          SQL.Add(' SELECT * FROM CKIII ');
          SQL.Add(' WHERE SN LIKE :v_SUCHE ');
          Prepared := True;
          Parameters.ParamByName('v_SUCHE').Value := Edit1.Text+'%';
          Open;
        end;
    end;
Die Fehlermeldung lautet " Die Anwendung verwendet für den aktuellen Vorgang einen Wert vom falschen Typ "
Wie kann das sein? Ich glaube ich rate meinem Chef wieder zu Delphi 6!!!

Thx für jegliche Antworten!

Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
Peppi999

Registriert seit: 27. Jun 2005
6 Beiträge
 
#2

Re: SQL Parameterübergabe

  Alt 27. Jun 2005, 20:58
Hi,

ich vermute mal, dass er dadurch, dass du noch ein % anhängst das ganze als string / varchar übergibt...
Da der Parameter ein Value ist, und sich den Datentyp "aussucht"...

ob man nauch nach ähnlichen Zahlen suchen kann / wie, weiß ich nicht...

wie gesagt ist nur eine vermutung

//edit: hast du mal ausprobiert, was passiert, wenn du das % wegnimmst?
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: SQL Parameterübergabe

  Alt 27. Jun 2005, 21:43
Hi,
wenn ich das '%' weg lasse geht es aber dann kann ich eben nicht wie gewünscht nach einem Teil der SN suchen. Deshalb eben
SN LIKE :v_SUCHE Wenn ich das so mache geht es aber dann eben OHNE '%'
SN = :v_SUCHE Die Anwendung kommt wirklich nicht mit der Übergabe "Edit1.Text+'%'" als VALUE zurecht, das hatte aber sonst mit Delphi6/7 immer gefunzt. Ist das jetzt ein neues feature von Delphi 2005???? Wenn ich mich schon mit so kleinigkeiten rumärgern muß wechsel ich wieder zu meinem guten "alten" Delphi.

Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
marabu

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

Re: SQL Parameterübergabe

  Alt 28. Jun 2005, 06:10
Hallo Mike,

Zitat von Luciano:
(SN ist ein Integerwert)
dann solltest du auch keine String-Operatoren verwenden. Du musst dich also entscheiden.

SQL-Code:
SELECT * FROM ckiii WHERE sn BETWEEN :low AND :high
SELECT * FROM ckiii WHERE CAST(sn AS CHAR) LIKE :prefix
Mit einem anderen Delphi erhältst du sicher die gleiche Fehlermeldung. Eine andere Datenbank könnte eventuell ein implizites type casting machen, aber darauf sollte man sich sowieso nicht verlassen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: SQL Parameterübergabe

  Alt 28. Jun 2005, 06:53
Zitat von Luciano:
(SN ist ein Integerwert)
Delphi-Quellcode:
  if RadioButton1.Checked = True then
    begin
      with Q_SUCHE do
        begin
          Close;
          SQL.Clear;
          SQL.Add(' SELECT * FROM CKIII ');
          SQL.Add(' WHERE SN LIKE :v_SUCHE ');
          Prepared := True;
          Parameters.ParamByName('v_SUCHE').Value := Edit1.Text+'%';
          Open;
        end;
    end;
Die Fehlermeldung lautet " Die Anwendung verwendet für den aktuellen Vorgang einen Wert vom falschen Typ "
Es gibt 2 Dinge die zu Deinem Problem führen.
  1. der SQL Befehl LIKE funktioniert nur mit Strings. Das steht in jedem SQL Buch. Dieser Operand vergleicht Zeichenfolgen mit Wildcards (%).
  2. Wenn SN in der Datenbank ein String ist, dann sollte der Parameter auch auf String eingestellt werden.
    Delphi-Quellcode:
    ...
      // Beispiel mit Tabelle CLients aus DBDEMOS (TQuery aus BDE Pallette verwendet)
      with query1 do
      begin
        sql.Text := 'select * from clients where last_name like :last_name;';

        Params.ParamByName('last_name').ParamType := ptInput;

        // Params.ParamByName('last_name').DataType := ftString; // <-- wichtig !
        // Params.ParamByName('last_name').Value := Edit1.Text + '%';

        // oder besser
        // Mit AsString zuweisen um DataType auf ftString automatisch zu setzen
        Params.ParamByName('last_name').AsString := Edit1.Text + '%';

        Open;
      end;
    ...
    wenn SN in der Datenbank Integer ist könnte man das so lösen:
    Delphi-Quellcode:
    ...
      if RadioButton1.Checked = True then
        begin
          with Q_SUCHE do
            begin
              Close;
              SQL.Clear;
              SQL.Add(' SELECT * FROM CKIII ');
              SQL.Add(' WHERE SN > :v_SUCHE '); // kein LIKE, sondern =, >, =>, < und <=
              Prepared := True;
              Parameters.ParamByName('v_SUCHE').ParamType := ptInput;
              Parameters.ParamByName('v_SUCHE').DataType := ftInteger;
              Parameters.ParamByName('v_SUCHE').Value := StrToInt(Edit1.Text);

              Parameters.ParamByName('v_SUCHE').AsInteger := StrToInt(Edit1.Text);
              Open;
            end;
        end;
    ...
Zitat von Luciano:
Wie kann das sein? Ich glaube ich rate meinem Chef wieder zu Delphi 6!!!
Wieso das ? IN Delphi 6 hast Du das gleiche Problem.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: SQL Parameterübergabe

  Alt 28. Jun 2005, 07:08
Hi,
Erstmal vielen Dank für die Antworten, leider komme ich heute nicht mehr dazu mich mit diesem Problem zu befassen und muß das ganze auf heute Abend verschieben. Ich werde eure Ansätze testen und versuchen das "irgendwie" umzusetzten. Mein Ergebnis bekommt ihr dann später

Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: SQL Parameterübergabe

  Alt 28. Jun 2005, 07:08
Zitat von Luciano:
wenn ich das '%' weg lasse geht es aber dann kann ich eben nicht wie gewünscht nach einem Teil der SN suchen. Deshalb eben
SN LIKE :v_SUCHE Wenn ich das so mache geht es aber dann eben OHNE '%'
SN = :v_SUCHE
Wenn SN ein INteger ist funktioniert das auch nicht in Delphi 1,2,3,4,5,6,7 und 8 !
Es funktioniert auch nicht in C++ oder C# !
Das ist eine Regel von SQL, also der Datenbank.

Zitat von Luciano:
Die Anwendung kommt wirklich nicht mit der Übergabe "Edit1.Text+'%'" als VALUE zurecht, das hatte aber sonst mit Delphi6/7 immer gefunzt. Ist das jetzt ein neues feature von Delphi 2005???? Wenn ich mich schon mit so kleinigkeiten rumärgern muß wechsel ich wieder zu meinem guten "alten" Delphi.
Bei Strings ja, bei Integer nein.

Es macht ja bei Integer auch keinen Sinn

Code:
Wert
1
2
3
...
10
11
12
...
100
101
...
10845180471
ein Wert LIKE "1%" würde folgede Zahlen auswählen:
Code:
Wert
1
10
11
12
100
101
10845180471
Wenn Du diese Zahlen wirklich so auswählen willst mach aus dem SN einen VARCHAR (String) in der Datenbank.
oder verwende die Operatoren für Zahlen: =, >, <, ...
z.B. Wert < 11 gibt folgendes zurück
Code:
Wert
1
2
3
...
10
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: SQL Parameterübergabe

  Alt 29. Jun 2005, 07:36
Hi MaBuSE,

ich muß dir vollkommen recht geben. In meinem übereifer habe ich mal wieder völlig das Nachdenken vergessen. Da es ein Integerwert ist geht das so ja gar nicht deshalb als String und alle sind glücklich. Danke für deine Antworten!!!

Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

Re: SQL Parameterübergabe

  Alt 29. Jun 2005, 07:39
Zitat von Luciano:
Da es ein Integerwert ist geht das so ja gar nicht deshalb als String und alle sind glücklich.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  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 20:56 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