Entwickler-Ecke

Datenbanken - leere Datensätze übernehmen


Stefan_B - Mi 08.01.03 11:38
Titel: leere Datensätze übernehmen
hallo!
habe ein problem.
habe eine sql datenbank in einem dbgrid.
wenn ich dann aber die datensätze (z.b. kundennr.) auf ein anderes grid übernehmen möchte, muss der datensatz auf doppelte nummern oder leere felder geprüft werden. das heisst, wenn die kundennr. koppet vorkommt, muss die dann in das memo und der leere datensatz auch.
das mit der doppelten nummer habe ich hingekriegt aber die leeren felder macht er nicht.
Hier der Quellcode:


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:
procedure TForm1.Button1Click(Sender: TObject);

begin
     wwQuery1.First;

     while not wwQuery2.Eof do
           begin
                wwQuery2.Delete;
           end;
     while not wwQuery1.Eof do
           begin
                if wwQuery2.Locate('KdNr',wwQuery1.FieldByName('KNUMMER').AsInteger,[])
                    then
                    begin
                         if not FileExists('KdNr') then
                         begin
                              Memo1.Lines.add(wwQuery1.FieldByName('KNUMMER').AsString);
                         end
                         else
                            begin
                                 wwQuery2.Insert;
                                 wwQuery2.FieldByName('KdNr').AsInteger:=
                                 wwQuery1.FieldByName('KNUMMER').AsInteger;
                                 wwQuery2.Post;
                            end;
                                 wwQuery1.Next;
                    end;
           end;
end.


Klabautermann: Code Tags hinzugefügt.


LCS - Mi 08.01.03 12:09

Hallo
um ehrlich zu sein, weiss ich nicht so richtig, was du mit dem FileExists bezwecken willst. Es geht doch nur darum Sätze mit doppelter oder nicht vorhandener Nummer auszuschliessen, oder? Das könntest du z. B. so machen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  wwQuery1.First; 

  while not wwQuery2.Eof do 
  begin 
    wwQuery2.Delete; 
  end; 
  while not wwQuery1.Eof do 
  begin 
    if (wwQuery1.FieldByName('KNUMMER').IsNull)
    or (wwQuery2.Locate('KdNr',wwQuery1.FieldByName('KNUMMER').AsInteger,[])) then
        Memo1.Lines.add(wwQuery1.FieldByName('KNUMMER').AsString)
    else begin 
        wwQuery2.Insert; 
        wwQuery2.FieldByName('KdNr').AsInteger:= wwQuery1.FieldByName('KNUMMER').AsInteger; 
        wwQuery2.Post; 
    end; 
    wwQuery1.Next; 
  end; 
end;


Gruss Lothar


Stefan_B - Mi 08.01.03 12:21

danke für die berichtigung!
du hast noch ein end. vergessen ;-)
aber es funktioniert!!!!

vielen dank!


Stefan_B - Mi 08.01.03 13:02

kannst du mir vielleicht auch verraten, wie ich die danach den Namen übertragen kann?


Stefan_B - Mi 08.01.03 13:04

falsches deutsch :-(
wie krieg ich nach dieser funktion die anderen einträge (z.b. name) rüber?

danke


Stefan_B - Mi 08.01.03 13:05

Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
wwQuery1.First;

while not wwQuery2.Eof do
begin
wwQuery2.Delete;
end;
while not wwQuery1.Eof do
begin
if (wwQuery1.FieldByName('KNUMMER').IsNull)
or (wwQuery2.Locate('KdNr',wwQuery1.FieldByName('KNUMMER').AsInteger,[])) then
Memo1.Lines.add(wwQuery1.FieldByName('KNUMMER').AsString)
else
begin
wwQuery2.Insert;
wwQuery2.FieldByName('KdNr').AsInteger:= wwQuery1.FieldByName('KNUMMER').AsInteger;
wwQuery2.Post;
end;
wwQuery1.Next;
end;
begin
wwQuery1.First;
while wwQuery1.Eof do
begin
if (wwQuery1.FieldByName('KNAME1').IsNull)
or (wwQuery2.Locate('Name1',wwQuery1.FieldByName('KNAME1').AsString,[])) then
Memo1.Lines.add(wwQuery1.FieldByName('KNAME1').AsString)
else
begin
wwQuery2.Insert;
wwQuery2.FieldByName('Name1').AsString:= wwQuery1.FieldByName('KNAME1').AsString;
wwQuery2.Post;
end;
wwQuery1.Next;
end;
end;
end;
end.


LCS - Do 09.01.03 09:55

Ha, erwischt :mrgreen:
Da hast du in deiner Fragestelle aber ein bisschen was ausgelassen. Du hast also einen Datensatz mit vielen Feldern und der soll komplett in eine andere Tabelle übertragen werden ausser die Nummer ist schon vorhanden oder der Satz ist leer?
Was soll dann passieren, wenn nur einige Felder leer sind, oder wenn der Satz schon verhanden ist, aber geändert wurde? Beschreib doch mal bitte ein bisschen genauer was du da vorhast.

Gruss Lothar


Stefan_B - Do 09.01.03 11:19

hi!
der code sieht jetzt so aus:
procedure TForm1.Button1Click(Sender: TObject);
begin
wwQuery1.First;

while not wwQuery2.Eof do
begin
wwQuery2.Delete;
end;
while not wwQuery1.Eof do
begin
if (wwQuery1.FieldByName('KNUMMER').IsNull)
or (wwQuery2.Locate('KdNr',wwQuery1.FieldByName('KNUMMER').AsInteger,[]))
then Memo1.Lines.add(wwQuery1.FieldByName('KNUMMER').AsString)
else
begin
wwQuery2.Insert;
wwQuery2.FieldByName('KdNr').AsInteger:= wwQuery1.FieldByName('KNUMMER').AsInteger;
wwQuery2.FieldByName('Name1').AsString:=wwQuery1.FieldByName('KNAME1').AsString;
wwQuery2.FieldByName('Name2').AsString:=wwQuery1.FieldByName('KNAME2').AsString;
wwQuery2.FieldByName('Strasse').AsString:=wwQuery1.FieldByName('KSTRASSE').AsString;
wwQuery2.FieldByName('PLZ').AsString:=wwQuery1.FieldByName('KPLZ').AsString;
wwQuery2.FieldByName('Postfach').AsString:=wwQuery1.FieldByName('KPOSTFACH').AsString;
wwQuery2.FieldByName('PLZPostfach').AsString:=wwQuery1.FieldByName('KPOSTFPLZ').AsString;
wwQuery2.FieldByName('Ort').AsString:=wwQuery1.FieldByName('KORT').AsString;
wwQuery2.FieldByName('Telefon').AsString:=wwQuery1.FieldByName('KTELEFON').AsString;
wwQuery2.FieldByName('Telefax').AsString:=wwQuery1.FieldByName('KTELEFAX').AsString;
wwQuery2.FieldByName('KonPers').AsString:=wwQuery1.FieldByName('KPNAME1').AsString;
wwQuery2.FieldByName('Bank').AsString:=wwQuery1.FieldByName('KBANK').AsString;
wwQuery2.FieldByName('KontoNr').AsInteger:=wwQuery1.FieldByName('KKTONR').AsInteger;
wwQuery2.FieldByName('BLZ').AsString:=wwQuery1.FieldByName('KBLZ').AsString;
wwQuery2.FieldByName('E_Mail').AsString:=wwQuery1.FieldByName('KEMAIL').AsString;
wwQuery2.Post;
end;
wwQuery1.Next;
end;
end;
end.

aber kann ich denn auch die ganzen felder auch in die makro werfen?
:roll:


LCS - Do 09.01.03 11:26

Hi
Stefan_B hat folgendes geschrieben:
aber kann ich denn auch die ganzen felder auch in die makro werfen?
:roll:

Ich geb mir ja die grösste Mühe zu erraten was du damit meinst, aber :nixweiss:
Ausserdem wärs nett, wenn du dir mal angewöhnen könntest in deinen Postings Format-Tags zu verwenden.

Gruss Lothar


Stefan_B - Do 09.01.03 11:33

hallo lothar.
ich meine, wenn ich die daten mit einem button von einem grid ins andere übernehme. fügt er ja die doppelte kundennr. ins memo ein. wie kann ich z.b. auch den kundennamen daneben packen?
code:
then Memo1.Lines.add(wwQuery1.FieldByName('KNUMMER').AsString)


LCS - Do 09.01.03 11:43


Quelltext
1:
2:
3:
 
then Memo1.Lines.add( wwQuery1.FieldByName('KNUMMER').AsString + ' '
+  wwQuery1.FieldByName('KNAME').AsString)



Quelltext
1:
Zum Kennzeichnen von Programmcode: [code] und [/code]                    


Gruss Lothar


Stefan_B - Do 09.01.03 12:01

danke lothar! :lol:


Quelltext
1:
 Das mit dem Code krieg ich auch noch hin!  :wink:                    


LCS - Do 09.01.03 12:02

Tusch, Jubel, tosender Applaus :party: :mrgreen: