Veröffentlicht 13. Februar 200619 j 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
14. Februar 200619 j 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
14. Februar 200619 j 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
14. Februar 200619 j 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
14. Februar 200619 j 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
14. Februar 200619 j 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
14. Februar 200619 j 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
14. Februar 200619 j 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) ?
14. Februar 200619 j 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
14. Februar 200619 j 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
14. Februar 200619 j 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...
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.