AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren

Ein Thema von nachtstreuner60 · begonnen am 8. Okt 2010 · letzter Beitrag vom 8. Okt 2010
Antwort Antwort
nachtstreuner60

Registriert seit: 15. Jan 2007
Ort: Eisenach
54 Beiträge
 
Delphi 7 Professional
 
#1

SQL Datensätze von einer Tabelle in eine andere Tabelle kopieren

  Alt 8. Okt 2010, 10:37
Datenbank: SQL SERVER 2008 • Version: 2008 • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 8. Okt 2010, 10:55
Was passiert denn wenn Du:

'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:

'INSERT INTO PRODUKTE_01 SELECT * FROM PRODUKTE Where EAN_NR <> :EAN_NR';
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
nachtstreuner60

Registriert seit: 15. Jan 2007
Ort: Eisenach
54 Beiträge
 
Delphi 7 Professional
 
#3

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

  Alt 8. Okt 2010, 11:17
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
  Mit Zitat antworten Zitat
GHorn

Registriert seit: 24. Mär 2009
Ort: NRW
124 Beiträge
 
#4

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

  Alt 8. Okt 2010, 11:31
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.
  Mit Zitat antworten Zitat
nachtstreuner60

Registriert seit: 15. Jan 2007
Ort: Eisenach
54 Beiträge
 
Delphi 7 Professional
 
#5

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

  Alt 8. Okt 2010, 11:34
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 !!
  Mit Zitat antworten Zitat
GHorn

Registriert seit: 24. Mär 2009
Ort: NRW
124 Beiträge
 
#6

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

  Alt 8. Okt 2010, 11:38
wer lesen kann ist klar im Vorteil ...

Hatte ich glatt übersehen.
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 8. Okt 2010, 13:48
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?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
nachtstreuner60

Registriert seit: 15. Jan 2007
Ort: Eisenach
54 Beiträge
 
Delphi 7 Professional
 
#8

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

  Alt 8. Okt 2010, 14:15
Hallo tavuni,

jetzt hast mich aber auf was gebracht !!!!!
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
Miniaturansicht angehängter Grafiken
ado.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:36 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