Autor Beitrag
AndreasL.
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 09.05.05 14:09 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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. Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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. Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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:

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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. Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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:
ausblenden 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:

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


Grüsse
Andreas
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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.