Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten von Access nach MSSQL kopieren (https://www.delphipraxis.net/169274-daten-von-access-nach-mssql-kopieren.html)

Bummi 9. Jul 2012 10:51

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:
Select * 
into NewTable1
from Verbindungsserver...Tabelle1
Struktur und Daten übernehmen, freilich ohne AutoID's, Indizes, Trigger und Fremdschlüssel
da ist dann wieder "Handarbeit" per SQL nötig

p80286 9. Jul 2012 13:48

AW: Daten von Access nach MSSQL kopieren
 
Was verstehst Du unter
Zitat:

Zitat von Brinkman (Beitrag 1174053)
die Struktur ändert sich zu häufig als dass ich individuell pro Version eine Migration programmieren möchte.

Wenn Du z.B. eine Adressdatenbank hast und Deine Versionen würden eine, zwei oder keine Zweitadresse unterstützen, dann wäre es ja ein einfaches dere neuen DB die Möglichkeit für mehrere Zweitadressen zu implementieren.
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 das vielleicht weiter helfen.

Brinkman 9. Jul 2012 16:59

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

Bummi 9. Jul 2012 17:07

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.

shmia 9. Jul 2012 17:27

AW: Daten von Access nach MSSQL kopieren
 
Zitat:

Zitat von Brinkman (Beitrag 1174112)
Es kommen laufend neue Kundenanforderungen dazu. ... Daher kommt bei vielen Anpassungen für Kunden eine Spalte oder aber auch eine Tabelle dazu.

Du brauchst ein Programm oder Script, dass eine ältere Datenbank immer auf die aktuelle Datenbankstruktur updatet!
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)',...]);

Sir Rufo 9. Jul 2012 20:56

AW: Daten von Access nach MSSQL kopieren
 
Zitat:

Zitat von Bummi (Beitrag 1174113)
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.

:thumb: genau das Bild hatte ich beim Lesen auch im Kopf :)
Das Zauberwort heißt Bei Google suchenEntity Attribute Value

http://www.informave.org/database-ha...esign_eav.html

Brinkman 10. Jul 2012 08:09

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

omata 11. Jul 2012 04:17

AW: Daten von Access nach MSSQL kopieren
 
Zitat:

Zitat von Brinkman (Beitrag 1174148)
Wenn ich dies so recht sehe, dann gib es so eine Universalmigration wohl nicht und ich muss doch auf ssma zurückgreifen ...

Ich habe mich mal dran versucht... klick

sx2008 11. Jul 2012 05:05

AW: Daten von Access nach MSSQL kopieren
 
Zitat:

Zitat von Brinkman (Beitrag 1174148)
@shmia, Sir Rufo: vielen Dank für die Hinweise. Aber die Frage ging in eine andere Richtung.

Wenn du 2 Datenbanken hast und alles von A nach B kopieren möchtest, ist es am Einfachsten die Datenbanken zuerst einmal in ihrer Struktur anzugleichen.
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:
{**************************************************************************
 * 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;
Beim Kopieren der Tabellen gilt es die Reihenfolge zu beachten, da die Tabellen in einer relationalen Datenbank in bestimmten Abhängigkeiten stehen.
Man muss zuerst die Mastertabellen (z.B. Kundenstamm) kopieren und erst danach die Detailtabellen (z.B. Bestelldaten, die sich auf den Kundenstamm beziehen).

omata 22. Jul 2012 00:50

AW: Daten von Access nach MSSQL kopieren
 
Zitat:

Zitat von omata (Beitrag 1174261)
Zitat:

Zitat von Brinkman (Beitrag 1174148)
Wenn ich dies so recht sehe, dann gib es so eine Universalmigration wohl nicht und ich muss doch auf ssma zurückgreifen ...

Ich habe mich mal dran versucht... klick

@Brinkman: Schade, das von dir keine Reaktionen mehr kommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 Uhr.
Seite 2 von 3     12 3      

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 by Thomas Breitkreuz