xound Geschrieben 13. Februar 2006 Teilen Geschrieben 13. Februar 2006 Hallo, ich suche eine Möglichkeit eine Tabelle in einem Access MDB File zu ersetzen. Es wird mit SQL (Microsoft Jet EngineSQL, wie ODBC) darauf zugegriffen. Ich schreibe gerade eine kleine Web-Applikation in PHP und muss schauen, ob eine Tabelle schon vorhanden ist; wenn sie nicht vorhanden ist, soll sie erstellt werden, wenn sie vorhanden ist, soll sie ersetzt werden. Leider gibt es sowas wie "CREATE OR REPLACE table_name" unter Jet SQL anschienend nicht, nur CREATE oder DROP ... Wie stell ich das an? Danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 14. Februar 2006 Teilen Geschrieben 14. Februar 2006 Alle Tabellen bei MS SQL Server sind in sys Tabellen gespeichert. Also es reicht dir die sicht INFORMATION_SCHEMA.TABLES abfragen und schon hast du alle Info über alle Tabellen in deinem DB Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xound Geschrieben 14. Februar 2006 Autor Teilen Geschrieben 14. Februar 2006 Alle Tabellen bei MS SQL Server sind in sys Tabellen gespeichert. Also es reicht dir die sicht INFORMATION_SCHEMA.TABLES abfragen und schon hast du alle Info über alle Tabellen in deinem DB Hallo, erstmal danke für die Antwort. Sind die Sys-Tabellen nicht standardmäßig unerreichbar von außen, weil Systemobjekte explizit über die Eigenschaften "angeschaltet" werden müssen? Ich probiere es mal; wie sieht die Abfrage der Sicht genau aus? Funktioniert das auch mit SELECT ... FROM? Besten Dank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 14. Februar 2006 Teilen Geschrieben 14. Februar 2006 Sind die Sys-Tabellen nicht standardmäßig unerreichbar von außen, weil Systemobjekte explizit über die Eigenschaften "angeschaltet" werden müssen? nein wie sieht die Abfrage der Sicht genau aus? mach die Sicht auf und schau es dir an Funktioniert das auch mit SELECT ... FROM? ja Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 14. Februar 2006 Teilen Geschrieben 14. Februar 2006 die frage des OP war meiner meinung eher der umgang mit jet sql / access 2000 ... von sql server war keine rede, right? sys.tables hilft da also nix; ich würde es allerdings mit ADO(X) versuchen oder über die MSysObjects versuchen, dort sind alle datenbank-objekte gelistet. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xound Geschrieben 14. Februar 2006 Autor Teilen Geschrieben 14. Februar 2006 die frage des OP war meiner meinung eher der umgang mit jet sql / access 2000 ... von sql server war keine rede, right? sys.tables hilft da also nix; ich würde es allerdings mit ADO(X) versuchen oder über die MSysObjects versuchen, dort sind alle datenbank-objekte gelistet. s'Amstel Hallo, ich hab's jetzt so probiert: SELECT Count(Name) FROM MSysObjects WHERE Name='Tabellenname'; Leider habe ich keine Leseberechtigung über Jet SQL .... Description: Datensätze können nicht gelesen werden. Keine Leseberechtigung auf 'MSysObjects'. Vielleicht hast Du ja noch eine andere Idee? Danke vorab Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 14. Februar 2006 Teilen Geschrieben 14. Februar 2006 Hallo, Leider habe ich keine Leseberechtigung über Jet SQL .... Description: Datensätze können nicht gelesen werden. Keine Leseberechtigung auf 'MSysObjects'. Vielleicht hast Du ja noch eine andere Idee? Danke vorab mit welchem user greifst du denn auf die datenbank zu, wenn du die MSysObjects im select verwendest bzw. machst du das schon von seiten PHP? allenfalls müsstest du nur die zugriffsberechtigungen innerhalb der datenbankdatei ändern. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xound Geschrieben 14. Februar 2006 Autor Teilen Geschrieben 14. Februar 2006 mit welchem user greifst du denn auf die datenbank zu, wenn du die MSysObjects im select verwendest bzw. machst du das schon von seiten PHP? allenfalls müsstest du nur die zugriffsberechtigungen innerhalb der datenbankdatei ändern. s'Amstel Der Zugriff erfolgt via PHP als Administrator ... Allerdings hat, wie ich hier sehe der Admin nur die Berechtigung den Entwurf zu lesen, nicht aber die Daten ... weiss der Deifel, warum. :-) Jedenfalls habe ich keine Idee, wie ich die Zugriffsberechtigung von extern ändern könnte; wie gesagt - ich habe zwar ein Testsystem hier, mit dem ich frickeln kann, aber beim Produktivstart habe ich nur noch von extern, also über Jet SQL die Möglichkeit Änderungen vorzunehmen. Die Datenbankdatei hat in der Produktivumgebung zwar den gleichen Aufbau, ist aber eine andere, also kann ich jetzt nicht einfach die Berechtigungen über das DBMS ändern, da es sowieso nur ein Testfile ist. Was meinst Du mit ADO(x) ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 14. Februar 2006 Teilen Geschrieben 14. Februar 2006 die frage des OP war meiner meinung eher der umgang mit jet sql / access 2000 ... von sql server war keine rede, right? ja es stimmt :eek sorry Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 14. Februar 2006 Teilen Geschrieben 14. Februar 2006 Jedenfalls habe ich keine Idee, wie ich die Zugriffsberechtigung von extern ändern könnte; wie gesagt - ich habe zwar ein Testsystem hier, mit dem ich frickeln kann, aber beim Produktivstart habe ich nur noch von extern, also über Jet SQL die Möglichkeit Änderungen vorzunehmen. Die Datenbankdatei hat in der Produktivumgebung zwar den gleichen Aufbau, ist aber eine andere, also kann ich jetzt nicht einfach die Berechtigungen über das DBMS ändern, da es sowieso nur ein Testfile ist. Was meinst Du mit ADO(x) ? Microsoft ADO Ext 2.5 for DDL and Security um auf die benutzerverwaltung einer access-db mittels ADOX zuzugreifen (und das vieleicht noch via ASP), wirst du schon einiges scripten müssen - du kannst sie vielleicht aber anstatt sie umständlich von extern zu ändern versuchen am testsystem die notwendigen zugriffsberechtigungen herauszufinden und dann am produktivsystem nachzuziehen bzw. nachziehen zu lassen. besser wäre es vielleicht auch, mit einem separaten user zu arbeiten. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xound Geschrieben 14. Februar 2006 Autor Teilen Geschrieben 14. Februar 2006 Microsoft ADO Ext 2.5 for DDL and Security um auf die benutzerverwaltung einer access-db mittels ADOX zuzugreifen (und das vieleicht noch via ASP), wirst du schon einiges scripten müssen - du kannst sie vielleicht aber anstatt sie umständlich von extern zu ändern versuchen am testsystem die notwendigen zugriffsberechtigungen herauszufinden und dann am produktivsystem nachzuziehen bzw. nachziehen zu lassen. besser wäre es vielleicht auch, mit einem separaten user zu arbeiten. s'Amstel Hm, das sind gute Vorschläge, allerdings möchte ich an der DB nichts ändern, ausser eine neue Tabelle anlegen bzw. diese überschreiben. Ich stimme Dir aber vollkommen zu, dass es der sauberste Weg wäre einen entsprechenden Benutzer mit den notwendigen Berechtigungen anzulegen - das geht allerdings nicht in meinem Fall, da ich nur Zugriff via Microsoft Jet SQL habe !!! Meinst Du ich könnte eine com_exception irgendwie abfangen und auswerten via PHP? Das wäre vielleicht eine Idee. Wenn ich die Tabelle erstellen will, und er gibt mir eine com_exception zurück, dann existiert die Tabelle schon, also kann ich diese droppen. Wenn ich die Tabelle erstellen will, und er gibt mir keine com_exception, dann kann ich createn! Aber wie verarbeite ich die com_exception in PHP ? Vielleicht hat ja jemand eine Idee... 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.