Zum Inhalt springen

SQL - Splatenname ändern


lexl

Empfohlene Beiträge

Hallo,

ich kenn mich in SQL noch nicht ganz so gut aus. Jetzt steh ich leider vor einem kleinen Problem.

Ich habe eine Access Datenbank. Diese hat Beispielsweise eine Tabelle und in der Tabelle befinden sich einige Spalten mit Daten. Jetzt würde ich gerne einen Spaltennamen ändern. (Beispielsweise von SpalteA in SpalteA1)

klar, mit der Oberfläche von Access könnte man den Namen ändern, aber das ganze sollte ohne Access auch funktionieren und hier ist mein Problem. Mir fehlt hierzu der entsprechende SQL Befehl, habe im Netz auch noch nichts passendes finden können.

mfg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Geht anscheinend auch nicht wirklich, habe auf meiner Suche nur was für Oracle und andere gefunden, dort gibt es RENAME.

Habe im Netz jetzt die Alternative gefunden, in der man eine neue Spalte erstellt, alle Werte von der alten Splate kopiert um dann die alte Spalte zu löschen.


ALTER TABLE tabellen_name ADD COLUMN spalte_neu CHAR(50);

UPDATE tabellen_name SET spalte_neu = spalte_alt;

ALTER TABLE tabellen_name DROP COLUMN spalte_alt;

Damit würde es gehen - wenn ich noch wüsste, wie ich mit SQL einen PRIMARY KEY löschen kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

meinedb.execute "ALTER TABLE meinetabelle DROP CONSTRAINT meinprimaeroderfremdschluessel"

Habe deinen Tipp gerade ausprobiert, leider funktioniert er nur nicht ganz.

Access bringt mir folgende Fehlermeldung:

CHECK-Einschränkung <Name> nicht vorhanden. (Fehler 3755)

Leider sagt mir das garnichts, und auch die MS Access Hilfe bringt mich hier auch nicht sonderlich arg weiter...

Link zu diesem Kommentar
Auf anderen Seiten teilen

"DEFAULT" (und eigentlich alles als SQL-92) wird von access nicht unterstützt.

du kannst es nur mit ADO versuchen. die mögliche ddl-syntax, die unterstützt wird, ist folgende:

ALTER TABLE Tabelle {ADD {COLUMN Feld Typ[(Größe)] [NOT NULL] [CONSTRAINT Index] | ALTER COLUMN Feld Typ[(Größe)] | CONSTRAINT Mehrfeldindex} | DROP {COLUMN Feld I CONSTRAINT Indexname} }

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

"DEFAULT" (und eigentlich alles als SQL-92) wird von access nicht unterstützt.

du kannst es nur mit ADO versuchen. die mögliche ddl-syntax, die unterstützt wird, ist folgende:

Du meinst, bei ner ADO und Jet Connection, über

Cn.execute("SQL Command")

oder, muss das dann anderst ausgeführt werden, damit es klappt?

Frage deshalb, da hierrüber eh alle meine Befehle laufen. Das ganze schaut so aus, das man mehrere Scripts hat (z.B. Data und Table - Mit data.sql sollen Daten verändert und mit table.sql werden tabellen beispielsweise erstellt werden) die hintereinander abgerufen werden über ein Programm welöches in VB6 geschrieben wurde. Und dieses Programm geht dann jeden Befehl Schritt für Schritt durch, bis es am Ende ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für deine hilfe, allerdings bringt mich das noch nicht ganz so arg weit, leider. Habe mal mit ADO immerhin geschaft eine neue Tabelle zu erzeugen, gar kein Problem. Nur weiß ich nicht so recht, wie ich den Befehl von dir genau umsetzten soll, habe das ganze mal bisher so probiert, allerdings funktioniert das nicht...:

strDbPathName = txtDbPathName.Text

Private m_oCn As New ADODB.Connection

Private m_oTbl As New ADOX.Table

-----------------------------------------------------------------

...

   strTableName = txtDefaultTableName.Text

   strColumnName = txtDefaultColumnName.Text

   strDefaultValue = txtDefaultValue.Text


   Call OpenCn(strDbPathName)


   m_oTbl.Name = strTableName

   Call m_oTbl.Columns.Append(strColumnName, adChar, strDefaultValue)

...

Link zu diesem Kommentar
Auf anderen Seiten teilen

allerdings funktioniert das nicht...:

du verwendest schon den richtigen code:

Columns.Append(strColumnName, adChar, strDefaultValue)

strColumnName = name der neuen tabellenspalte

adChar = datentyp zeichenkette

strDefaultValue = standardwert wenn nicht angegeben

allerdings müsstest du mir halt sagen, was denn nun konkret genau nicht funktioniert bzw. was du nicht verstehst.

tipp: such dir ein gutes buch oder tutorial über ADO und lese dich in das objektmodell hinein. eine gute einfürhrung findest du z.b. hier:

http://www.dfpug.de/konf/konf_1998/08_ole/d_ado/d_ado.htm

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es kam ne Fehlermeldung, das der Typ nicht stimmt, das habe ich aber mittlerweile beheben können.

Nun habe ich aber was neues :rolleyes:

Und zwar, habe ich nun (siehe folgenden Code) einen Standartwert über ADOX setzten können. Dies funktioniert allerdings so wie es jetzt zu sehen ist nur wenn die entsprechende Tabelle noch nicht existiert.

Jetzt bräuchte ich praktisch genau das selbe, nur sollte es auch gehen wenn die Spalte bereits existiert. Bei dem jetzigen Code bekomme ich noch folgende Fehlermeldung:

"Feld kann nur einmal definiert werden!"


...

   '--- Verbindung zur Datebbank herstellen

   Call OpenCn(strDbPathName)


   '--- Verbindung dem ADOX.Catalog zuweisen

   m_oCat.ActiveConnection = m_oCn


   '--- Standardwert und Spaltenname setzten   

   With m_oCol

      Set .ParentCatalog = m_oCat

      .Name = strColumnName

      .Properties("Default") = strDefaultValue

   End With


   '--- Spalte erstellen mit DefaultValue

   m_oCat.Tables(strTableName).Columns.Append m_oCol


   Call CloseCn

...

Private Sub OpenCn(ByVal strDbPathName)

   m_oCn.Provider = "Microsoft.Jet.OLEDB.4.0"

   m_oCn.ConnectionString = strDbPathName

   m_oCn.Mode = adModeReadWrite

   Call m_oCn.Open

End Sub

...

Link zu diesem Kommentar
Auf anderen Seiten teilen

VisualBasic 6 (SP6)

- Microsoft Jet and Replication Objects 2.6 Library

- Microsoft ActiveX Data Objects 2.8 Library

- Microsoft ADO Ext. 2.8 for DDL and Security

Access 2002 (SP2)

Windows XP (SP2)

PS.:

Hab's gerade geschaft das ich auch existierende Felder ändern kann:


   Call OpenCn(strDbPathName)


   Set m_oCat.ActiveConnection = m_oCn

   Set m_oTbl = m_oCat.Tables(strTableName)

   Set m_oCol = m_oTbl.Columns(strColumnName)

   m_oCol.Properties("Default") = strDefaultValue

   m_oTbl.Columns.Refresh


   Call CloseCn

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...