Entwickler-Ecke

Datenbanken - Vergleich zweier Datenbanken in Feldern !


Jagg - Mi 04.12.02 14:37
Titel: Vergleich zweier Datenbanken in Feldern !
Hallo !

Ich habe eine Tabelle (Bestell.dbf) und eine (Material.dbf) !
In beiden Tabellen ist das Feld (ArtNr) enthalten !
In die (Bestell.dbf) schreibe ich den Wert für das Feld (ArtNr) hinein !
In der (Material.dbf) sind noch zusätzlich zu dem Feld (ArtNr),noch die Felder (Wieviel),(Einheit) und (WasDenn) enthalten !

Mein Problem :

Ich suche in der (Bestell.dbf) nach dem Feld (ArtNr) !
Die Werte soll er mit der Tabelle (Material.dbf) vergleichen und ausgegeben soll (ArtNr),(Wieviel),(Einheit) und (WasDenn) !

Beispiel :

Bestell.dbf : Im Feld steht ArtNr = 100 !
Suche in Material.dbf im Feld ArtNr den Wert 100 !
Wenn gefunden,dann ausgeben Wert von (Wieviel),(Einheit) und (WasDenn),die zu "ArtNr" gehören ! (also,in derselben Zeile sind !)

Habt ihr eine Idee ?

Jagg !


Andi1982 - Do 05.12.02 08:50

hallo,
ich arbeite zwar mit DB2, aber bei dir müsste es genauso gehen:

Quelltext
1:
2:
3:
SELECT ArtNr, WieViel, Einheit, WasDenn
FROM Bestell.dbf T1, Material.dbf T2
WHERE T1.ArtNr = T2.ArtNr;


So sollte es gehen, natürlich arbeitet er das dann für jede Zeile der Tabelle Bestell.dbf durch. Es kann also vorkommen dass er mehrere Rows als Result zurück bekommt.

Gruß Andi


Jagg - Do 05.12.02 11:13

ich arbeite aber mit Table und nicht SQL !
ist es mit SQL besser ?
Wie geht das mit Table ???

Jagg !


LCS - Do 05.12.02 11:58

Ja geht auch mit Tabellen. Du brauchst dazu eine Datasource an deiner Tabelle Bestell.
Die Eigenschaft MasterSource deiner Tabelle Material setzt du auf diese Datasource. Anschliessend legst du über die Eigenschaft MasterFields fest über welche Felder die Verbindung zwischen den beiden Tabellen hergestellt wird. In deinem Fall ArtNr.
Wenn du nun in der Tabelle Bestell einen Datensatz auswählst, werden automatisch in der Tabelle Material der dazugehörende Datensatz ausgewählt.

Gruss Lothar


Jagg - Fr 06.12.02 13:33

Das ist meine Antwort !

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
if Key = VK_F3 then
  begin
    T.DatabaseName := 'C:\BiBA\Mail\';
    T.TableName := 'Bestell.dbf';
    T.Open;
    for i := 1 to 40 do
    begin
      if TE[i].Text<>'' then
      begin
        T.Append;
        T.FieldByName('ArtNr')  .AsInteger := StrToInt(L1[i].Caption);
        T.FieldByName('Wieviel').AsInteger := StrToInt(TE[i].Text);
        T.Post;
      end;
    end;
    Form3.Memo1.Clear;
    TB := TTable.Create(form11);
    TB.DatabaseName := 'C:\BiBA\Mail';
    TB.TableName := 'Bestell.dbf';
    TM := TTable.Create(form11);
    TM.DatabaseName := 'C:\BiBA\Mail';
    TM.TableName := 'Material.dbf';
    TM.Open;
    TB.Open;
    TB.First;
    TM.SetKey;
    TM.First;
    while not TB.eof do
    begin
      TM.TableName := 'Material.dbf';
      if TM.FieldByName('ArtNr').AsString = TB.FieldByName('ArtNr').AsString then
      begin
        if Length(TB.FieldByName('Wieviel').AsString) = 1 then
          y := '  ';
        if Length(TB.FieldByName('Wieviel').AsString) = 2 then
          y := ' ';
        if Length(TB.FieldByName('Wieviel').AsString) = 3 then
          y := '';
        Form3.Memo1.Lines.Add(y+TB.FieldByname('Wieviel').AsString+' '+TM.FieldByname('Einheit').AsString
        +' '+TM.FieldByname('WasDenn').AsString);
        TB.Next;
        TM.First;
      end
      else
        TM.Next;
    end;
    Close;
    Form3.Memo1.SetFocus;
  end;


Jagg !


LCS - Fr 06.12.02 14:02

Hi
Jagg hat folgendes geschrieben:
Das ist meine Antwort !

Um ehrlich zu sein, versteh ich nicht was du uns damit sagen willst :nixweiss:

Gruss Lothar


Jagg - Fr 06.12.02 20:07

hehe ich auch nicht aber naja man lebt nur einmal ! ;)))))))))))))))))