Announcement

Collapse
No announcement yet.

ADODataSet und IndexDefs

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

  • ADODataSet und IndexDefs

    Hallo,

    Umgebung: D7, MS SQL 2000

    versuche mit einer TADODataSet-Komponente die Indexes der darunterliegenden Tabelle zu ermitteln, also:

    Code:
    fData : TADODataSet;
    ...
    fData.IndexDefs.update;
    Dann lese ich die Index-Felder... Mit der BDE-Komponente TTable und der gleichen MSSQL Datenbanktabelle hat es wunderbar funktioniert. ADODataset liefert keine Indexes zurück - FData.IndexDefs.Count = 0. Die fData.Supports ([coIndex]) liefert auch falsch zurück (was wohl das Ergebnis erklärt?).

    Man könnte die Indexfelder wahrscheinlich aus einer Systemtabelle mit SQL ermitteln. Wenn Delphi hier nicht hilft, muss ich wohl es versuchen.

    Weiß jemand, ob es andere Möglichkeiten in Delphi gibt, die Indexes mit ADO auszulesen?

    Zusatzinformationen, falls hilft:
    CursorLocation := clUseClient;
    CursorType := ctStatic;
    LockType := ltReadOnly;

    Vielen vielen Dank!!!

  • #2
    Hallo!

    Also mit D5 und MS SQL 2000 klappt das. Ich kenn mich mit D7 nicht aus, ist da noch sinnsoll (angeraten) das TBetterAdodataset als Alternative zu verwenden?!? Wenn ja hast Du das mal getestet?

    BYE BERND

    Comment


    • #3
      Für was benötigst Du die Indize?
      Wie schaut dein Connection-String aus (gehst du evtl. über ODBC)?

      Comment


      • #4
        Danke Bernd, danke Bernhard.

        TBetterADO... habe ich noch nicht ausprobiert, da es bisher mit einer gesunden Mischung aus TADO... für z.B. Präsentation-Schicht und den nativen Objekten für Logik gut geklappt hat.

        Wegen ConnectionString, sorry, habe vergessen zu erwähnen. nein, benutze SQLOLEDB.1.

        Indizies brauche ich, weil mein ETL-Programm dynamisch Werte, Felder und Funktionen der richtigen Tabelle zuordnet. Eigentlich reichen schon Primärschlüssel.

        Wie ich erwähnt habe, habe ich doch SQL Lösung genommen:

        with ADODataSet do begin
        CommandText := 'SP_PKEYS ' + Tablename;
        open; first;
        while not EOF do begin
        aList.add (FieldByName('COLUMN_NAME').asString);
        next;
        end;

        Für meine Zwecke reicht es momentan. Allerdings muß ich wahrscheinlich wohl TBetterADO versuchen, wenn ich mit MSACCESS arbeite?

        Danke.

        Comment


        • #5
          Hallo!

          Laut Forum soll Das TBetterAdodataset robuster sein und mehr Konfigurationsmöglichkeiten bieten. Wir uns bei der Entwicklung nur auf das BetterDataset gestützt und ich nur sagen: "Läuft gut und sehr stabil"

          Leider keine Erfahrungen mit MSACCESS, da wir nur mit dem MS SQL Server zu tun haben...

          BYE BERND

          Comment


          • #6
            Habe auch viel Gutes über TBetterADO gehört. Vielleicht könnte ich mir damit direkte Recordset-Funktionen sparen.

            Danke.

            Comment


            • #7
              Das Problem mit MSACCESS entstand früher als ich erwartet habe, deswegen habe ich allgemeinere Lösung gefunden. Für die, die es interessiert:

              with ADODataSet do begin
              Connection.OpenSchema(siPrimaryKeys, EmptyParam, EmptyParam, ADODataSet);
              Filter := 'TABLE_NAME = ''' + FDataTableName + '''';
              Filtered := TRUE;
              open; first;
              while not EOF do begin
              aList.add (FieldByName('COLUMN_NAME').asString);
              next;
              end;


              Gruß

              Comment

              Working...
              X