lexl Geschrieben 19. Juli 2005 Teilen Geschrieben 19. Juli 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
zirri Geschrieben 19. Juli 2005 Teilen Geschrieben 19. Juli 2005 vorneweg dies ist kein sql sondern ddl. zum aendern von datenstrukturen dient das schluesselwort 'alter'. guck dir das man in einer referenz an gruss Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 19. Juli 2005 Teilen Geschrieben 19. Juli 2005 http://www.blueclaw-db.com/alter_table_ddl.htm Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schawenn Geschrieben 19. Juli 2005 Teilen Geschrieben 19. Juli 2005 Also, ich kenne keinen DDL-Befehl, der in Access einen COLUMN-NAME ändert. Man kann zwar den Typen ändern oder einen CONSTRAINT nachträglich auf dieses Feld setzen, aber von Namens-Änderung in Access über DDL, habe ich noch nie etwas gehört. mfg schawenn Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lexl Geschrieben 19. Juli 2005 Autor Teilen Geschrieben 19. Juli 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 19. Juli 2005 Teilen Geschrieben 19. Juli 2005 Damit würde es gehen - wenn ich noch wüsste, wie ich mit SQL einen PRIMARY KEY löschen kann. meinedb.execute "ALTER TABLE meinetabelle DROP CONSTRAINT meinprimaeroderfremdschluessel" s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lexl Geschrieben 19. Juli 2005 Autor Teilen Geschrieben 19. Juli 2005 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 20. Juli 2005 Teilen Geschrieben 20. Juli 2005 sorry, ich hab meinen index einen sprechenden namen geben, vorzugsweise den des feldes ... vorher steht nur PrimaryKey drinnen ... dann funktioniert das statement, wie ich es angebgeben habe, auch bei dir (siehe screen). s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lexl Geschrieben 22. Juli 2005 Autor Teilen Geschrieben 22. Juli 2005 danke dir, so funktioniert das jetzt Wenn ich aber grad dabei bin, wie setzt man einen Standartwert für eine Spalte, und eine Spalten Beschreibung? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 22. Juli 2005 Teilen Geschrieben 22. Juli 2005 "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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lexl Geschrieben 22. Juli 2005 Autor Teilen Geschrieben 22. Juli 2005 "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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 22. Juli 2005 Teilen Geschrieben 22. Juli 2005 nein, du kannst eben nicht alles sql mit db.execute ausführen. du musst mit ADO die tabellen ändern, z.b. tbl.Columns.Append "Alter", adInteger, 4 anders geht es nicht, ausser du machst das z.b. auf sql server. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lexl Geschrieben 26. Juli 2005 Autor Teilen Geschrieben 26. Juli 2005 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) ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 26. Juli 2005 Teilen Geschrieben 26. Juli 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lexl Geschrieben 26. Juli 2005 Autor Teilen Geschrieben 26. Juli 2005 Es kam ne Fehlermeldung, das der Typ nicht stimmt, das habe ich aber mittlerweile beheben können. Nun habe ich aber was neues 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 ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 26. Juli 2005 Teilen Geschrieben 26. Juli 2005 möglicherweise verwendest du ältere versionen, die die eigenschaft nicht unterstützen. kannst du mal deine JET/access-versionenen und details zu deiner umgebung posten? s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lexl Geschrieben 26. Juli 2005 Autor Teilen Geschrieben 26. Juli 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.