Announcement

Collapse
No announcement yet.

ACCESS alias zur Laufzeit einrichten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ACCESS alias zur Laufzeit einrichten

    Wie muß die TDatabase Komponente eingerichtet werden, um auf ein ACCESS-Datenbankfile zugreifen zu können? Und welche Parameter sind für die Übergabe wichtig?
    Gruß
    Ralf

  • #2
    Hallo,

    die Vorgehensweise demonstriert das folgende Beispiel:
    <pre>
    { ************************************************** **************
    Source File Name : AccessOpenFrm.PAS
    Autor : Andreas Kosch
    Erstellt am : 14.12.1998
    Compiler : Delphi 4.01 UpdatePack #1
    Betriebssystem : Windows 95
    Revisionen : ACCESS-Datenbank-Explorer
    ************************************************** ************** }

    unit AccessOpenFrm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    Buttons, StdCtrls, ComCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db,
    DBTables, Menus;

    type
    TFormMain = class(TForm)
    StatBar: TStatusBar;
    OpenDialogMDB: TOpenDialog;
    TableACCESS: TTable;
    DataSourceACCESS: TDataSource;
    DBGridACCESS: TDBGrid;
    DBNavigator1: TDBNavigator;
    DatabaseACCESS: TDatabase;
    Panel1: TPanel;
    Label1: TLabel;
    EditMDB: TEdit;
    SBtnOpen: TSpeedButton;
    Label2: TLabel;
    ComboBoxTable: TComboBox;
    Label3: TLabel;
    MainMenu1: TMainMenu;
    MD: TMenuItem;
    MDClose: TMenuItem;
    MH: TMenuItem;
    MHAbout: TMenuItem;
    procedure SBtnOpenClick(Sender: TObject);
    procedure ComboBoxTableClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure MDCloseClick(Sender: TObject);
    procedure MHAboutClick(Sender: TObject);
    private
    { Private-Deklarationen}
    procedure OpenMDB(sMDBName : String);
    procedure OpenTable(sTableName: String);
    public
    { Public-Deklarationen}
    end;

    var
    FormMain: TFormMain;

    implementation

    {$R *.DFM}

    procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    TableACCESS.Active := False;
    DatabaseACCESS.Connected := False;
    end;

    procedure TFormMain.MDCloseClick(Sender: TObject);
    begin
    Close;
    end;

    procedure TFormMain.MHAboutClick(Sender: TObject);
    begin
    MessageDlg('ACCESS-Datenbank-Explorer' + #13#13+
    'Version 1.0' + #13 +
    '© Andreas Kosch 1998',
    mtInformation, [mbOK], 0);
    end;

    procedure TFormMain.SBtnOpenClick(Sender: TObject);
    begin
    with OpenDialogMDB do
    if Execute then
    begin
    EditMDB.Text := FileName;
    OpenMDB(FileName);
    end;
    end;

    procedure TFormMain.ComboBoxTableClick(Sender: TObject);
    var
    sTableName : String;
    begin
    with ComboBoxTable do
    sTableName := Items[ItemIndex];
    if Length(sTableName) = 0 then
    raise Exception.Create('Kein Tabellenname definiert');
    OpenTable(sTableName);
    end;

    {------------------------------------------------------------}
    { Private Methoden }
    {------------------------------------------------------------}

    procedure TFormMain.OpenMDB(sMDBName : String);
    var
    aTableList : TStringList;
    begin
    Screen.Cursor := crSQLWait;
    try
    TableACCESS.Active := False;
    DatabaseACCESS.Connected := False;
    ComboBoxTable.Items.Clear;
    ComboBoxTable.Enabled := False;
    StatBar.Panels[0].Text := '';
    StatBar.Panels[1].Text := 'MDB-Datei wird geöffnet....';
    DBGridACCESS.Visible := False;
    Application.ProcessMessages;
    with DatabaseACCESS.Params do
    begin
    Clear;
    Add('DATABASE NAME=' + sMDBName);
    Add('OPEN MODE=READ/WRITE');
    Add('LANGDRIVER=BLLT1DE0');
    Add('USER NAME=');
    Add('PASSWORD=');
    end;
    DatabaseACCESS.Connected := True;
    StatBar.Panels[1].Text := 'Tabellen aus MDB-Datei auslesen...';
    Application.ProcessMessages;
    // Tabellen aus der ACCESS-Datenbank auslesen + Combobox füllen
    aTableList := TStringList.Create;
    try
    Session.GetTableNames(DatabaseACCESS.DatabaseName, '',False, False, aTableList);
    ComboBoxTable.Items := aTableList;
    finally
    aTableList.Free;
    end;
    ComboBoxTable.Enabled := True;
    StatBar.Panels[1].Text := 'Eine Tabelle kann nun ausgewählt werden.';
    DBGridACCESS.Visible := True;
    finally
    Screen.Cursor := crDefault;
    end;
    end;

    procedure TFormMain.OpenTable(sTableName: String);
    begin
    DBGridACCESS.Visible := False;
    Screen.Cursor := crSQLWait;
    try
    StatBar.Panels[1].Text := 'Ausgewählte Tabelle wird geöffnet...';
    Application.ProcessMessages;
    with TableACCESS do
    begin
    Active := False;
    TableName := sTableName;
    Active := True;
    StatBar.Panels[0].Text := Format('%d Datensätze', [RecordCount]);
    end;
    StatBar.Panels[1].Text := '';
    DBGridACCESS.Visible := True;
    finally
    Screen.Cursor := crDefault;
    end;
    end;

    end.
    </pre>
    Im Konfigurationsdialog für TDatabase wird nur der Eintrag <b>MSACCESS</b> für die Eigenschaft <b>DriverName</b> zusätzlich ausgewählt. Alles andere macht das Programm zu Laufzeit über die Params-Eigenschaft von TDatabase

    Comment


    • #3
      Hallo Herr Kosch,<p>
      ich muß mit einem Delphi-Programm für Kundenauswertungen auf eine <b> passwortgeschützte MS-ACCESS-Datenbank </b> lesend zugreifen, bei dem mir natürlich weder der Benutzername noch das Paßwort bekannt ist. <br>Gibt es ein Trick oder ein Tool um dieses Problem zu lösen ?

      Falls die Antwort zu heikel ist, vielleicht per eMail an:<br>
      [email protected]

      Comment


      • #4
        Hallo,

        ja - denn TDatabase bietet im Objektinspektor die Eigenschaft <b>LoginPrompt</b> an, so dass man sich den Standard-Login-Dialog anzeigen und dann ggf. die Parameter vor dem Aktivieren der Verbindung anpassen kann

        Comment

        Working...
        X