Puhh ....
ich hab in der Zwischenzeit a bisserl rumgespielt und folgendes geschrieben
ich starte bei einem OnClick in meinem Servicebereich:
erstelle_felder('V_ENTSCH', 'EINTRAG', 200);
erstelle_felder('ANTEILE', 'EINTRAG', 300);
erstelle_felder('V_OVERVIEW', 'HTML_TEXT', 2000);
Delphi-Quellcode:
procedure TS_ADMIN.erstelle_felder(tabellenname, feldname: String; laenge: Integer);
var
asql: String;
begin
// ---------------- 1.)
try
begin
q1.SQL.Clear;
q1.SQL.Append('SELECT "ZW_' + feldname + '" FROM ' + tabellenname + '');
q1.Open;
// ---------------- 2.)
q1.SQL.Clear;
q1.SQL.Append('SELECT * FROM ' + tabellenname + '');
q1.Open;
while not q1.eof do
begin
q1.edit;
q1.FieldByName('ZW_' + feldname + '').AsVariant := q1.FieldByName(feldname).AsVariant;
q1.post;
q1.next;
end;
// ---------------- 3.)
asql := 'ALTER TABLE "' + tabellenname + '" DROP "' + feldname + '" ';
UniMainModule.ZConnection1.ExecuteDirect(asql);
// ---------------- 4.)
asql := 'ALTER TABLE "' + tabellenname + '" ALTER COLUMN "ZW_' + feldname + '" TO "' + feldname + '" ';
UniMainModule.ZConnection1.ExecuteDirect(asql);
mainform.showmessageA('Schritt 2: Die Feldwerte wurden kopiert - Zwischenspeicherfelder gelöscht - Feldnamen Wiederhergestellt - FERTIG !');
end;
except
begin
asql := 'ALTER TABLE "' + tabellenname + '" add "ZW_' + feldname + '" CHAR(' + inttostr(laenge) + ') CHARACTER SET UTF8 ';
UniMainModule.ZConnection1.ExecuteDirect(asql);
mainform.showmessageA('Schritt 1: Die Zwischenspeicherfelder wurden erstellt - Starten sie NOCHMAL die Funktion');
end;
end;
end;
Code:
Wenn ich folgendes HÄTTE :-) wäre es cool:
Schleife A
Gehe alle Tabellen einer Datenbank durch
Schleife B
Gehe alle Felder einer Tabelle durch
IF Feld ist "CHARACTER SET ISO8859_1 COLLATE DE_DE" ODER "CHARACTER SET ISO8859_1" then
begin
x = Laenge vom Feld
erstelle_felder(aktueller Tabellenname, aktuelles Tabellenfeld, x);
end
end
end
Erich Wanker - for life:=1971 to lebensende do begin ..
O
/H\
/ \