Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Tabellenstruktur in eine neue DB kopieren (https://www.delphipraxis.net/79233-tabellenstruktur-eine-neue-db-kopieren.html)

Sir Rufo 18. Okt 2006 18:04

Datenbank: MySQL, MSSQL, Access • Version: div. • Zugriff über: ADO

Tabellenstruktur in eine neue DB kopieren
 
Ich würde gerne das Ergebnis einer Abfrage in einer temp. Access-DB zwischenspeichern.

Jetzt möchte ich aber nicht die ganze Abfrage analysieren und einen entsprechenden CREATE TABLE erzeugen, der die Sprachfeinheiten von Access interpretiert.

Dass muss auch wesentlich einfacher gehen, wenn man sich z.B. den Datenimport/-export vom MSSQL-Server anschaut.
Der verbindet sich so quasi mit jeder DB (Hauptsache die Treiber sind da) und transportiert die Daten.
So schon ausprobiert mit einer IBM-DB2 als Quelle und MySQL als Ziel.

Ich kann mir nicht vorstellen, dass MS da die ganzen Dialekte in das Transport-Programm eingebaut hat (oder doch?) :gruebel:

Wer weiss da was, oder wer hat dafür eine Lösung?

jensw_2000 18. Okt 2006 18:34

Re: Tabellenstruktur in eine neue DB kopieren
 
Schau dir mal die MSSQL Funktion OPENDATASOURCE bzw OPENROWSET an.
Im MSSQL kannst du damit dynamische Datenlinks zu externen Datenbanken (z.B. Access) erstellen.
Einem SELECT INTO steht dann auch nichts mehr im Wege

"richtungsweisendes" und ungetestetes Beispiel:

SQL-Code:
SELECT VORNAME,NAME,IRGENDWAS
FROM dbo.MeineMssqlTable
INTO ( OPENDATASOURCE('OLEDB','Filename=c:\MeineAccessDB.mdb' ).EinNeuerTabellenName
WHERE aktiv = 1

Union 18. Okt 2006 18:46

Re: Tabellenstruktur in eine neue DB kopieren
 
Zitat:

Zitat von jensw_2000
SQL-Code:
SELECT VORNAME,NAME,IRGENDWAS
FROM dbo.MeineMssqlTable
INTO ( OPENDATASOURCE('OLEDB','Filename=c:\MeineAccessDB.mdb' ).EinNeuerTabellenName
WHERE aktiv = 1

IMHO muss das umgedreht werden:
SQL-Code:
SELECT VORNAME,NAME,IRGENDWAS
INTO ( OPENDATASOURCE('OLEDB','Filename=c:\MeineAccessDB.mdb' ).EinNeuerTabellenName
FROM dbo.MeineMssqlTable
WHERE aktiv = 1

Sir Rufo 18. Okt 2006 19:57

Re: Tabellenstruktur in eine neue DB kopieren
 
Ich suche eher etwas wie:

Code:
Private Sub Command1_Click()
  Dim ADOtbl As New ADOX.Table
  Dim strCnn As String

    'Neue Tabelle benennen
    ADOtbl.Name = "tblADOx"

    'Neue Tabelle in DB einfügen
    Cat.Tables.Append ADOtbl
End Sub
Und dann...
Code:
Private Sub Command1_Click()
  Dim ADOCol As New ADOX.Column

    With ADOCol
      'ParentCatolog ist zum Setzen der
      '.Properties notwendig
      Set .ParentCatalog = Cat

      'Name der Spalte übergeben
      .Name = "NeueSpalte"

      'Typ der Spalte übergeben (hier ein Textfeld)
      .Type = adVarWChar

      'Feldgrößendefinitionen sind nur bei
      'Textformat zulässig
      .DefinedSize = 255

      'Standardwert
      If Not IsMissing(Default) Then
        .Properties("Default") = "Text eingeben"
      End If

      'Eine leere Zeichenfolge ist erlaubt
      .Properties("Jet OLEDB:Allow Zero Length") = True

      'Aufsteigende Sortierung
      .SortOrder = adSortAscending
    End With

    'Neue Spalte an Tabelle übergeben
    Cat.Tables("MeineTabelle").Columns.Append ADOCol
End Sub
Das müsste eigentlich das sein, was ich suche, allerdings ist das die falsche Sprache :(
Und das mit dem ADOX als Unit habe ich auch nicht gefunden ...

Wer kann da helfen?

cu

Sir Rufo 18. Okt 2006 21:18

Re: Tabellenstruktur in eine neue DB kopieren
 
:-D

Selber helfen geht ja auch ...

Create an Access database with ADOX

Das ist des Rätsels Lösung (wenigstens für Access). Ich werde das mal umsetzen und auch mit anderen Datenbanken ausprobieren.
Die Erfahrungen werde ich dann hier mal niederschreiben.

thanx

Oliver

jensw_2000 19. Okt 2006 09:53

Re: Tabellenstruktur in eine neue DB kopieren
 
Auch wenn es nicht ganz das ist, was du suchst ...

Ich möchte den Opendatasource Aufruf hier nicht falsch stehen lassen ..

SQL-Code:
SELECT * FROM
OPENDATASOURCE( 'Microsoft.Jet.OLEDB.4.0',
                'Data Source="c:\meineAccessDB.mdb"')...eineAccessTabelle
-- die drei Punkte vor dem Tabellennamen sind wichtig !
Leider funktioniert das mit dem
SQL-Code:
SELECT *
INTO
OPENDATASOURCE .....
FROM
....
nicht so einfach wie erwartet. Daran muss ich noch feilen ...


Schöne Grüße,
Jens
:hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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