Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi INSERT INTO SELECT ohne Spaltenliste (https://www.delphipraxis.net/163828-insert-into-select-ohne-spaltenliste.html)

Furtbichler 22. Okt 2011 09:01

AW: INSERT INTO SELECT ohne Spaltenliste
 
Man kann in TSQL ganz einfach VON einem entfernten Server Daten holen, ohne einen Verbindungsserver einzurichten: Statt dem Tabellennamen nimmst du "OPENROWSET", also z.B.
Code:
Insert into MyLocalTargetTable
  Select *
  From OPENROWSET
    (
    'SQLNCLI',
    'Server=MyRemoteSourceServer;Trusted_Connection=yes;...',
    'SELECT * from MYRemoteSourceTable'
    )
Das Kommando führst Du auf dem Server aus, auf dem sich die Zieltabelle befindet.

Wenn in der Zieltabelle IDENTITY-Spalten enthalten sind, dann musst Du die Feldliste (ohne die die IDENTITY-Spalten) noch hinzupacken, ansonsten bekommst Du eine Exception, und ich glaube, das ist das eigentliche Problem. Denn das der Befehl "INSERT INTO Target SELECT * FROM Source" funktioniert schon, nur eben nicht, wenn IDENITY-Spalten vorhanden sind.

Alternativ könnte man noch mit DTS arbeiten, aber das ist ein wenig kompliziert.

YogiBär 24. Okt 2011 11:57

AW: INSERT INTO SELECT ohne Spaltenliste
 
Hallo zusammen,

nachfolgend ein kleiner Quellcode zum Kopieren von Daten

Delphi-Quellcode:
Function TForm1.DirektCopy(Source,Target:TADOTable):Boolean;
Var
   i,j:Integer;
   cfname:String;
Begin
//
Result := False;
Try
j := Source.FieldCount-1;
Source.First;
  While not Source.Eof do
  Begin
    Target.Insert;
    For i := 0 to j do
    Begin
      cfname:=Source.Fields[i].FieldName;
      if uppercase(cfname) <> 'PINDEX' then
      if uppercase(cfname) <> 'ROWGUIIG' then
      if Target.FindField(cfname) <> nil then
      begin
      if (Target.FieldByName(cfname).FieldType <> TGUIField)
      and (Target.FieldByName(cfname).FieldType <> TAutoIncField) then
         if Source.FieldByName(cfname).AsVariant >'' then
           Target.FieldByName(cfname).AsVariant := Source.FieldByName(cfname).AsVariant;
      end;
    end;
    Target.post;
    Source.Next;
  end;
  Result := True;
except
  Showmessage('Fehler bei der Umsetzung der Datenbank ');
end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 Uhr.
Seite 5 von 5   « Erste     345   

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