Autor Beitrag
Sommerkind
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 05.09.18 10:11 
Hallo Leute,

vielleicht könte mir jemand mit dem folgenden Problem helfen.
Ich habe zwei MS Access DatenBanken (Access 2000-Dateiformat), eine alte und eine neue. Ich möchte aus der neue die fehlende Felder auslesen und in die alte DB einfügen. Dafür mache ich eine Schleife durch die Felder, prüfe, welche es nicht gibt, lese ihre Namen, Datentyp UND DEFAULTWERT aus usw.
Das alles funktioniert prima, nur das die DefaultExpression komischerweise immer leer bleibt... als ob da nichts steht, aber da stehen die Werte.
Hier ein Stück Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
                SQLdatentype := FieldTypeToSQLType(Data.DB.FieldTypeNames[RefQuery.Fields[x].DataType]);
                if SQLdatentype <> '' then
                begin
                  SQLText := 'ALTER TABLE alteTabelle ADD '+ RefQuery.Fields[x].FieldName + ' ' + SQLdatentype;
                  if SQLdatentype = 'VARCHAR' then
                     SQLText := SQLText + '(' + RefQuery.Fields[x].Size.ToString + ')';
                  if RefQuery.Fields[x].DefaultExpression <> '' then                                   // immer leer   :(
                     SQLText := SQLText + ' DEFAULT ' + RefQuery.Fields[x].DefaultExpression;

Der Weg mit DBQuery.Fields.Add(NewField) habe ich auch schon versucht, er spuckt keine Fehler, aber die DB bekommt keine neue Felder.
Etwas stimmt nicht, ich bin leider nicht so erfahren, um zu verstehen, was genau.
Ich verwende Delphi XE7, falls es wichtig ist.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Sommerkind Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 26.09.18 09:25 
Falls jemand das gleiche Problem hat, hier ist meine Lösung:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
DS: TADODataSet;
Field1, Field2: TField;

DS := TADODataSet.Create(nil);
DS.Connection := MeineConnection;
MeineConnection.OpenSchema(siColumns, VarArrayOf([NULL, NULL, MeineTabelle]), EmptyParam, DS);
Field1 := DS.FindField('COLUMN_NAME');
Field2 := DS.FindField('COLUMN_DEFAULT');
SQLText := 'ALTER TABLE ' + MeineTabelle + ' ALTER COLUMN ' + Field1.AsString + ' SET DEFAULT ' + Field2.AsString;    
MeineQuery.SQL.Text := SQLText;
MeineQuery.ExecSQL();


Viele Grüße

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt