Announcement

Collapse
No announcement yet.

Record-Nummer in Access-Tabellen

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

  • Record-Nummer in Access-Tabellen

    Delphi 3. prof.

    Bei Paradox-Tabellen wird mit Dataset.RecNo die aktuelle Satznummer angezeigt (meist jedenfalls...)

    bei Access-Tabellen kommt nur ne -1 raus. Gibts einen Trick, auch bei Access-Tabellen an die Datensatznummer ranzukommen?

  • #2
    Hallo,

    angenommen, man greift über ADO auf eine ACCESS2000-Datenbank zu und legt ein neues berechnetes Feld an. Dann können man per Checkbox die Anzeige der Datensatznummer an- bzw. ausschalten:
    <pre>
    procedure TForm1.ADODataSet1CalcFields(DataSet: TDataSet);
    begin
    if CheckBox1.Checked then
    ADODataSet1RecNoDemo.Value := Abs(ADODataSet1.RecNo)
    else
    ADODataSet1RecNoDemo.Value := ADODataSet1.RecNo;
    end;
    </pre>
    Allerdings wird der erste Datensatz mit der Nummer <b>-1</b> gekennzeichnet, der zweite Datensatz mit der Nummer <b>2</b>, der dritte mit <b>3</b> usw. Daher sorgt <b>Abs</b> dafür, dass auch der erste Datensatz "normal" (d.h. ohne Vorzeichen) eingezeigt wird.

    Der von Microsoft vorgesehen Zugriff über <b>ADO</b> arbeitet also so wie erwartet, die alten SQL-Links der BDE bzw. ein eventuell verwendeter ODBC-Treiber (über die BDE) werden wohl stellenweise zu Problemen führen. Nicht ohne Grund hat Borland die BDE bereits zum "alten Eisen" gelegt.

    Comment


    • #3
      Aktuelle Record-Nummer in Interbase5-Tabellen

      Hallo Leute!

      Ich habe auch das Problem, das ich die aktuelle Datensatznummer
      in der Interbase5-Tabelle (Prog. Sprache Delphi 5 Prof.) nicht herausfinden kann. Kann mir da einer vielleich helfen.

      Danke Walte

      Comment


      • #4
        Hallo,

        eine SQL-Datenbank arbeitet mengenorientiert, so dass es dort keine "Datensatznummer" geben kann. Die Position eines bestimmten Datensatzes in der Ergebnismenge hängt von den beim SELECT verwendeten WHERE- und ORDER BY-Kriterien ab.

        Benötigt man eine "Datensatznummer", so kann man diese selbst in einer Stored Procedure generieren lassen. Das folgende Beispiel demonstriert die Durchnummerierung der Datensätze der SELECT-Abfrage am Beispiel der Tabelle COUNTRY aus der InterBase-Demodatenbank IBLOCAL. Zusätzlich zu den beiden Spalten der Tabelle wird der Rückgabeparameter POS als INTEGER deklariert und vor dem Aufruf von SUSPEND hochgezählt:
        <pre>
        CREATE PROCEDURE GETCOUNTRY RETURNS (
        POS INTEGER,
        COUNTRY VARCHAR(15),
        CURRENCY VARCHAR(10)
        ) AS
        DECLARE VARIABLE iCOUNT INTEGER;
        BEGIN
        iCOUNT = 0;
        FOR SELECT Country, Currency
        FROM COUNTRY
        INTO :Country, :Currency
        DO
        BEGIN
        iCOUNT = iCOUNT + 1;
        Pos = iCOUNT;
        SUSPEND;
        END
        END
        ^
        </pre&gt

        Comment

        Working...
        X