AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SELECT mit mehrfachen records - moeglich ?

SELECT mit mehrfachen records - moeglich ?

Ein Thema von FrankBKK · begonnen am 17. Aug 2008 · letzter Beitrag vom 18. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von FrankBKK
FrankBKK

Registriert seit: 20. Mai 2005
Ort: Bangkok
35 Beiträge
 
Delphi 7 Enterprise
 
#1

SELECT mit mehrfachen records - moeglich ?

  Alt 17. Aug 2008, 17:43
Datenbank: Firebird • Version: 1.5x • Zugriff über: IBO
Hallo zusammen,

ich bin mir nicht sicher ob man das ueberhaupt so loesen kann, aber jeder Hilfe ist willkommen,
ich stehe da total auf dem Schlauch ...

Fuer einen Report soll eine Query erzeugt werden um einige Etiketten zu drucken -
die Anzahl der Etiketten pro Artikel richtet sich nach dem Wert im Datenbank-Feld MENGE des jewiligen Artikels.

Beispiel:
Artikel / Preis / Menge
4711 - 1.50 - 4
4712 - 2.20 - 8
4713 - 1.30 - 2

Fuer Produkt 4711 sollen also 4 Etiketten gedruckt werden,
fuer Produkt 4712 sollen dann 8 Etiketten gedruckt werden,
fuer Produkt 4713 sollen noch 2 Etiketten gedruckt werden,

Die SQL-Abfrage sollte also in etwa folgende Ergebnismenge liefern:
Produkt / Preis
4711 - 1.50
4711 - 1.50
4711 - 1.50
4711 - 1.50
4712 - 2.20
4712 - 2.20
4712 - 2.20
4712 - 2.20
4712 - 2.20
4712 - 2.20
4712 - 2.20
4712 - 2.20
4713 - 1.30
4713 - 1.30

d.h. irgendwie muessen die einzelnen Datensaetze MENGE-mal geclont werden -
ich komm einfach nicht dahinter wie man das machen kann ...

Hat jemand ne Idee wie man das in eine SELECT - Anweisung fasst ?
Frank
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SELECT mit mehrfachen records - moeglich ?

  Alt 17. Aug 2008, 17:53
Da wirst du um eine SP nicht herumkommen
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: SELECT mit mehrfachen records - moeglich ?

  Alt 17. Aug 2008, 18:02
Zitat von mkinzler:
..um eine SP nicht herumkommen
Hört sich so an, als müsste man die vermeiden. 8) Weitere Stichworte sind :

for count Das dann im Delphi-Programm auswerten.
Gruß
Hansa
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: SELECT mit mehrfachen records - moeglich ?

  Alt 17. Aug 2008, 18:08
Die dann so aussehen könnte...
SQL-Code:
CREATE PROCEDURE MAKEOUTOUT ()
RETURNS (
  Spalte1 Integer,
  Spalte2 Integer,
  Spalte3 Varchar(500),
  Anzahl Integer
)
AS
DECLARE VARIABLE i INTEGER;
BEGIN
  FOR SELECT Spalte1, Spalte2, Spalte3, Anzahl
      FROM tabelle
      INTO Spalte1, Spalte2, Spalte3, Anzahl DO
  BEGIN
    i = 0;
    WHILE (i < Anzahl) DO BEGIN
      SUSPEND;
      i = i + 1;
    END
  END
END
Edit: Hier noch ein Hack, mit dem das auch einfach mit SQL geht.
Dies setzt allerdings eine Tabelle mit Zahlen voraus.

SQL-Code:
SELECT *
FROM tabelle, anzahlen
WHERE zahl <= anzahl
Hier wird also eine neue Tabelle benötigt, die immer alle Zahlen von 1 bis zur maximal größten Anzahl in "tabelle" enthält. Wenn du da also einfach alle Zahlen von 1 bis 1000 einmal in solch eine Tabelle einträgst, sollte das vielleicht reichen.
Oder du erstellst deine SQL-Abfrage dynamisch, dann kannst du diese Anzahl-Tabelle auch produzieren...
SQL-Code:
SELECT *
FROM tabelle, (SELECT 1 zahl FROM tabelle
               UNION
               SELECT 2 FROM tabelle
               UNION
               SELECT 3 FROM tabelle) anzahlen
WHERE zahl <= anzahl
Dies hat den Vorteil gegenüber einer SP, dass du bei Spaltenänderungen an deiner Tabelle die neuen Informationen schneller in deinem Report zur Verfügung hast. Bei einer SP musst du da erst alle neuen Spalten durchschleppen.

Dies würde unter MSSQL mit einer Benutzerdefinierten Funktion noch viel geschickter gehen, aber das ist eine andere Geschichte...

War nur so eine Idee...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: SELECT mit mehrfachen records - moeglich ?

  Alt 17. Aug 2008, 19:12
Sttat SP könnte man auch einen EXECUTE BLOCK verwenden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: SELECT mit mehrfachen records - moeglich ?

  Alt 17. Aug 2008, 19:25
Zitat von FrankBKK:
d.h. irgendwie muessen die einzelnen Datensaetze MENGE-mal geclont werden -
ich komm einfach nicht dahinter wie man das machen kann ...
Was willst du damit machen? Warum brauchst du die Records jeweils x mal in der Ergebnismenge. Wäre es nicht sinnvoller, ein normales Select abzufeuern, und dann Record für Record die Menge jeweils auszuwerten und damit zu machen was du möchtest(z.B. x Etiketten ausdrucken)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: SELECT mit mehrfachen records - moeglich ?

  Alt 17. Aug 2008, 19:35
Zitat von Jelly:
(z.B. x Etiketten ausdrucken)
Dazu ist das COUNT da. Hiermit das x ermitteln. SP wird nicht mal gebraucht. SELECT COUNT (BLUBB) FROM TABLEX WHERE BLA INTO :ETIKETTEN Den Wert im Dataset auslesen und im Programm x-mal drucken. Basta.
Gruß
Hansa
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: SELECT mit mehrfachen records - moeglich ?

  Alt 17. Aug 2008, 19:41
Um dem Ganzen mal eine andere Denkrichtung zu geben...

Man kann Etiketten auch z.B. mit Microsoft Word erstellen. Dort ist es einfacher die Datenquelle zu manipulieren. Und da wird dann so ein Clonen benötigt.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#9

Re: SELECT mit mehrfachen records - moeglich ?

  Alt 17. Aug 2008, 19:42
Zitat von mkinzler:
Da wirst du um eine SP nicht herumkommen
Nicht unbedingt, nicht seit Firebird 1.5 oder 2.0.

Einfach das hier mal als Query absetzen:
SQL-Code:
execute block
returns
(
  Name VarChar(30),
  RelationID Integer,
  RowNum Integer
)
as
begin
  for SELECT Rdb$Relation_ID,
             trim(Rdb$Relation_Name)
      FROM Rdb$Relations
      WHERE Rdb$System_Flag = 1
      into :RelationID,
           :Name do
  begin
    RowNum = 1;
    while(RowNum <= RelationID) do
    begin
      suspend;
      RowNum = RowNum + 1;
    end
  end
end;
edit: lol, gerade erst gesehen...
Zitat von mkinzler:
Sttat SP könnte man auch einen EXECUTE BLOCK verwenden.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: SELECT mit mehrfachen records - moeglich ?

  Alt 17. Aug 2008, 19:46
Folgendes ist da trotzdem unverändert...

hier: EXECUTE BLOCK = SP

Zitat von omata:
... dass du bei Spaltenänderungen an deiner Tabelle die neuen Informationen schneller in deinem Report zur Verfügung hast. Bei einer SP musst du da erst alle neuen Spalten durchschleppen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:05 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