Announcement

Collapse
No announcement yet.

InterBase Tabelle mit ADO zur Laufzeit anlegen

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

  • InterBase Tabelle mit ADO zur Laufzeit anlegen

    Hi,
    Wie kann ich am besten eine InterBase Tabelle mit ADO zur Laufzeit anlegen. Ich verwende die ADOExpress Komponenten und Delphi 5 Prof. Die Datenbank hab ich schon hinbekommen. Wenn ich nun über ADOQuery eine Tabelle erstellen will erhalte ich immer die Fehlermeldung "SQL Properties missing".
    Ich habs so versucht:
    with ADOQuery1 do
    begin
    try
    ConnectionString := 'Provider=SIBPROVI.SIBProvider;'
    + 'Password=' + EditPassword.Text + ';'
    + 'User ID=' + EditUserName.Text + ';'
    + 'Data Source='
    + EditDBPAth.Text + '.gdb;'
    + 'Location=' + verz + ';'
    + 'Extended Properties="";'
    + 'Connect Timeout=0;'
    + 'Persist Encrypted=True;'
    + 'Encrypt Password=True;'
    + 'Mask Password=True;'
    + 'Cache Authentication=True;'
    + 'Persist Security Info=True;'
    + 'CHARACTER SET=ISO8859_1;'
    + 'ROLE=""';
    // Verbindung zur neuen Datenbank herstellen
    active := true;
    // TQuery-Instanz erstellt die neue Tabelle
    with SQL do
    begin
    Clear;
    Add('CREATE TABLE testtable ');
    Add('(KundenID INTEGER NOT NULL UNIQUE,');
    Add('Vorname CHAR(15), Nachname CHAR(30) NOT NULL');
    execSQL
    end;

    ich wäre froh, wenn mir jemand da ganz schnell helfen könnte.

    Gruß Elke

  • #2
    Hallo,

    eine CREATE TABLE-Anweisung würde ich <b>nicht</b> über TADOQuery, sondern direkt über <b>TADOConnection</b> abschicken. Ich kann mit dem SIBProvider eine neue Tabelle in der InterBase 6-Datenbank anlegen:
    <pre>
    procedure TForm1.Button1Click(Sender: TObject);
    const
    cSQL = 'CREATE TABLE ADOTest2(ID INTEGER NOT NULL PRIMARY KEY, Wert VARCHAR(10))';
    begin
    ADOConnection1.Connected := True;
    ADOConnection1.Execute(cSQL);
    end;
    </pre>
    DFM:
    <pre>
    object Form1: TForm1
    Left = 325
    Top = 148
    Width = 696
    Height = 480
    Caption = 'Form1'
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    OldCreateOrder = False
    PixelsPerInch = 96
    TextHeight = 13
    object Button1: TButton
    Left = 80
    Top = 16
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
    end
    object ADOConnection1: TADOConnection
    ConnectionString =
    'Provider=sibprovi.SIBProvider;Password=masterkey; User ID=SYSDBA;' +
    'Data Source=C:\Database\TEST6D3.GDB;Location=localhost: ;Extended' +
    ' Properties="";Persist Encrypted=True;Encrypt Password=True;Mask' +
    ' Password=True;Cache Authentication=True;Persist Security Info=T' +
    'rue;CHARACTER SET="";ROLE=""'
    LoginPrompt = False
    Provider = 'sibprovi.SIBProvider'
    Left = 40
    Top = 16
    end
    end
    </pre&gt

    Comment


    • #3
      Hi Andreas,
      Danke für Deine Hilfe. Die Tabelle anlegen funktioniert schon mal. Nun will ich die Tabelle auch noch mit Testdaten füllen. Verwende ich dafür ebenfalls ADOConnection oder besser ein anderes Tool.
      Wäre es möglich, dass Du (oder wer immer gerade Zeit hat) mir kurz erläuterst, welches Tool für welche Anwendung am besten geeignet ist ? Das würde mir sehr weiter helfen. Danke schon mal

      Gruß Elk

      Comment


      • #4
        Hallo,

        die Antwort auf diese Frage hängt davon ab, welcher Weg für das Einfügen von Testdaten verwendet wird. Es gibt mehrere Alternativen: <br>
        a) Stored Procedure: <b>TADOStoredProc</b> <br>
        b) Parametisierte INSERT-Anweisung: <b>TADOCommand</b> <br>
        c) Parameterlose INSERT-Anweisung: <b>TADOConnection</b>

        Der Web b) ist der Übliche, ein Beispiel könnte so aussehen:
        <pre>
        INSERT INTO Tabelle (ID, eMail) VALUES (:ID,:eMail)
        </pre>
        <pre>
        ...
        var
        iLoop : Integer;
        begin
        with ADOCommandSQL do
        begin
        Prepared := True;
        ADOConnection1.BeginTrans;
        for iLoop := 1 to 100 do
        begin
        Inc(FCount);
        Parameters[0].Value := FCount;
        Parameters[1].Value := 'Testeintrag';
        Execute;
        end;
        ADOConnection1.CommitTrans;
        Prepared := False;
        end;
        end;
        </pre>
        &#10

        Comment


        • #5
          Hallo Andreas,
          vielen Dank. Aber wofür braucht man denn noch die Query oder Table Komponenten, wenn man ja mit Connection oder Command schon fast alles machen kann ?

          Gruß Elk

          Comment


          • #6
            Hallo,

            hinter TADOTable und TADOQuery verbergen sich nur Kompatibilitäts-Komponenten</b>, die man in neuen Projekten <b>nicht</b> verwenden sollte. Diese Dinger sind nur hilfreich, wenn ein "altes" BDE-Projekt auf ADO umgestellt werden soll und haben dann auch nur am Anfang ihre Daseinsberechtigungen. Immer dann, wenn man wie gewohnt zu TADOTable/TADOQuery greifen will, ist <b>TADODataSet</b> die richtige Alternative, es sei denn, es gibt für eine bestimmte Aufgabe noch bessere Alternativen (TADOCommand und TADOConnection).
            &#10

            Comment


            • #7
              Danke, jetzt wird mir einiges klarer. Gibt es in absehbarer Zeit ein Buch von Dir über das Thema ?

              Elk

              Comment


              • #8
                Hallo,

                zufällig ja :-)

                Vor Jahresende wird das aber nicht in gedruckter Form erhältlich sein

                Comment


                • #9
                  schade, dann bin ich (hoffentlich) mit meiner Diplomarbeit fertig. Aber trotzdem super.

                  Gruß Elk

                  Comment


                  • #10
                    -> Andreas

                    Hallo Andreas,

                    ich dachte erst ich hatte mich da verguckt, aber wie es aussieht gibt es ein OLEDB Provider für Interbase (SIBProvider).

                    Kannst Du mir sagen wie man diesen installieren kann ?

                    Grüße
                    Mathia

                    Comment


                    • #11
                      Hallo,

                      da es sich bei einem OLE DB-Provider um ein normales COM-Objekt handelt, gibt es 2 Wege: <br>
                      a) <b>regsvr32 SIBProvi.dll</b> (Microsoft-Zubehör REGSVR32.EXE sollte auf jedem Rechner vorhanden sein) <br>
                      b) <b>tregsvr.exe SIBProvi.dll</b> (Borland-Zubehör aus dem BIN-Verzeichnis von Delphi

                      Comment


                      • #12
                        Hallo Andreas,

                        wenn die Table und Query Komponenten wie Du sagst nicht für neue Projekte verwendet werden sollen, wie stellt man denn dann die Verbindung zu den Datenzugriffskomponenten her ?

                        Elk

                        Comment


                        • #13
                          Hallo,

                          über TADODataSet bzw. TADOStoredProc, wobei <b>TADODataSet</b> häufiger eingesetzt werden wird. Das könnte zum Beispiel so aussehen:
                          <pre>
                          unit Unit1;

                          interface

                          uses
                          Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                          Dialogs;

                          type
                          TForm1 = class(TForm)
                          ADOConnection1: TADOConnection;
                          ADODataSet1: TADODataSet;
                          DataSource1: TDataSource;
                          DBGrid1: TDBGrid;
                          private
                          { Private-Deklarationen }
                          public
                          { Public-Deklarationen }
                          end;

                          var
                          Form1: TForm1;

                          implementation

                          {$R *.dfm}

                          end.
                          </pre>
                          Konfiguration im Objektinspektor:
                          <pre>
                          object Form1: TForm1
                          Left = 286
                          Top = 107
                          Width = 696
                          Height = 480
                          Caption = 'Form1'
                          Color = clBtnFace
                          Font.Charset = DEFAULT_CHARSET
                          Font.Color = clWindowText
                          Font.Height = -11
                          Font.Name = 'MS Sans Serif'
                          Font.Style = []
                          OldCreateOrder = False
                          PixelsPerInch = 96
                          TextHeight = 13
                          object DBGrid1: TDBGrid
                          Left = 104
                          Top = 56
                          Width = 320
                          Height = 120
                          DataSource = DataSource1
                          TabOrder = 0
                          TitleFont.Charset = DEFAULT_CHARSET
                          TitleFont.Color = clWindowText
                          TitleFont.Height = -11
                          TitleFont.Name = 'MS Sans Serif'
                          TitleFont.Style = []
                          end
                          object ADOConnection1: TADOConnection
                          Connected = True
                          ConnectionString =
                          'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initi' +
                          'al Catalog=Northwind;Data Source=(local)'
                          LoginPrompt = False
                          Provider = 'SQLOLEDB.1'
                          Left = 24
                          Top = 16
                          end
                          object ADODataSet1: TADODataSet
                          Active = True
                          Connection = ADOConnection1
                          CursorType = ctStatic
                          CommandText = 'select * from Territories'
                          Parameters = <>
                          Left = 24
                          Top = 56
                          end
                          object DataSource1: TDataSource
                          DataSet = ADODataSet1
                          Left = 64
                          Top = 56
                          end
                          end
                          </pre>
                          Bei TADODataSet legt man über die Eigenschaft <b>CommandType</b> fest, ob ein Tabellen-Name oder eine SELECT-Anweisung in der Eigenschaft <b>CommandText</b> verwendet wird. Somit kann TADODataSet die Funktion von TADOTable und TADOQuery vollständig ersetzen

                          Comment


                          • #14
                            Danke, das ging ja schnell.

                            Gruß Elk

                            Comment

                            Working...
                            X