Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 4533 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Server
gelöst SQL-Tabelle portieren und dabei Daten konvertieren (1)

Frage von menace zum Thema Server ...

Datenbanken
gelöst MS Access 2010 Berechtigung für Button(Klick) (12)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Microsoft Office
gelöst Löschabfrage MS Access als Task ausführen (4)

Frage von MGAS400 zum Thema Microsoft Office ...

Datenbanken
MS Access MDB Datei analysieren (5)

Frage von greatmgm zum Thema Datenbanken ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...