Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MS Access SQL Tabelle hinzufügen ohne GUI zu nutzen

Frage Entwicklung Datenbanken

Mitglied: Midivirus

Midivirus (Level 2) - Jetzt verbinden

12.10.2012, aktualisiert 10:10 Uhr, 4747 Aufrufe, 7 Kommentare

Guten Morgen liebe Gemeinde!

Da immer wieder kommende MDB geändert werden müssen, kann dies praktisch in ein SQL eingebaut werden.

Folgendes:
Es soll eine Tabelle mit einer weiteren Spalte ergänzt werden.

ALTER TABLE WKZZStandort  ADD DateOfBirth2 date
[funktioniert]

Jetzt möchte ich aber noch festlegen, dass der Standartwert "Jetzt()" ist.

ALTER TABLE WKZZStandort  ADD DateOfBirth2 date  DEFAULT now();
[Syntaxfehler in ALTER TABLE-Anweisung]


Falls dies in Access nur über die GUI möglich ist, schade!


Nachtrag:
in Postgres SQL geht es so
test timestamp without time zone DEFAULT now(),

Euer
Midi


Quellen:
http://www.teialehrbuch.de/Kostenlose-Kurse/SQL/14689-ALTER-TABLE.html
http://sqlzoo.net/de/howto/source/z.dir/i02create.xml
Mitglied: thaenhusen
12.10.2012 um 10:11 Uhr
Moin.

Ich gehe Mal davon aus, dass Du das ganze in VBA machen willst.

01.
    Dim db As Database 
02.
    Dim SQL As String 
03.
     
04.
    Set db = CurrentDb 
05.
     
06.
    SQL = "ALTER TABLE WKZZStandort ADD DateOfBirth2 date" 
07.
    db.Execute SQL, dbSeeChanges 
08.
     
09.
    db.TableDefs("WKZZStandort").Fields("DateOfBirth2").Properties("DefaultValue") = "Now()" 
10.
     
11.
    db.Close
HTH
MK
Bitte warten ..
Mitglied: filippg
13.10.2012 um 00:09 Uhr
Hallo,

ich weiß nicht, welchen SQL-Dialekt Access spricht. Aber bei T-SQL (MS) heißt es "GETDATE()" und nicht "NOW()".

[Syntaxfehler in ALTER TABLE-Anweisung]
Das Posten von vollständigen Fehlermeldungen kann hilfreich sein...

Gruß

Filipp
Bitte warten ..
Mitglied: Biber
13.10.2012, aktualisiert um 16:04 Uhr
Moin Midivrus, thaenhusen und filippg

die Frage lässt sich am besten ausgehend von Filipps Frage beantworten.

Zitat von filippg:
ich weiß nicht, welchen SQL-Dialekt Access spricht.
Aber bei T-SQL (MS) heißt es "GETDATE()" und nicht "NOW()".
Access spricht nach wie vor kein ANSI-SQL, nicht mal im Sinne von SQL-92 (und inzwischen ist SQL-2012 abgenickt).
In Access ist nach wie vor die Engine von den Konzepten und eben auch von den Grenzen des DAO-Modells (Data Access Objects) bestimmt. Was "früher" bei Access-MDBs Standard war, DAO hiess und bei Access 2000/2002 für tot erklärt wurde, nennt sich jetzt seit Access 2007 "Access Database Engine Object Library (Dateiname: ACEDAO.DLL)" und ist das olle DAO-Konzept.

Die eigentlich geeignete Architektur wäre wohl ADO (ActiveX Data Objects), kommt aber bei M$ nicht aus dem Quark (grottige Performance, abgespeckter Sprachumfang und vor allem bei Katalog/Datenbank-Verwaltungsfunktionen so gut wie nicht vorhanden). ADO ist zwar als Modell eher auf einer Linie, die besonders bei DDLs näher an der Mimik eines Standard-SQL-Sprachumfangs liegt.... soweit die gute Nachricht.
Von der Implementierung her allerdings ist alles, was Tabellen bzw Datenobjekte created oder altered nicht in DAO und nicht in ADO vollständig implementiert, sondern in einer Zusatzbibliothek (ADOX).

Bedeutet unterm Strich ganz banal:
[Syntaxfehler in ALTER TABLE-Anweisung]
bei einem ALTER TABLE add whatever date DEFAULT now()
-> nicht etwa das "now()" ist das Problem, sonder ganz einfach das unbekannte Schlüsselwort "DEFAULT".

DEFAULT wird weder bei einem CREATE TABLE noch einem ALTER TABLE außerhalb der Access-Klicks-Zsamma-Oberfläche unterstützt.
Also auch nicht bei Zugriffen von aussen - egal ob über ODBC, JBDC, DAO- oder ADO-Objekte, über VBA oder VBS.

Der einzige Weg (um nicht workaround zu schreiben) ist die von thaenhusen gezeigte Lösung.

Grüße
Biber
Bitte warten ..
Mitglied: Midivirus
16.10.2012 um 14:31 Uhr
Grüßt euch,

die Mailbenachrichtigungen sind von GMX als SPAM deklariert worden
[Lob in die Richtigung]!


Prinzipiell machen wollte ich es mit PHP!

@filippg:
Das Posten von vollständigen Fehlermeldungen kann hilfreich sein...
Access gibt halt coolerweise nur immer diese Meldung!!!

@Biber: besten Dank!


db.TableDefs("WKZZStandort").Fields("DateOfBirth2").Properties("DefaultValue") = "Now()"
Wenn ich richtig interpretiert habe, komme ich um den letzten Schritt nicht herum, die Standardwerte manuell zuhinterlegen?


angenehmen Resttag,
Midi
Bitte warten ..
Mitglied: Biber
17.10.2012, aktualisiert um 23:08 Uhr
Moin Midivirus,

ich war nicht sicher, ob deine Nachfrage eine rhetorische war.
Da aber nun Tage später kein "Hinreichend beantwortet"-Marker am Beitrag klebt, bestätige ich gerne nochmals die Richtigkeit deiner Interpretation.

Anmerkung 1)
Eine programmierte Lösung über PHP kannst du aus den genannten Gründen knicken. Du bekommst zwar problemlos eine Connection zur Access-Datenbank hin. Aber mit der kannst du nur Access-SQL sprechen. Und das kennt kein ALTER TABLE add/alter COLUMN DEFAULT .... Das können nur die Objekt-Modelle (wie DAO) mit ihren DLLs und ihren TableDef-Objekten.

Wenn thaenhusen ganz (über-)korrekt gewesen wäre, dann hätte er statt seiner Variablendeklaration geschrieben:
01.
   
02.
Dim db As DAO.Database 
03.
    Dim tdf As DAO.TableDef 
04.
    Dim fld As DAO.Field 
05.
...
-> dann wäre vielleicht deutlicher geworden, dass hier "Properties" eines hierachischen Objekt-Modells geändert werden - nicht etwa über ein SQL-UPDATE Katalogfelder einer Tabellenbeschreibung. Hat Access nicht. Deshalb kannst du auch im ACCESS-SQL keine Abfrage "Liste mir alle Tabellen im Schema" oder "Liste mir alle Felder in Table xy" machen.

Anmerkung 2)
Um es nochmals ganz deutlich zu sagen: Access war nie ein strategisches M$-Produkt und wird es nie werden dürfen. Die Redmonder möchten, dass alles, was in Richtung wartbare, halbprofessionelle, mehrbenutzerfähige Datenbank geht auf einem SQL-Server läuft. Deshalb bekommt auch jeder Privatanwender einen SQL-Server für lau und bei Marketingaktionen noch einen vollgetankten Rasenmäher dazu.

Eine Access-Applikation macht auch unter Performance-Gesichtspunkten nur Sinn, wenn die Appz-Logik in VBA zusammengeschrotet wird. Denn nur DAO-Zugriff via VBA ("Direct DAO") hat das Privileg, den selben Adressraum benutzen zu dürfen wie die Anwendung "Access". Das darf weder ADO.Net noch ODBC noch JDBC noch alle anderen. Zusammengefasst als zwei Einzelaussagen:
- alle Zugriffe außer Direct DAO müssen wesentlich mehr Disk I/O und ein paar Abstraktionsebenen mehr in Kauf nehmen
- und alle anderen haben zusätzlich einen künstlich eingeschränkten SQL-Sprachumfang.

Noch kürzer zusammengefasst: Access-Datenbanken sind Insellösungen.

Und im Zuge der globalen Klimaerwärmung sind viele Inseln dem Untergang geweiht.

Grüße
Biber
Bitte warten ..
Mitglied: Midivirus
18.10.2012 um 08:21 Uhr
@Biber:
Das Lob war an GMX gerichtet, die die Benachrichtigungen neuerdings als SPAM einstufen. (...)

Für mich reicht die Aussage
Eine programmierte Lösung über PHP kannst du aus den genannten Gründen knicken.

Für mich ist diese Frage an dieser Stelle dann erl.!


Vielen lieben Dank für eure Mühen und wieder herrlich,
qualifizierte Antworten zulesen, Dank DAFÜR.



>Midi<
Bitte warten ..
Mitglied: Midivirus
24.10.2012 um 09:19 Uhr
Quelle: http://www.shotdev.com/php/php-adodb/php-adodb-get-table-properties/

01.
<html>   
02.
<head>   
03.
<title>ShotDev.Com Tutorial</title>   
04.
</head>   
05.
<body>   
06.
<?php   
07.
$strConn = new COM("ADODB.Connection") or die("Cannot start ADO");   
08.
$strConn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("db/mydatabase.mdb"));   
09.
$strSQL = "SELECT * FROM customer";   
10.
$objRec = $strConn->Execute($strSQL);   
11.
   
12.
$intNumFields = $objRec->Fields->Count();   
13.
echo ("<b>Table customer have ".$intNumFields." Fields.</b><br>");   
14.
   
15.
for ($i=0; $i < $intNumFields; $i++) {   
16.
echo $objRec->Fields($i)->Name."<br>";   
17.
}   
18.
   
19.
$objRec->Close();   
20.
$strConn->Close();   
21.
$objRec = null;   
22.
$strConn = null;   
23.
?>   
24.
</body>   
25.
</html> 
Damit hab ich mein Ziel erreicht:
Prüfung ob die Spalte schon vorhanden ist, wenn nein, anlegen

-Beitrag und Problem gelöst-
Bitte warten ..
Ähnliche Inhalte
Datenbanken
gelöst Access 2010 SQL Tabellen Datensätze einfügen (6)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Datenbanken
MS Access - SQL Datenbank - Alle SPalten werden mit GELÖSCHT angezeigt (1)

Frage von harald.schmidt zum Thema Datenbanken ...

Datenbanken
gelöst SQL - Zwei Tabellen zusammenführen (6)

Frage von Memo66 zum Thema Datenbanken ...

Batch & Shell
gelöst Erstellen eines GUI in Powershell und das nutzen vom Funktionen mit Usereingabe (2)

Frage von IT-Guy77 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(1)

Information von DerWoWusste zum Thema Microsoft ...

Humor (lol)

Wohnt jemand in Belgien und kann nicht mehr ruhig ausschlafen?

(6)

Information von LordGurke zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Hosting & Housing
Mailserver Software Empfehlungen (21)

Frage von sunics zum Thema Hosting & Housing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (16)

Frage von liquidbase zum Thema Voice over IP ...

TK-Netze & Geräte
TK-Anlage VoIP - DECT Erweiterung (15)

Frage von Lynkon zum Thema TK-Netze & Geräte ...