Announcement

Collapse
No announcement yet.

CREATE TABLE Problem

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

  • CREATE TABLE Problem

    Hallo zusammen,

    woran kann es liegen, dass eine CREATE TABLE Abfrage nur (ich glaube) 5 Felder erzeugen kann. Werden es mehr, bricht der Prozess mit der Meldung "Datensatz zu groß ab".

    Davon abgesehen, dass ich die Fehlermeldung ziemlich merkwürdig finde, ist es das erste mal, dass ein CREATE TABLE limitiert ist.

    Verwendet wird MS Access2000 via ADO und Delphi 4.

    Gruss
    Uwe

  • #2
    Hallo,

    mit dem folgenden Testprogramm kann ich das Problem nicht nachvollziehen:
    <pre>
    uses ADODB_TLB;

    const
    cCS = 'Provider=Microsoft.Jet.OLEDB.4.0;' +
    'Data Source=C:\Database\CREATETABLETEST.mdb;' +
    'Persist Security Info=False';
    cSQL= 'CREATE TABLE TestTbl (F1 INTEGER, F2 INTEGER, F3 INTEGER, F4 Integer,' +
    'F5 INTEGER, F6 INTEGER, F7 INTEGER, F8 Integer, F9 VARCHAR(10))';

    procedure TForm1.Button1Click(Sender: TObject);
    var
    aCon : _Connection;
    vRows : OleVariant;
    begin
    aCon := CoConnection.Create as _Connection;
    aCon.CursorLocation := adUseServer;
    aCon.Open(cCS, '', '', adConnectUnspecified);
    try
    aCon.Execute(cSQL, vRows, adExecuteNoRecords);
    finally
    aCon.Close;
    aCon := nil;
    end;
    end;
    </pre>
    Wie sieht ein kleines Beispiel aus, mit dem dieser Fehler jederzeit reproduzierbar ist

    Comment


    • #3
      Hallo Andreas,

      ich habe Dein Beispiel verwendet und hat auf Anhieb geklappt (hätte mich, ehrlich gesagt, auch gewundert, wenn nicht). Dann habe ich Deinen cSQL gegen meinen ausgetauscht und - die gleiche Fehlermeldung: "Datensatz zu groß".

      Aber ich habe den Fehler gefunden: die anzulegenden Textfelder hatte ich als CHAR ohne Größenangabe deklariert (Name CHAR). Nachdem ich CHAR durch VARCHAR(50) ersetzt habe, hat es funktioniert.

      Ich verstehe zwar immer noch nicht warum das so ist (bei InterBase ging das immer so), aber Hauptsache es läuft.

      Gruss
      Uwe

      P.S.: Um die ganze ADO - Geschichte zu erlernen habe ich gestern erst einmal Dein ADO Buch gekauft. Ist ja doch eine ganz andere Art auf DB's zuzugreifen

      Comment


      • #4
        Hallo,

        &gt;..CHAR ohne Größenangabe deklariert

        in diesem Fall geht die JET Engine von einem VARCHAR(250) aus, so dass in der Tat die maximale Datensatzlänge schnell erreicht ist.

        &gt;..bei InterBase ging das immer so

        Der InterBase setzt CHAR als CHAR(1) um, so dass die Spalte immer nur ein Zeichen breit ist.

        &gt;..habe ich gestern erst einmal Dein ADO Buch gekauft

        Das war eine sehr gute Idee ;-

        Comment


        • #5
          Hallo Andreas,

          >in diesem Fall geht die JET Engine von einem VARCHAR(250) aus, so >dass in der Tat die maximale Datensatzlänge schnell erreicht ist.

          Wie gross ist denn die maximale Datensatzlänge?

          Gruss
          Uw

          Comment


          • #6
            Hallo,

            &gt;...Wie gross ist denn die maximale Datensatzlänge?

            bevor ich jetzt etwas Falsches aus dem Gedächtnis heraus sage, beschränke ich mich auf den Satz "Die maximale Datensatzlänge ist erreicht, wenn man die Fehlermeldung 'Datensatz zu groß' bekommt" :-

            Comment

            Working...
            X