Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren (https://www.delphipraxis.net/155097-sql-datensaetze-von-einer-tabelle-eine-andere-tabelle-kopieren.html)

nachtstreuner60 8. Okt 2010 10:37

Datenbank: SQL SERVER 2008 • Version: 2008 • Zugriff über: ADO

SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren
 
Hallo Delphi-Spezialisten,

ich habe eine Datenbank in der sich 4 Tabellen befinden:

PRODUKTE ist gefüllt ca. 15.000 Datensätze
PRODUKTE_01 identisch wie Produkte aber leer
PRODUKTE_02 identisch wie Produkte aber leer
PRODUKTE_03 identisch wie PRODUKTE aber leer

Mit INSERT into ...SELECT from WHERE... möchte ich nun alle Datensätze der Tabelle PRODUKTE in die TABELLE Produkte_01 kopieren.

Bei der Ausführung des Select-Statements wird aber nur der erste Datensatz kopiert !!

Hier mal der Quell-CODE :
Code:
//==============================================================================
// DATENBANK sichern
//==============================================================================
Procedure Tform1.DB_SICH;
begin
   Showmessage(IntToStr(BACKZAHL));
   if BACKZAHL = 1 then begin
      // leere die BACKUP-DB Nr. 1
      ADOQueryMetro.SQL.Clear;
      ADOQueryMetro.SQL.Text := 'TRUNCATE table dbo.PRODUKTE_01';
      ADOQueryMETRO.ExecSQL;

      SHowmessage('DB leer');
      // Füge Datensätze an
      ADOQueryMETRO.SQL.Clear;
      ADOQueryMETRO.SQL.Text := 'INSERT INTO PRODUKTE_01 '+
          '(EAN_NR, ART_NR, ART_BEZ_ALTERN, PWHG, PWG, PWUG, KZ_WERB) '+
          ' SELECT EAN_NR, ART_NR, ART_BEZ_ALTERN, PWHG, PWG, PWUG, KZ_WERB'+
          ' FROM PRODUKTE Where EAN_NR <> '+ QuotedStr('');
      ADOQueryMETRO.ExecSQL;

      Showmessage('tabelle kopiert');
   end;
end;
Hat jemand eine IDEE ??

Vielen dank schonmal im voraus

taveuni 8. Okt 2010 10:55

AW: SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren
 
Was passiert denn wenn Du:

Delphi-Quellcode:
'SELECT * FROM PRODUKTE Where EAN_NR <> '+ QuotedStr('')';
machst?

Oder besser
Delphi-Quellcode:
SELECT * FROM PRODUKTE Where EAN_NR <> :EAN_NR;
Qry.ParamByName('EAN_NR')AsString := '';
Wobei ist denn EAN_NR überhaupt ein VARCHAR?
Und ist das leere Feld nicht zufälligerweise NULL?

Und dann noch:
Wenn Du alle Datensätze mit allen Werten kopieren musst:
Weshalb nicht:

Delphi-Quellcode:
'INSERT INTO PRODUKTE_01 SELECT * FROM PRODUKTE Where EAN_NR <> :EAN_NR';

nachtstreuner60 8. Okt 2010 11:17

AW: SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren
 
Hallo taveuni,

vielen Dank für Deine Ausführungen.

Das Feld ist VarChar(13). Die Abfrage mit Parameter ergibt dasselbe Ergebnis !
Hier der geänderte Code:
Code:
//==============================================================================
// DATENBANK sichern
//==============================================================================
Procedure Tform1.DB_SICH;
begin
   Showmessage(IntToStr(BACKZAHL));
   if BACKZAHL = 1 then begin
      // leere die BACKUP-DB Nr. 1
      ADOQueryMetro.SQL.Clear;
      ADOQueryMetro.SQL.Text := 'TRUNCATE table dbo.PRODUKTE_01';
      ADOQueryMETRO.ExecSQL;

      SHowmessage('DB leer');
      // Füge Datensätze an
      ADOQueryMETRO.SQL.Clear;
      ADOQueryMETRO.SQL.Text := 'INSERT INTO PRODUKTE_01 '+
          ' SELECT * FROM PRODUKTE Where EAN_NR <> :sEAN_NR';
      ADOQueryMETRO.Parameters.ParamByName('sEAN_NR').Value := '';
      ADOQueryMETRO.ExecSQL;

      Showmessage('tabelle kopiert');
   end;
end;
Das einfache Select-Statement (SELECT * from PRODUKTE where EAN_NR <> '') ergibt :

15580 Reihen abgerufen (577 ms)

Gruss nachtstreuner60

GHorn 8. Okt 2010 11:31

AW: SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren
 
Hallo,

setz den select-Befehl doch mal separat ab und lass dir anzeigen,
wieviele Datensätze gefunden wurden. Ich denke, der Hinweis von
taveuni bzgl. NULL ist wichtig.

nachtstreuner60 8. Okt 2010 11:34

AW: SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren
 
Hallo GHorn,

das habe ich bereits gemacht, siehe vorhergehenden Beitrag.
Da dieses Feld der PK ist und not NULL muss es angezeigt werden.

Die Abfrage hat über 15.500 DS ergeben !!:|

GHorn 8. Okt 2010 11:38

AW: SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren
 
:duck: wer lesen kann ist klar im Vorteil ...

Hatte ich glatt übersehen.:oops::oops:

taveuni 8. Okt 2010 13:48

AW: SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren
 
Zitat:

Zitat von nachtstreuner60 (Beitrag 1054481)
Hallo taveuni,
Das einfache Select-Statement (SELECT * from PRODUKTE where EAN_NR <> '') ergibt :
15580 Reihen abgerufen (577 ms)

Und hast Du dieses Statement in einem Frontend abgesetzt oder ebenfalls in Delphi?

nachtstreuner60 8. Okt 2010 14:15

AW: SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo tavuni,

jetzt hast mich aber auf was gebracht !!!!!
:oops: Vergessen in der QueryKomponente den ConnectionString zu übergeben !!

Nachgeholt !!! ... und siehe da...

Wenn ich das Proggie durchlaufen lasse wird die Zieltabelle mit allen Daten gefüllt

Vielen Dank an all ! Bestes Forum
:thumb:


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