![]() |
Datenbank: MSSQL • Version: 2008 • Zugriff über: ADO
Daten von Access nach MSSQL kopieren
Hallo zusammen,
es exisitiert eine kleine Anwendung mit Daten auf ACCESS bzw. MSSQL. Es gibt un Kunden, die nun auf MSSQL migrieren möchten. Wie ist nun die einfachste Möglichkeit - von mir aus auch per batch - die Daten aus der ACCESS-DB in eine existierende , aber leere SQL-DB zu kopieren? Ich würde ungerne die Daten Feldweise von ACCESS nach SQL bewegen, da die Datenstruktur häufig erweitert wird und somit die Konvertierungsprozedur entsprechend nachgezogen werden müsste. Beste Grüße und vielen Dank für kreative Ideen BrinkMan |
AW: Daten von Access nach MSSQL kopieren
Was meinst du mit feldweise?
|
AW: Daten von Access nach MSSQL kopieren
Innerhalb von Access kann man in der Tabellenansicht jede Tabelle exportieren. Das Exportieren erfolgt über einen DSN-Eintrag in der ODBC-Administration und schon sind die Tabellen auf dem MSSQL-Server.
Edit: Ich habe jetzt nochmal genau nachgesehen (Access 2007): Tabellenansicht, Rechte Maus auf die zu exportierende Tabelle, Exportieren, ODBC-Datenbank, OK, Computerdatenquellen, System-DSN auswählen (der muss genug Berechtigung auf dem MSSQL-Server haben) |
AW: Daten von Access nach MSSQL kopieren
@mkinzler:
War eventuell ein wenig missverständlich, da sich die Datenstruktur häufig ändert, möchte ich bei der Migration nicht erst die Datenstruktur von Access in SQL nachbilden (ist sicherlich fehleranfällig) und dann per INSERT alle Datensätze übertragen sondern am liebsten die Tabellen komplett mit der Tabellenbeschreibung in einem Rutsch inkl. Abhängigkeiten übertragen. Oder gar die ganze Access-DB als würde ich den Import-Assi nutzen, nur halt eben von DELPHI aus. @omata: Das wäre der einfachste Weg, allerdings ist die Access-DB verschlüsselt und mit Passwort geschützt, der Kunde hat u.U. keine Access-Umgebung und soll das Passwort wenn möglich auch nicht bekommen und die administrative Kenntnis (das zeigt die Erfahrung) ist nicht unbedingt immer sehr hoch. Anleitungen in Bild und Text reichen teilweise für einfache Dinge nicht. |
AW: Daten von Access nach MSSQL kopieren
Ok, das macht Sinn.
Was für eine Access-Datei (Version) liegt denn vor? Und soll die Tabellenstruktur auf dem SQL-Server auch wieder passwort-geschützt sein? Oder ist dort dann alles offen? |
AW: Daten von Access nach MSSQL kopieren
Per SQL über AddLinkedServer(Login) und dann Select * into nn from ann
|
AW: Daten von Access nach MSSQL kopieren
@omata: Nein, die Tabellen können da offen sein. Access-Datei ist in Version 2003
@Bummi: Per SQL hört sich an wie auf dem Management-Studio, oder? Ich würde dies lieber direkt vom DELPHI-Programm aus machen wollen... |
AW: Daten von Access nach MSSQL kopieren
Die Idde von Bummi ist doch sehr gut.
Ich würde über dein Delphi-Programm einen Verbindungsserver innerhalb des SQL-Servers einrichten, der die Access-Datei einbindet. Da du deine SQL-Tabellenstruktur kennst, kannst du diese über dein Delphi-Programm auf dem SQL-Server erzeugen und dann die Tabelleninhalte in der richtigen Reihenfolge nacheinander durch INSERT INTO + SELECT-Anweisungen aus dem Verbindungsserver in den SQL-Server kopieren lassen. Zum Schluss wird dann der Verbindungsserver wieder gelöscht.
|
AW: Daten von Access nach MSSQL kopieren
Kennt ihr den ssma for access?
![]() Ist ein Microsoft Programm für das Migrieren. Blog mit zusätzlichen Informationen: ![]() |
AW: Daten von Access nach MSSQL kopieren
@omata: das ist genau das Problem, die Struktur ändert sich zu häufig als dass ich individuell pro Version eine Migration programmieren möchte. Daher sollte es besser ein Import kompletter Tabellen (Struktur und Daten) sein bei dem auch Abhängigkeiten erhalten bleiben. Das ständige Ändern der Datenstrukturen kann ich leider nicht verhindern.
@generic: ssma ist zwar gut, kann ich dem Kunsen aber nicht zumuten. |
AW: Daten von Access nach MSSQL kopieren
@Brinkman
wie sinnvoll min mit einer solchen DB arbeiten kann mußt Du sebst beurteilen, aber Du kannst nach Einbindung des Verbindugsservers per SQL per
Code:
Struktur und Daten übernehmen, freilich ohne AutoID's, Indizes, Trigger und Fremdschlüssel
Select *
into NewTable1 from Verbindungsserver...Tabelle1 da ist dann wieder "Handarbeit" per SQL nötig |
AW: Daten von Access nach MSSQL kopieren
Was verstehst Du unter
Zitat:
Ein Problem hättest Du wenn es in der einen Version nur ein Namensfeld und in einer anderen Familienname und Vorname gäbe. Könntest Du vllt. näher beschreiben welcher Art Dein Problem ist? Gruß K-H Wenn auf den Kundenrechnern kein Access installiert ist, könte ![]() |
AW: Daten von Access nach MSSQL kopieren
Hallo zusammen,
zuerst einmal vielen Dank für die Antworten! @Bummi: Ich muss / will mit Autowerten etc. alles übernehmen. @p80286: Es kommen laufend neue Kundenanforderungen dazu. Um bei Ihrem Beispiel zu bleiben, es gibt nicht nur eine Adresse, sondern der eine möchte cuch einen Skype-Eintrag und der andere einen Facbook-Link. Daher kommt bei vielen Anpassungen für Kunden eine Spalte oder aber auch eine Tabelle dazu. Da es das Programm identisch für SQL und Access gibt, kann theoretisch zu jeder Zeit auch umgeschaltet werden. Manuell habe ich das inzwischen bei einigen Kunden gemacht und läuft auch. Allerdings möchte ich da nicht an spezielle Versionen der Datenstruktur gebunden sein, da die Kunden vermutlich nicht unbedingt ein Update bekommen möchten oder sollen. Aus diesem Grund würde ich gerne die Daten und Strukturen unabhängig von der Datenstruktur übertragen können. @generic: ich habe mir soeben mal SSMA for Access 5.2 angeschaut. Alles momentan ganz prima, aber er meckert nicht an, dass die Access verschlüsselt ist, fragt aber auch nicht nach einem Passwort. Da muss ich mal schauen, wie es da weitergeht. Außerdem wäre es schön, wenn man dieses Tool eventuell sogar als Kommandozeilenprogramm laiufen lassen könnte bzw. eine Konfigurationsdatei übergeben könnte. Geht dies? Beste Grüße Brinkman |
AW: Daten von Access nach MSSQL kopieren
Ein Programm das sich nicht auf dahinterliegende Datenstrukturen verlassen kann ??
Vielleicht solltest Du auf Strukturen wie [Table_link][TableID][Name][Value] für die ständigen Erweiterungen umstellen, also Daten längs statt Quer verwalten. |
AW: Daten von Access nach MSSQL kopieren
Zitat:
Delphi-Quellcode:
// Pseudocode
if not FieldExists('Adressen', 'Skype') then AppendField('Adressen', 'Skype', 'varchar(40)', {Null=}True); if not TableExists('SubContacts') then CreateTable('SubContacts', ['IdSubContact varchar(20) NOT NULL', 'Beschreibung varchar(100)',...]); |
AW: Daten von Access nach MSSQL kopieren
Zitat:
Das Zauberwort heißt ![]() ![]() |
AW: Daten von Access nach MSSQL kopieren
@bummi: natürlich kann sich das Programm auf die Datenstrukturen verlassen. Sind diese nicht aktuell, werden sie angehoben. Sind sie aktueller als das Programm, dann würde es sich um einen Downgrade handeln, der nicht zulässig ist.
@shmia, Sir Rufo: vielen Dank für die Hinweise. Aber die Frage ging in eine andere Richtung. Wenn ich dies so recht sehe, dann gib es so eine Universalmigration wohl nicht und ich muss doch auf ssma zurückgreifen ... Danke trotzdem |
AW: Daten von Access nach MSSQL kopieren
Zitat:
![]() |
AW: Daten von Access nach MSSQL kopieren
Zitat:
Im nächsten Schritt kannst du Tabelle für Tabelle in ihrem Inhalt kopieren. Eine Funktion zu schreiben, die alle Datensätze einer Tabelle in eine strukturgleiche Tabelle in einer anderen DB kopiert ist nicht so schwer.
Delphi-Quellcode:
Beim Kopieren der Tabellen gilt es die Reihenfolge zu beachten, da die Tabellen in einer relationalen Datenbank in bestimmten Abhängigkeiten stehen.
{**************************************************************************
* NAME: CopyDataSetRecord * DESC: Kopiert alle gleichnamigen Felder aus Src nach Dst. * Dst.State muss in [dsEdit,dsInsert] sein, sonst wird ne * Exception geschmissen. * Es findet keinerlei Prüfung auf Datentypen statt! * * Mit TagMask kann das Kopieren von markierten Feldern des Quelldatasets * verhindert werden. *************************************************************************} procedure CopyDataSetRecord(Src,Dst: TDataSet; TagMask:Integer=0); var i: Integer; fSrc,fDst: TField; begin for i := 0 to Src.FieldCount-1 do begin fSrc := Src.Fields[i]; fDst := Dst.FindField(fSrc.FieldName); if Assigned(fDst) and ((fSrc.Tag and TagMask)=0) then begin fDst.Value := fSrc.Value; end; end; end; procedure DeleteAllRecords(ds: TDataSet); begin ds.DisableControls; try ds.First; while not ds.Eof do ds.Delete; finally ds.EnableControls; end; end; procedure CopyDataSet(Src,Dst: TDataSet); begin // zuerst alle Datensätze im Ziel löschen DeleteAllRecords(Dst); Src.First; while not Src.Eof do begin Dst.Append; try CopyDataSetRecord(Src,Dst); Dst.Post; except Dst.Cancel; raise; end; Src.Next; end; end; Man muss zuerst die Mastertabellen (z.B. Kundenstamm) kopieren und erst danach die Detailtabellen (z.B. Bestelldaten, die sich auf den Kundenstamm beziehen). |
AW: Daten von Access nach MSSQL kopieren
Zitat:
|
AW: Daten von Access nach MSSQL kopieren
Hallo omata,
habe gerade mal dein Programm ausprobiert. Funktioniert soweit, nur ein kleiner Fehler: Der Connectionstring aus EdConnection wird nicht an die ADOConnection übergeben. Ansonsten feine Sache. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 Uhr. |
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