Einzelnen Beitrag anzeigen

Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#4

AW: Ändern von Character Set und Collate

  Alt 22. Apr 2021, 15:32
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\
/ \

Geändert von erich.wanker (22. Apr 2021 um 16:57 Uhr)
  Mit Zitat antworten Zitat