Entwickler-Ecke

Datenbanken - MS-SQL Tabelle exportieren in Paradox Tabelle


AndreasL. - Mo 09.05.05 14:09
Titel: MS-SQL Tabelle exportieren in Paradox Tabelle
Hallo Leute,

Bin neu hier, habe aber die Suchfunktion trotzdem schon 2 Stunden gequält, folgendes Problem:
Ich möchte eine MS-SQL Tabelle, nennen wir sie "Artikel" mit samt Inhalt in eine Paradox Tabelle exportieren/duplizieren. Die Paradox Tabelle existiert dabei noch nicht und soll vor dem exportieren erstellt werden, nach den Spezifikationen der MS-SQL Tabelle.
Zuerst dachte ich, okay, BatchMove, das funktioniert jedoch nur mit TTable Objekte, da ich über ADO mit dem MS-SQL Server verbunden bin, geht dies schon mal nicht.

Hat jemand eine Idee wie ich das lösen könnte?

Viele Grüsse
Andreas


jasocul - Mo 09.05.05 14:36

Von MS-SQL nach Paradox? Naja, musst du selbst wissen.

Wenn du TBatchMove nicht verwenden kannst, musst du wohl oder übel die Paradox-Tabelle einmal erzeugen und alle Datensätze druchlaufen und übertragen.
Ich hoffe, dass du keine AutInc-Felder benutzt, die auch noch referenzieren. Da würdest du dann sicher Probleme bekommen.


AndreasL. - Mo 09.05.05 14:44

Also AutoInc Felder sind nur in der MS-SQL Tabelle vorhanden. Ich muss vielleicht ein wenig weiter ausholen:

Wir haben die Paradox Tabellen in MS-SQL migriert (funzte TipTop), da aber unser altes bzw. eingekauftes Produkt "leider" Paradox Files importiert, müssen wir die MS-SQL Tabelle als Paradox Tabelle exportieren können, deshalb der unschöne Export als Paradox :wink:

Werde nun wohl oder übel eine "Default"-Paradox Tabelle erstellen, welche bei jedem Export zuerst geleert wird und dann wieder "gefüllt" wird mit den MS-SQL Datensätzen.....

Grüsse
Andreas


jasocul - Mo 09.05.05 15:06

Du kannst die Paradox-Tabelle auch zur Laufzeit erzeugen. Mit SQL über "Create Table". Es geht iirc auch mit der TTable-Komponente. Das ist aber schon ein paar Jahre her, dass ich das mal probiert habe.
Eventuell habe ich irgendwo noch Sourcen. Aber mit SQL sollte es auc funktionieren.


AndreasL. - Di 10.05.05 09:50

Also, ich bin nun etwas weiter, aber immer noch nicht am Ziel :)

Ich erstelle nun die Paradox tabelle folgenderweise:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
procedure TFormExport.p_CopyTableStructure(Source: TADODataSet; DB,Dest: string);
var NewTable: TTable;
          hs: string;
           i: integer;
begin
  NewTable := TTable.Create(self);
  with NewTable do
  begin
    Databasename := DB;
    Tablename := Dest;
    FieldDefs.Assign(Source.FieldDefs);
    IndexDefs.Assign(Source.IndexDefs);
    CreateTable;
  end;

  if Dest = 'Artikel.DB' then
    NewTable.FieldDefs.Find('ARTI_ID').DataType := ftInteger;

  NewTable.Open;
  Source.First;
  with NewTable do
  begin
    while not Source.EOF do
    begin
      Append;
      for i := 0 to Source.FieldCount - 1 do
      begin
        hs := Source.Fields[i].FieldName;
        NewTable[hs] := Source[hs];
      end;
      Source.Next;
    end;
  end;

  if Dest = 'Artikel.DB' then
    NewTable.FieldDefs.Find('ARTI_ID').DataType := ftAutoInc;

  NewTable.Close;
  NewTable.Destroy;

end;


Nun folgende Probleme:
- Das Autoinkrement Feld kann ich aus irgendwelchen gründen auf der "NewTable" nicht ändern, selbst im Datenbank Explorer nach dem erstellen nicht?!?!?
- nvarchar 15 bzw. nvarchar 50 Felder der MS-SQL Tabelle werden in der Paradox Tabelle als ALPHA 1 erstellt?!?!?

Danke schon mal für eure Hilfe

Grüsse
Andreas


jasocul - Di 10.05.05 09:56

Feldtypen sind in Paradox halt andere. Da musst du wohl per Hand definieren.
Auf das Problem mit dem AutoInc hatte ich schon hingewiesen. AutoInc-Feldern kannst du in Paradox nichts zuweisen!
Entweder darf es kein AutoInc sein oder du darfst diesem Feld nichts zuweisen. Es wird "auto"matisch gefüllt.


AndreasL. - Di 10.05.05 10:00

Das ist mir schon klar, dass ich AutoInc feldern nichts zuweisen kann darum möchte ich auch den FeldTyp ändern, aber auch dies scheint nciht möglich zu sein:

Delphi-Quelltext
1:
2:
if Dest = 'Artikel.DB' then
    NewTable.FieldDefs.Find('ARTI_ID').DataType := ftInteger;


und nach dem Daten importieren setzte ich das Feld wieder auf den Typ AutoInc:


Delphi-Quelltext
1:
2:
if Dest = 'Artikel.DB' then
    NewTable.FieldDefs.Find('ARTI_ID').DataType := ftAutoInc;


Grüsse
Andreas


jasocul - Di 10.05.05 10:03

Das habe ich so noch nie versucht.
Ich vermute aber, dass das aus Paradox-Verwaltungstechnischen Gründen nicht möglich ist. Der Zählwert muss irgendwo verwaltet werden und da wird Paradox sagen, dass das Ändern in ftAutoInc mit einer gefüllten Tabelle nicht zulässig ist.