AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Stored Procedure Abfrage ob Eintrag vorhanden
Thema durchsuchen
Ansicht
Themen-Optionen

Stored Procedure Abfrage ob Eintrag vorhanden

Ein Thema von Metallicwar · begonnen am 28. Feb 2011 · letzter Beitrag vom 1. Mär 2011
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 28. Feb 2011, 12:37
Muß die BLZ ein Integer sein?
Soweit ich weiß, wird damit nicht gerechnet und da würde ein Char-Typ sich doch eher anbieten.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#2

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 28. Feb 2011, 12:45
das Feld in der Tabelle ist ein Integer Feld, daher wird auch ein Integer erwartet, oder nicht?
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#3

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 28. Feb 2011, 14:59
Code:
FUNCTION ZMI_Bankdaten
   ( 
   such cichar(100)
   )
   RETURNS Memo
BEGIN
  declare @Bankleitzahl integer;
  declare @Bankname string;
  try
    @Bankleitzahl=cast(such as sql_integer);
  catch all
    @Bankname=trim(such);
  end try;
  if @Bankleitzahl is NULL then
    @Bankleitzahl= (SELECT Bankleitzahl FROM Bankdaten WHERE Bankname = such);
  else
    @Bankname= (SELECT Bankname FROM Bankdaten WHERE Bankleitzahl = such);
  endif;
  return trim(cast(@Bankleitzahl as sql_char))+' '+@Bankname;
END;
Soo, beim Eingeben einer Zahl natürlich in '' (
Code:
DECLARE @test Memo;
@test = ZMI_Bankdaten('10000000');
bekomm ich folgende Fehlermeldung:
Invalid operand for operator: = **
Script error information: -- Location of error in the SQL statement is: 295 (line: 11 column: 16) Error in UDF: ZMI_Bankdaten

Bei Eingabe einer Bank (
Code:
DECLARE @test Memo;
@test = ZMI_Bankdaten('Bundesbank');
liefert er mir die entsprechende PLZ zurück. Dazu eine Frage, werden bei Functionen der Rückgabewerd nicht wie bei Prozeduren in der Messagebox angezeigt?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 28. Feb 2011, 15:26
Könnte es sein, daß
Code:
SELECT Bankname FROM Bankdaten WHERE Bankleitzahl = such
ein NULL zurück liefert, was dann wieder in '' übersetzt werden müßte?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#5

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 28. Feb 2011, 15:32
hmn, mir is jetzte nicht klar, wieso ich das wieder umwandeln muss?
@bankname is vom typ string
und bei meinem Select erhalte ich doch auch einen Text zurück ?!?
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
684 Beiträge
 
Delphi 12 Athens
 
#6

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 28. Feb 2011, 15:54
if @Bankleitzahl is NULL then
@Bankleitzahl= (SELECT Bankleitzahl FROM Bankdaten WHERE Bankname = such);
else
@Bankname= (SELECT Bankname FROM Bankdaten WHERE Bankleitzahl = such);
naja, 'such' ist string...'bankleitzahl' aber integer. Nimm doch einfach
@Bankleitzahl= (SELECT Bankleitzahl FROM Bankdaten WHERE Bankname = @bankname);
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#7

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 28. Feb 2011, 16:07
Er knallt in der Zeile,
Code:
@Bankname= (SELECT Bankname FROM Bankdaten WHERE Bankleitzahl = such);
nicht in der @Bankleitzahl .....

wie gesagt mit der Fehlermeldung: Invalid operand for operator...
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#8

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 1. Mär 2011, 08:06
ah ok, habs hinbekommen !!!

Code:
FUNCTION ZMI_Bankdaten
   ( 
   suchwert cichar(100)
   )
   RETURNS Memo
BEGIN
  DECLARE @Bankleitzahl integer;
  DECLARE @Bankname string;
  TRY
    @Bankleitzahl=cast(suchwert as sql_integer);
  catch all
    @Bankname=trim(suchwert);
  END TRY;
  IF @Bankleitzahl is NULL then
    @Bankleitzahl= (SELECT Bankleitzahl FROM Bankdaten WHERE Bankname = @bankname);
  ELSE
    @Bankname= (SELECT Bankname FROM Bankdaten WHERE Bankleitzahl = @Bankleitzahl);
  ENDIF;
  return trim(cast(@Bankleitzahl as sql_char))+' '+@Bankname;

END;
Vielen Dank Herr Dürr!
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#9

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 1. Mär 2011, 08:53
Doch noch eine Frage
Beim Aufruf der Function über Delphi, wie kann ich mir das Ergebnis der Query in einem Editfeld anzeigen lassen.
Bei gewöhnlichen Abfragen (Select NAME from BENUTZER WHERE NAME = Hugo) ist dies ja über edtRückgabe.Text := qBankdaten.FieldByName('NAME').asString möglich.
Wenn ich hier als Feld ZMI_Bankdaten angebe, sagt er, dass er das angegebene Feld nicht finden kann.
Wie kann ich das lösen?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  qBankdaten.SQL.Text := 'SELECT ZMI_Bankdaten('+QuotedStr(edtSuchwert.Text)+') FROM system.iota';
  qBankdaten.Open;
  edtRückgabe.Text := // das Ergebnis der Query als Text an mein EditFeld übergeben
end;
  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 23:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz