Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Anfrage aus anderer Tabelle bilden (https://www.delphipraxis.net/25187-sql-anfrage-aus-anderer-tabelle-bilden.html)

Luciano 2. Jul 2004 13:42


SQL-Anfrage aus anderer Tabelle bilden
 
Hi...
ich habe da ein Problem

Auszug aus Tabelle Relation
Delphi-Quellcode:
          rel1 rel2 rel3 rel4 rel5
zeile1    12    0    0    0   0
zeile2    23    12   0    0   0 
zeile3    33    31   0    0   0
zeile4    33    23   31   0   0
.
.
.
Es konne x Zeilen vorkommen
jetzt muß ich alle zahlen die nicht doppelt vorkommen in ein SQL Anfrage einbauen
SQL-Code:
Select * FROM UMSCHLAG WHERE
REL = 12 OR REL = 23 OR REL = 33 OR REL = 31
Ich stehe da ein wenig auf dem Schlauch... alles in ein Array packen Sortieren und doppelte Einträge rauswerfen?

Ich benutze SQL-Server2000 und ADOQuery...



Greets

Luciano

MrSpock 2. Jul 2004 13:50

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Hallo Luciano,

was genau meinst du mit "nicht doppelt vorkommen"? Nicht mehrfach in einer Zeile? Ist eine Zahl auch dann "doppelt", wenn sie in Zeile 1 im Feld rel1 und in Zeile 2 in Feld rel3 vorkommt? Erkläre doch noch einmal etwas genauer, was du brauchst.

ibp 2. Jul 2004 14:03

Re: SQL-Anfrage aus anderer Tabelle bilden
 
..ich verstehe das so, daß du nur die zahlen haben willst, die einmal vorkommen? oder?
.. da ist es wohl am sinnvollsten, wie du schon gesagt hast, alle auslesen und einzeln vorkommende filtern.

Luciano 2. Jul 2004 14:05

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Hi...

Genau, dann ist sie auch doppel!

Jede Zahl darf nur einmal vorkommen das heißt ich muß aus allen Zeilen(1..n) alle Zahlen(rel1..rel5) zusammen suchen und dann alles Dopplete aussortieren und aus denen die übrig bleiben eine SQL-Anfrage machen.

Greets

Luciano

ibp 2. Jul 2004 14:09

Re: SQL-Anfrage aus anderer Tabelle bilden
 
...warum dann nochmals eine abfrage, du hast doch dann alle zahlen aus der db..
..vielleicht solltest du dir eine strategie überlegen, daß erst keine doppelten eingeschrieben werden, aber das hängt ja sicherlich von deinen bedingungen ab

Luciano 2. Jul 2004 14:44

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Hi ibp

aus den resultierenden Zahlen muß ich mir andere Datensätze aus der Tabelle UMSCHLAG suchen um diese dann berechnen zu könne... hinter jeder rel(nr) steht ein Betrag der nur für diesen einen bestimmtnen Satz genommen werden kann.


Greets

Luciano

Robert_G 2. Jul 2004 14:51

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Hi Luciano,

Deine Tabelle würde ich in ihrer jetzigen Struktur nicht weiterverwenden. Schaue dir mal Nested Tables an, damit ließe sich das eleganter lösen.

:gruebel: Dieses rel01, rel02, ... Gibt es dafür _wirklich_ einen Grund? Wenn du pro DS mehrere DS in einer anderen Tabelle verknüpfen willst, kannst du doch auch StiNo Foreign keys verwenden.

Luciano 2. Jul 2004 14:57

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Hi Robert_G

Ich bin leider an die jetzige Tabellenstruktur gebunden :? und muß mir leider versuchen so eine Lösung zu "backen". Die Komplette Struktur der ganzen DB ist fürn A*** aber leider kann ich es bzw. darf ich es nicht ändern.

Greets


Luciano

ibp 2. Jul 2004 16:23

Re: SQL-Anfrage aus anderer Tabelle bilden
 
..erläutere doch mal genauer die art der verknüpfung, wird jeder datensatz in umschlag mit einem datensatz in relation verknüpft oder wie?
da muß es doch einen zusammenhang geben es kann doch nicht sein, daß jemand eine tabelle mit einer anderen verknüpft und man diese nur über einfach vorhandene werte ermitteln kann, die irgendwo stehen..

Luciano 5. Jul 2004 07:38

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Hi ibp

Genau so ist es aber. Sorry für meine späte Antwort, ich war übers WE nicht da. Es besteht keine Verknüpfung zwischen den Tabellen. Die Daten in der Tabelle Umschlag werden wirklich nur über die Daten in der Tabelle Relation zusammengesucht und danach berechnet. :(


Greets

Luciano

ibp 5. Jul 2004 07:53

Re: SQL-Anfrage aus anderer Tabelle bilden
 
--blöd--

dann lad dir die daten aus der tabelle relation bei programmstart in ein array, dann kannst du dei ganze zeit darauf zugreifen..

Luciano 5. Jul 2004 08:23

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Hi ibp

genau das wollte ich vermeiden oder eine andere Lösung finden :gruebel: ich werde aber wohl doch bei einem Array bleiben müssen.

Danke für eure bemühungen und Tipps...


Greets

Luciano

ibp 5. Jul 2004 08:35

Re: SQL-Anfrage aus anderer Tabelle bilden
 
...oder du erstellst eine neue tabelle, die mit direkten verweisen auf umschlag zeigt, berechnet aus relation..

Luciano 5. Jul 2004 08:43

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Das verstehe ich gerade mal nicht wie du das meinst. :gruebel: Kannst du mir das mal genauer erklären?


Greets

Luciano

ibp 5. Jul 2004 08:53

Re: SQL-Anfrage aus anderer Tabelle bilden
 
..bis jetzt ist es ja so, daß du die referenz berechnest oä. berechne doch einmal für alle datensätze und hinterlege das ergebnis in eine neue tabelle, von der du dann die referenzen für umschlag nimmst...

vielleicht solltest du den direkten zusammenhang der tabellen mal aufzeigen, dann fällt mir vielleicht ja noch etwas anderes ein...

Luciano 5. Jul 2004 09:14

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Hi..


SQL-Code:
Kontrakt----Partie-----Umschlag
   |
   |
Fakturierung---Vonnach---Relationen
So ist der Aufbau, die Tabellen sind über Primary Key miteinander Verknüpft.

Es geht darum das die Richtigen "Umschläge" zu den vorhandenen Relationen in einem Grid angezeigt werden und der User dann einfach einen Umschlag auswählen kann der dann berechnet werden soll. Die Berechnung funktioniert soweit ja, es geht lediglich darum wie ich nur die passenden Umschläge in einem DBGrid angezeigt bekomme.


Greets Luciano

ibp 5. Jul 2004 09:31

Re: SQL-Anfrage aus anderer Tabelle bilden
 
ach so, jetzt verstehe ich, relation ist in dem sinne keine verknüpfung der tebellen sondern der inhalte....
naja, da bleibt dir sicherlich nichts anderes übrig, als die betreffenden daten aus der relation zu lesen unnd dann alle mehrfach vorkommenden zahlen zu ignorieren..

Luciano 5. Jul 2004 09:35

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Hi ibp

das habe ich auch befürchtet... :evil:

danke für die Hilfe, dann werde ich mir mal ein Array bauen :?


Greets

Luciano

Robert_G 5. Jul 2004 09:57

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Ich verstehe immer noch nicht, warum du nicht einfach dem Ersteller der Tabellenstruktur mit Anlauf in den Hintern trittst. :gruebel:

So wie es jetzt aussieht, wäre zwar eine Lösung über Abfragen _möglich_ , aber sie wäre verdammt widerlich.

Frage mal den Herren Tabellenverhunzer warum ihr den SQL Svr benutzt und nicht mySQL oder ADS (am Besten _bevor_ du Anlauf nimmst!!! :mrgreen: ), so wie das für mich aussieht, verwendet ihr KEINERLEI Features des SQL Svr.

Luciano 5. Jul 2004 10:01

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Hi Robert_G

da hast u vollkommen recht aber jetzt sieht eben die Problemstellung so aus und ich muß dafür jetzt mit diesen Vorgaben eine Lösung finden. Am liebsten würde ich sagen, alles in die Tonne kloppen und neu machen aber das darf ich nicht und die Zeit dazu habe ich leider auch nicht :cry:

Ich muß mir halt so versuchen zu helfen :?

Greets


Luciano

Luciano 5. Jul 2004 15:41

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Ich wollte einfach mal eine unreife Lösung posten für mein Problem, zumindest funktioniert es

Delphi-Quellcode:
  while not DModFakturierung.Q_FFAKTRELA.Eof = True do
    begin
      rela1[z]   := StrToInt(DModFakturierung.Q_FFAKTRELARelation1.Value);
      DModFakturierung.Q_FFAKTRELA.Next;
      inc(z);
    end;

  for i := 0 to (y - 1) do
    begin
      if i = 0 then
        begin
          sRela1 := IntToStr(rela1[i]);
          s1 := '(RELATION = '+QuotedStr(sRela1)+') ';
        end;

      if i > 0 then
        begin
          sRela1 := IntToStr(rela1[i]);
          s1 := 'OR (RELATION = '+QuotedStr(sRela1)+') '
        end;
          s := s + s1;
    end;//END FOR Schleife

  Result := 'AND ('+s+')';

Greets

Luciano

ibp 5. Jul 2004 16:41

Re: SQL-Anfrage aus anderer Tabelle bilden
 
... wie wäre es damit um doppelte zu filtern...

Delphi-Quellcode:
procedure ....

var a: array of integer;
    i,j,anz: integer;

begin
  while not DModFakturierung.Q_FFAKTRELA.Eof do
  begin
    i:=StrToInt(DModFakturierung.Q_FFAKTRELARelation1.Value);
    anz:=length(a); // anzahl der element
    if i>=anz then
    begin
      setlength(a,i+1); // anzahl vergrößern
      for j:=anz to i do
        a[j]:=0; // intialisieren
    end; // if
    inc(a[i]); // diese zahl zufügen
    DModFakturierung.Q_FFAKTRELA.Next;
  end; // while

  for i:=0 to length(a)-1 do
    if a[i]=1 then showmessage(inttostr(i)+' ist nur einmal vorhanden');
end;

[edit] falls 0 auch vorhanden ist, dann intialisiere und frage ab auf -1[/edit]

Luciano 6. Jul 2004 09:36

Re: SQL-Anfrage aus anderer Tabelle bilden
 
Hi ibp

Thx, ich werde es mal bei Gelegenheit testen, bin etwas unter Zeitdruck... :? und muß mal etwas lauffähiges vorzeigen, optimieren kann ich dann immer noch.

Greets

Luciano


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