Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Feld an den Anfang einer Tabelle hinzufügen (https://www.delphipraxis.net/6158-feld-den-anfang-einer-tabelle-hinzufuegen.html)

r_kerber 3. Jul 2003 12:24

Dann fällt mir nur ein, dies in der Datenbank Oberfläche zu ttun, die bei Delphi mit ausgeliefert wird. Oder eben Paradox in die Tonne treten. :mrgreen:

DBman 3. Jul 2003 13:13

Nein ich will das ja nicht in der Datenbankoberfläche machen das soll ja automatisiert werden und Paradox trete ich auch nich in die Tonne....
Habe mir dazu folgendes überlegt:

Ich könnte eine neue Tabelle erzeugen mit der 1.Spalte "Zaehler" , Typ AutoInc.

Dann füge ich den Inhalt von Table1 dieser neuen Table2 hinzu , so dass ich eine neue Tabelle habe mit der 1. Spalte Zaehler.

Delphi-Quellcode:
begin
 with Table2 do
 begin
 Active := false;

 DatabaseName := 'STM';
 TableType := ttParadox;
 TableName := 'mitZaehler';

  { Dann die Felder in der Tabelle beschreiben }
  with FieldDefs do begin
    Clear;
      with AddFieldDef do begin
        Name := 'Zaehler';
        DataType := ftAutoInc;     //Erzeugen eines Zählerfeldes
        Required := True;
       end;
  end;
   CreateTable;

 end;
table2.AddIndex('','Zaehler',[ixPrimary]);
table1.open;
table2.open;
 Batchmove.Mode:=batAppend;
 Batchmove.Execute;          ///<-- Hier tritt der Fehler auf
table1.close;
table2.close;
..Allerdings tritt dabei der Fehler bei Batchmove.Execute auf:
Übersetzungsfehler , Wert liegt nicht im gültigen Bereich...

Ich könnte mir nur vorstellen , dass rumgemeckert wird , weil die Zaehlerspalte ja quasi leer ist( obwohl AutoInc füllt sich doch dann eigentlich automatisch oder?)

Hm vielleicht weiss ja jemand weshalb der Fehler da kommt.. :bounce2:

JoelH 4. Jul 2003 14:26

hmm,
 
was ich jetzt noch immer nicht verstehe, wenn du doch von dbf => Paradox gehst dann ist es doch wurscht wie die Felder in der Paradox angeordnet sind, denn du kannst sie ja beschreiben wie du willst in dem du sie beim INSERT via Name ansprichst !? Oder überseh ich grad was, ausser dass du SQL nicht verwenden willst ?

DBman 5. Jul 2003 18:47

wie denn beim insert?

Also meine Tabelle sieht so aus :
NAME TEL ORT

und ich will dass sie so aussieht :

ZAEHLER NAME TEL ORT


Wenn du mir den Delphibefehl dazu sagen kannst um das zu bewerkstelligen bin ich glücklich :mrgreen:

Das muss aber im Code passieren , ich will das nicht mit der Datenbankoberfläche manuell machen.

JoelH 5. Jul 2003 20:11

hmm,
 
also bei einem SQL Statement ist es doch wurscht ob du machst

INSERT INTO tabelle (xyz, abc, edk, kzw) VALUES (1,2,3,4)

oder

INSERT INTO tabelle (kzw, xyz, abc, edk ) VALUES (4,1,2,3)

MrSpock 5. Jul 2003 21:58

Hallo DBman,

dein Code ist gut. Du musst nur noch bei der BatchMove Komponente den MappingsArray füllen. Dort legst du fest, welche Spalten der neuen Tabelle zu welcher Spalte der alten Tabelle zugeordnet wird. Mappings kannst du entweder zur Designtime oder zur Laufzeit setzen. Wenn du es zur Laufzeit füllst, kannst du es einfach über eine Schleife erreichen, die über die Feldnamen läuft.

DBman 7. Jul 2003 15:59

Re: Feld an den Anfang einer Tabelle hinzufügen
 
Hm.. so ganz hab ich das noch nicht verstanden wie ich das mit dem Mappings-Array machen soll.
Da kann man ja eintragen welche Spalte welcher Spalte in der neuen Tabelle entsprechen soll.Aber was bringt mir das da jetzt?

Also konkret:
Tabelle1 : Ich habe ja die tabelle NAME ORT PLZ vorliegen.
Tabelle2 : und möchte dass der 2. Tabelle ZAEHLER , die erste tabelle hinten dran gehängt wird , so dass dann die tabelle lautet :

ZAEHLER NAME ORT PLZ

Aber was hab ich dann von dem Mappings Array? Mit dem Code den ich da gepostet hatte gabs jedenfalls Fehler..
Hm.
:roll:
Über Antworten wäre ich wie immer sehr dankbar

MrSpock 7. Jul 2003 16:25

Re: Feld an den Anfang einer Tabelle hinzufügen
 
Hallo DBman,

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   i   : Integer;
   fldName : String;
begin
   Table1.Open;
   BatchMove1.Mappings.Clear;
   for i := 0 to Table1.FieldCount -1 do
   begin
      fldName := Table1.Fields[i].FieldName;
      BatchMove1.Mappings.Add(fldName +'=' +fldName);
   end;
   Table1.Close;
end;
Mit dem oben gezeigten Code füllst du den Mappingsarray. Das erste Feld (Zähler) erhält keine Daten aus der alten Tabelle, sondern wird automatisch gefüllt.

DBman 9. Jul 2003 14:13

Re: Feld an den Anfang einer Tabelle hinzufügen
 
Hallo Mr.Spock,
mit deinem Code habe ich aber auch noch Probleme:

Ich erhalte den Fehler , dass die Felder gar nicht vorhanden sind.
(also jetzt NAME , ORT ..usw...).

Aber die existieren in der anderen Tabelle ja auch noch gar nich die Felder...

wie mache ich das denn jetz nu?
:freak:
:coder:

r_kerber 9. Jul 2003 14:29

Re: Feld an den Anfang einer Tabelle hinzufügen
 
z.B. wie im Code-Beispiel zu TTable.CreateTable in der OH!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr.
Seite 2 von 4     12 34      

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