Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Übernehmen der Indizes von Access auf MS-SQL Server möglich? (https://www.delphipraxis.net/63042-uebernehmen-der-indizes-von-access-auf-ms-sql-server-moeglich.html)

localizer 13. Feb 2006 10:22

Datenbank: Access • Version: 2000 • Zugriff über: ADO

Übernehmen der Indizes von Access auf MS-SQL Server möglich?
 
Liebe Forumsgemeinde,

ich habe alle Access Tables auf MS-SQL Expressserver übernommen und möchte mir ersparen die Indizes jeder einzelnen Tabelle neu zu definieren.

Gibt es da eine einfachere Möglichkeit?

Danke.

Ferber 13. Feb 2006 12:13

Re: Übernehmen der Indizes von Access auf MS-SQL Server mögl
 
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. :coder2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 Uhr.

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-2025 by Thomas Breitkreuz