Announcement

Collapse
No announcement yet.

INDEX mit SQL // Fehler: Tabelle besitzt keinen Primärindex

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

  • INDEX mit SQL // Fehler: Tabelle besitzt keinen Primärindex

    Hallo Leute,<br><br>
    auf einer IBM DB2 Datenbank (BS: AS/400) habe ich per SQL folgende Tabelle erstellt:<br><br>
    CREATE TABLE MM4N4LIB/TBLDNT <br>
    (DNTNAM CHAR (25 ) NOT NULL WITH DEFAULT, <br>
    DNTLND CHAR (3 ) NOT NULL WITH DEFAULT, <br>
    DNTTXT CLOB NOT NULL WITH DEFAULT)<br><br>
    Da ich mit SQL keinen Index direkt auf eine Tabelle legen kann, habe ich noch folgenden Index erstellt:<br><BR>
    CREATE UNIQUE INDEX MM4N4LIB/tbldntl1 <br>
    ON MM4N4LIB/TBLDNT <br>
    (DNTNAM ASC, DNTLND ASC)<br><br>
    Soweit so gut. Meine Datenbank zeigt mir den Index an und er greift (ich kann keinen doppelten Schlüssel anlegen).<br><br>
    Wenn ich aber diesen Index bei meinem TTable-Objekt angeben will (IndexName) bekomme ich den Fehler "Tabelle besitzt keinen Primärindex".<br><br>
    Wie kann ich per SQL einen Indexerstellen auf den ich zugreifen kann, weil ohne Index kann ich Functionen wie GotoKey usw. vergessen.<br><br>
    CU
    Frank

  • #2
    Hallo Frank,

    bei IB/FB legt man so ein Primarykey an <pre>ALTER TABLE MYTABLE ADD CONSTRAINT PK_MYTABLE PRIMARY KEY (ID)</pre>

    Gruß

    Torste

    Comment


    • #3
      Hi Torsten,<br><br>
      diesen Primarykey habe ich jetzt erstellt, das klappt auch unter DB2 und wird mir in der DB2-Verwaltung angezeigt (ich liebe SQL ;-)).<br><br>
      Aber leider kann ich immer noch keinen IndexName in meiner TTable auswäheln . Ich bekomme immer noch die Meldung "Tabelle besitzt keinen Primärindex!".<br><br>
      Gruß Fran

      Comment


      • #4
        Was ich noch erwähnen sollte, ich greife per ODBC auf die Tabelle zu. Aber auch über eine ODBC-Verbinung muß ich doch Indizies verwenden können. ODER

        Comment


        • #5
          Hallo Frank,

          bei einer Client-Server Datenbank ist es i.d.R. nicht sinnvoll mit TTable zu arbeiten. Eine Query ist dafür im allgemeinen besser geeignet.

          Tschau

          Torste

          Comment


          • #6
            Hi Torsten,<br><br>
            über ein Query müßte ich die Datenbankoperationen (Lesen, Hinzufühgen, Updaten) über SQL machen oder? Das finde ich ziemlich umständlich.<br><br>
            Was seltsam ist, wenn ich die Tabelle mit ADO einrichtie, werden mir die Indizes angezeigt.<br><br>
            Wir nutzen erst seit kurzem D7. Ich kenne ADO nicht, was ist der Unterschied zur BDE??

            Comment


            • #7
              Hallo Frank,

              bei TTable bekommt man den Prímärindex nicht angezeigt. Nur zusätzliche Indices lassen sich dort auswählen. Ob der Primärindex verwendet werden soll, wird über die Eigenschaft DefaultIndex gesteuert. (Wenn ich mich da jetzt richtig erinnere, ist schon ein Weilchen her, daß ich mit TTable experimentiert habe).

              Und ich kann Torsten nur zustimmen, daß die Verwendung einer Query besser wäre...

              Grüße Joche

              Comment


              • #8
                Hallo Frank,

                hab' Dein neues Posting gerade erst gesehen und so richtig kann ich Dir da jetzt noch nicht helfen, da ich mich auch gerade erst mit ADO anfreunde. Aber Fakt ist: Die BDE ist 'End of Life'. Sie wird nicht mehr weiter entwickelt oder gepflegt. Für mich Grund genug, mich davon zu trennen.

                Grüße Joche

                Comment


                • #9
                  Hallo Jochen,<br><br>
                  gerade das finde ich das seltsame, bei der ADOTable werden die Indizes unter IndexName angezeigt bei der TTable nicht.<br><br>
                  Wenn es besser ist, Query zu benutzen, werde ich das natürlich tun. <br><br>
                  Ich kann bei Query.SQL das entsprechende SQL angeben und über die DB-Anzeigekomponenten die Ergebnistabelle anzeigen. Aber eine SQL Ergebnisstablle ist Schreibgeschützt, und ich will u. a. Updaten

                  Comment


                  • #10
                    Hallo Frank,

                    ob und wann eine Query eine aktualisierbare Ergebnismenge liefert hängt von der verwendeten DB und dem Select-Statement ab (grundsätzlich nicht aktualisierbar sind z.B. SELECTs über mehr als eine Tabelle). Ich setze eingentlich grundsätzlich mehrere Queries ein. Eine für die Anzeige (wobei ich hier die Filter und Sortier Klauseln zur Laufzeit erzeuge) und eine Query pro Tabelle, in der ich nur die Feldnamen selektiere. Diese verwende ich für das UpdateSQL.

                    Grüße Jochen

                    P.S. Falls Du die Tabelle über Query->Edit usw manipulieren willst, mußt Du RequestLive der Query auf true setzen. Die Query muß zum Ändern dieser Eingenschaft geschlossen werden

                    Comment


                    • #11
                      Danke, da will ich mal schauen wie ich mit Query zurande komme

                      Comment


                      • #12
                        Wenn man oft mit OS/400-Datenbanken hantieren muss, ist wohl Delphi??/400 von Better-Office besser geeignet

                        Comment


                        • #13
                          Hallo Peter,<br><br>
                          momentan stehen nur ein paar kleine Projekte an, die die doch recht hohen Kosten für Delphi/400 nicht rechtfertigen.... aber DB2 auf der ISeries ist eine DB wie jede andere auch, das muß auch ohne so spezielle Lösungen gehen. Ich will ja keine Call's oder ähnliches auf der 400 starten, sondern nur auf die Datenbank

                          Comment


                          • #14
                            Hallo nochml Frank,

                            such doch hier im Forum mal nach ADOTable, ADOQuery und ADODataset. Es müßte zu diesem Thema ein paar Postings geben... (Ich meine mich zu erinnern, daß TADOTable nur für 'quick & dirty' Umstellungen gedacht sind. Neue Projekte sollte man damit nicht machen. Ich meine mich aber auch zu erinnern, daß teilweise davon abgeraten wird TADOQuery zu verwenden, sondern statt dessen TADODataset.)

                            Grüße Joche

                            Comment


                            • #15
                              Danke Jochen... ich schau mal. Ich habe mal ein anderes Posting aufgemacht wo es um die "Richtige" Anbindung an die DB2 As400 geht. Mal schauen was dabei rum kommt. Ich bin momentan ziemlich überfragt, da ich mich in der nächsten Zeit für eine Anbinungsart entscheiden muß, und ich würde mich ungerne für was "dummes" entscheiden ;-

                              Comment

                              Working...
                              X