Freigeben über


CREATE CURSOR - SQL-Befehl

Erstellt eine temporäre Tabelle.

CREATE CURSOR alias_name (fname1type [(precision [, scale])]
   [NULL | NOT NULL] [CHECK lExpression [ERROR cMessageText]]
   [DEFAULT eExpression] [UNIQUE] [NOCPTRANS] 
   [, fname2 ...]) | FROM ARRAY ArrayName

Parameter

  • alias_name
    Gibt den Namen der zu erstellenden temporären Tabelle an. alias_name kann ein Namensausdruck sein.

  • fname
    Gibt den Namen eines Feldes der temporären Tabelle an. Jeder fname kann ein Namensausdruck sein.

  • type
    Gibt in Form eines einzelnen Buchstabens den Datentyp des Feldes an.

  • precision
    Gibt die Feldbreite des mit fname angegebenen Feldes an. Bei einigen Datentypen muss eine Feldbreite angegeben werden.

  • scale
    Gibt die Anzahl von Dezimalstellen für den angegebenen Datentyp an. Bei einigen Datentypen müssen Dezimalstellen angegeben werden.

    Die folgende Tabelle zeigt die möglichen Werte für type, precision und scale:

    FieldType nFieldWidth nPrecision Beschreibung
    C n Zeichenfeld der Breite n
    D Datum
    T DatumZeit-Feld
    N n D Numerisches Feld der Breite n mit d Dezimalstellen
    F n D Gleitkommazahl-Feld der Breite n mit d Dezimalstellen
    I Integer (ganz Zahl)
    B D Double
    Y Währung
    L Logisch
    M Memo
    G Objektfeld
    P Bildfeld

    Für die Typen D, T, Y, L, M, G und P werden nFieldWidth und nPrecision ignoriert. Für die Feldtypen N, F und B gilt für nPrecision standardmäßig der Wert 0 (keine Dezimalstellen), wenn Sie nPrecision nicht angeben.

  • NULL
    Gibt an, dass das Feld NULL-Werte enthalten kann.

  • NOT NULL
    Gibt an, dass das Feld keine NULL-Werte enthalten darf.

    Wenn Sie weder NULL noch NOT NULL angeben, bestimmt die aktuelle Einstellung von SET NULL, ob im Feld NULL-Werte zulässig sind. Wenn NULL und NOT NULL fehlen und Sie die PRIMARY KEY- oder UNIQUE-Klausel angeben, wird dagegen die aktuelle Einstellung von SET NULL ignoriert, und der Standardwert NOT NULL wird für das Feld verwendet.

  • CHECK lExpression
    Gibt eine Gültigkeitsregel für das Feld an. lExpression kann eine benutzerdefinierte Funktion sein.

  • ERROR cMessageText
    Gibt die Fehlermeldung an, die Visual FoxPro anzeigt, wenn die Gültigkeitsregel für das Feld verletzt wird und ein Fehler generiert wird. Die Meldung wird nur angezeigt, wenn Daten in einem Datenblatt- oder Bearbeitungsfenster geändert werden.

  • DEFAULT eExpression
    Gibt einen Standardwert für das Feld an. Der Datentyp von eExpression muss mit dem Datentyp des Feldes identisch sein.

  • UNIQUE
    Erstellt einen potenziellen Index für das Feld. Der potenzielle Indexname hat denselben Namen wie das Feld.

    Weitere Informationen zu potenziellen Indizes finden Sie unter Anzeige von Indexinformationen und Festlegen eines primären oder potenziellen Indexes.

    Anmerkung   Potenzielle Indizes, die durch Angabe der UNIQUE-Option erstellt wurden, sind nicht mit den Indizes identisch, die mit der UNIQUE-Option des INDEX-Befehls erstellt wurden. Bei einem Index, der mit der UNIQUE-Option des INDEX-Befehls erstellt wurde, sind doppelt vorhandene Indexschlüssel zulässig, bei potenziellen Indizes sind doppelt vorhandene Indexschlüssel nicht zulässig.

    NULL-Werte und doppelt vorhandene Datensätze sind in einem Feld, das als potenzieller Index verwendet wird, nicht zulässig. Trotzdem generiert Microsoft Visual FoxPro keinen Fehler, wenn Sie einen potenziellen Index für ein Feld erstellen, das NULL-Werte unterstützt. Visual FoxPro generiert erst dann einen Fehler, wenn Sie versuchen, einen NULL-Wert oder einen bereits vorhandenen Wert in ein Feld einzugeben, das als potenzieller Index verwendet wird.

  • NOCPTRANS
    Unterbindet die Umsetzung von Zeichen- und Memofeldern in eine andere Codepage. Wird der Cursor in eine andere Codepage konvertiert, bleiben die Felder, für die Sie NOCPTRANS angegeben haben, von der Umsetzung ausgenommen. NOCPTRANS kann nur für Zeichen- und Memofelder angegeben werden.

    Im folgenden Beispiel wird ein Cursor mit dem Namen MYCURSOR erstellt, der zwei Zeichen- und zwei Memofelder enthält. Sowohl für das zweite Zeichenfeld (CHAR2) als auch für das zweite Memofeld (MEMO2) ist NOCPTRANS angegeben, damit diese Felder nicht umgewandelt werden.

    CREATE CURSOR mycursor (char1 C(10), char2 C(10) NOCPTRANS,;
       memo1 M, memo2 M NOCPTRANS)
    
  • FROM ARRAY ArrayName
    Gibt den Namen eines vorhandenen Arrays an, dessen Inhalt die Namen, Typen, Feldbreiten und Dezimalstellen der einzelnen Felder in der temporären Tabelle sind. Das korrekte Format für den Inhalt des Arrays ist unter AFIELDS( ) beschrieben.

Hinweise

CREATE CURSOR erstellt eine temporäre Tabelle, die nur so lange vorhanden ist, bis sie geschlossen wird. Eine mit CREATE CURSOR erstellte temporäre Tabelle kann wie jede andere Tabelle bearbeitet werden: Sie kann angezeigt und indiziert werden, und Sie können Datensätze anfügen und ändern.

Die temporäre Tabelle wird in dem niedrigsten verfügbaren Arbeitsbereich geöffnet, und der Zugriff auf die Tabelle kann über ihren Alias erfolgen. Jedes Feld der temporären Tabelle ist mit einem Namen, einem Datentyp, einer Feldbreite und einer Anzahl von Dezimalstellen definiert. Diese Definitionen können im Befehl selbst angegeben oder aus einem Array abgerufen werden. Die temporäre Tabelle wird unabhängig von der Einstellung von SET EXCLUSIVE immer zur exklusiven Verwendung geöffnet.

Beispiel

Im folgenden Beispiel wird ein Cursor mit dem Alias employee erstellt. Ein leerer Datensatz wird angefügt, gefüllt und mit Hilfe des BROWSE-Befehls angezeigt.

CLOSE DATABASES
CLEAR
CREATE CURSOR employee ;
 (EmpID N(5), Name C(20), Address C(30), City C(30), ;
  PostalCode C(10), OfficeNo C(8) NULL, Specialty M)
DISPLAY STRUCTURE
WAIT WINDOW "Press a key to add a record."

INSERT INTO employee (EmpId, Name, Address, City, PostalCode, ;
        OfficeNo, Specialty);
 VALUES (1002, "Dr. Bonnie Doren", "University of Oregon", "Eugene", ;
     "98403", "", "Secondary Special Education")
BROWSE

* At this point you could copy this record to a permanent table
CLOSE ALL   && Once the cursor is closed, all data is flushed
      && from memory
CLEAR

Siehe auch

AFIELDS( ) | CREATE | CREATE QUERY | CREATE TABLE - SQL | INSERT - SQL | MODIFY QUERY | SELECT - SQL