Einzelnen Beitrag anzeigen

Ferber

Registriert seit: 9. Mär 2005
Ort: Wien Umgebung
155 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Übernehmen der Indizes von Access auf MS-SQL Server mögl

  Alt 13. Feb 2006, 13:13
Hi !

Auf die schnelle: Ein Minitool zum Auslesen der Tabellen und Indizes einer ADOConnection.

Das Formular enthält: Eine AdoConnection, 2 Memos, 1 Button.
Nach ButtonKlick enthält Memo1 die Tabellen der ADOConn, Memo2 den Rohentwurf für das SQLScript.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Db, ADODB, AdoConED;

type
  TForm1 = class(TForm)
    ADOConn: TADOConnection;
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function StrRepl(st, s1, s2:String):String;
var p,l:Integer;
begin
  l:=Length(s1);
  p:=pos(s1,st);
  while p>0 do
    begin
      st:=Copy(st,1,p-1)+s2+Copy(st,p+l,255);
      p:=pos(s1,st);
    end;
  Result:=st;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer; TA:TAdoTable;
begin
  Memo1.Lines.Clear;
  Memo2.Lines.Clear;
  ADOConn.Connected:=False;
  EditConnectionString(AdoConn);
  ADOConn.Connected:=True;
  ADOConn.GetTableNames(Memo1.Lines);
  for i:=0 to Memo1.Lines.Count-1 do
    begin
      TA:=TAdoTable.Create(nil);
      TA.Connection:=ADOConn;
      TA.TableName:=Memo1.Lines[i];
      TA.IndexDefs.Update;
      for j:=0 to TA.IndexDefs.Count-1 do
        begin
          Memo2.Lines.Add('CREATE INDEX "'+
                          TA.IndexDefs.Items[j].Name+'" ON "dbo"."'+
                          TA.TableName+'" ("'+
                  StrRepl(TA.IndexDefs.Items[j].Fields,';','","')+'")');
        end;
      FreeAndNil(TA);
    end;
end;

end.
Das ganze über das ClipBoard transferieren und weiterbearbeiten.
Hoffe das hilft überflüssige Tipparbeit zu vermeiden.
Otto
  Mit Zitat antworten Zitat