AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi INSERT INTO SELECT ohne Spaltenliste
Thema durchsuchen
Ansicht
Themen-Optionen

INSERT INTO SELECT ohne Spaltenliste

Ein Thema von Alex.G · begonnen am 18. Okt 2011 · letzter Beitrag vom 24. Okt 2011
Antwort Antwort
Seite 5 von 5   « Erste     345   
Furtbichler
(Gast)

n/a Beiträge
 
#41

AW: INSERT INTO SELECT ohne Spaltenliste

  Alt 22. Okt 2011, 09:01
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.
  Mit Zitat antworten Zitat
YogiBär

Registriert seit: 2. Apr 2011
Ort: NRW
2 Beiträge
 
#42

AW: INSERT INTO SELECT ohne Spaltenliste

  Alt 24. Okt 2011, 11:57
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) <> 'PINDEXthen
      if uppercase(cfname) <> 'ROWGUIIGthen
      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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 5   « Erste     345   


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 15:03 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