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
Metallicwar

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

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 1. Mär 2011, 11:58
doch nochmal ne Frage:
Habe die ganze Zeit zum Testen eine gekürzte Bankdatenliste verwendet, nur die ersten 20 Einträge der Liste, damit das Suchen nicht zu lange dauert. Verwende ich nun aber die vollständige Liste werden mir bei manchen BLZ mehrere Banken angezeigt und auch umgekehrt. Logischerweise knallt es dann:
Code:
SELECT sub-query returned more than one row. with scalar CAST --
bei
Code:
SELECT Bankname, Bankleitzahl FROM Bankdaten WHERE Bankleitzahl = 10000000
erhalte ich einen Banknamen
bei
Code:
SELECT Bankname, Bankleitzahl FROM Bankdaten WHERE Bankname = 'Bundesbank'
erhalte ich mehrere Einträge (immer den selben Banknamen aber unterschiedliche Bankleitzahlen)

ich hab im Buch von Herrn Dürr mal nachgeschlagen, ob es evtl. eine Funktion gibt um mit dem ersten Ergebnis des Selects weiterzuarbeiten und bin auf
Code:
COALESCE(expr1, ..)
gestoßen "Liefert das erste ERgebnis der ARgumentenliste, welches nicht in NULL resultiert."

Kann ich mit dieser Funktion arbeiten, oder ist es auf einem anderen Weg zu lösen?
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

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

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 1. Mär 2011, 12:30
SELECT sub-query returned more than one row. with scalar CAST --
Dürfen mehrere Einträge zurückkommen (also: interessieren die)? Wenn ja, wäre in diesem Fall dann eine Stored Procedure richtig, da die ein komplettes Resultset liefert. Falls es nicht relevant ist und die erste Fundstelle einfach genommen werden soll, dann einfach ein max() oder top 1 einfügen, also zB
@Bankleitzahl= (SELECT top 1 Bankleitzahl FROM Bankdaten WHERE Bankname = @bankname); oder
@Bankleitzahl= (SELECT max(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
 
#3

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 1. Mär 2011, 12:40
Zitat:
Dürfen mehrere Einträge zurückkommen (also: interessieren die)? Wenn ja, wäre in diesem Fall dann eine Stored Procedure richtig, da die ein komplettes Resultset liefert
ja sind interessant, dann müsst ich wohl doch wieder eine Stored Procedure schreiben ...
kann ich diesen Code nicht einfach übernehmen?

würde es mir dann so vorstellen, dass ich alle Bankleitzahlen + Bankname in eine Listbox oder in ein Memo schreibe.
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

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

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 1. Mär 2011, 13:35
geht viel einfacher als über functions oder storedprocs:
Delphi-Quellcode:
query.sql.text:='select * from bankdaten where contains(bankname,:such1) or cast(bankleitzahl as sql_char) like :such2';
query.parambyname('such1').asstring:=edtSuchwert.Text;
query.parambyname('such2').asstring:=edtSuchwert.Text;
query.open;
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
 
#5

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 1. Mär 2011, 14:11
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sZeichenLoeschen: String;
  iDatensätze: Integer;
begin
  qBankdaten.sql.text:='select * from bankdaten where contains(bankname,:such1) or cast(bankleitzahl as sql_char) like :such2';
  qBankdaten.parambyname('such1').asstring:=edtSuchwert.Text;
  qBankdaten.parambyname('such2').asstring:=edtSuchwert.Text;
  qBankdaten.open;
  for iDatensätze := 0 to qBankdaten.{?} - 1 do
  // Alle Ergebnisse in ein Memo schreiben Memo1.Lines.Add(Bankleitahl + Bankname)
könnte mir nochmal jmd weiterhelfen?
wenn ich nur Memo1.Lines.Add(qBankdaten.FieldByName('bankleitzahl').AsString); zeigt er mir nur eine Bankleitzahl an, aber das will ich ja nicht !
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 1. Mär 2011, 14:25
wenn ich nur Memo1.Lines.Add(qBankdaten.FieldByName('bankleitzahl').AsString); zeigt er mir nur eine Bankleitzahl an, aber das will ich ja nicht !
Und warum schreibst Du dann "bankleitzahl"?

entweder Du holst alles über Fields /Fieldcount ab, hat den Vorteil, daß Du den Namen nicht kennen mußt,
oder du mußt alle zurückgegebenen Felder mit Namen ansprechen:
Delphi-Quellcode:
Memo1.Lines.Add(qBankdaten.FieldByName('Feld1').AsString);
Memo1.Lines.Add(qBankdaten.FieldByName('Feld2).AsString);
..
Memo1.Lines.Add(qBankdaten.FieldByName(
'FeldN').AsString);
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
 
#7

AW: Stored Procedure Abfrage ob Eintrag vorhanden

  Alt 1. Mär 2011, 15:07
irgendwie hab ich grade einen Hänger

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sZeichenLoeschen: String;
  iDatensätze: Integer;
begin
  qBankdaten.sql.text:='select * from bankdaten where contains(bankname,:such1) or cast(bankleitzahl as sql_char) like :such2';
  qBankdaten.parambyname('such1').asstring:=edtSuchwert.Text;
  qBankdaten.parambyname('such2').asstring:=edtSuchwert.Text;
  qBankdaten.open;
  for iDatensätze := 0 to qBankdaten.FieldCount - 1 do
  begin
    Memo1.Lines.Add(qBankdaten.FieldByName('Bankleitzahl').AsString + '= ' + qBankdaten.FieldByName('Bankname').AsString);
    qBankdaten.Next;
  end;
end;
Er trägt mir irgendwie immer drei Bankleitzahlen ein + den zugehörigen Banknamen, aber es müssen etliche mehr sein, was mach ich denn noch falsch?

Und wenn ich anstatt eines Banknamens eine PLZ eintrage (und diese ist ja eindeutig) krieg ich trotzdem 3 mal die selbe BLZ + Banknamen angezeigt.

Geändert von Metallicwar ( 1. Mär 2011 um 15:10 Uhr)
  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 04:12 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