TBatchMode in ADO ersetzen



  • Ok, ich hatte gehofft, mit meinem neuen Thread diesen hier abzulösen, aber nun hier:
    Wenn ich das richtig verstanden habe, fügt JOIN zwei Tabellen in der Abfrage zu einer zusammen, also hängt die Spalten an. Meine beiden Tabellen haben aber exakt identische Spaltennamen, was passiert dann? Das ist der Grund, warum ich mit JOIN meine Probleme habe.



  • Dann musst du angebeben, welche Spalte aus welcher Tabelle du haben möchtest.

    Sollte dann ungefähr so aussehen:

    UPDATE Tab1
    	INNER JOIN Tab2 ON Tab1.Index = Tab2.Index
    SET Tab1.Col1 = Tab2.Col1, Tab1.Col2 = Tab2.Col2
    WHERE Tab1.Index = 2
    

    Ohne Gewähr, da mein Hirn, auf Grund akuter thermischer Probleme, nur noch auf 25% Leistung läuft... So, die letzte Stunde setz ich mich in den Serverraum und schaue den diversen Lämpchen beim blinken zu. 😉



  • Exception: Fehler in SQL Syntax.



  • Na ja, das ist das, was da unter Access angegeben war... Dann versuch doch mal den ANSI / MS-SQL-Server Code von der Seite.



  • Ich hab irgendwie das Gefühl, dass meine Syntax nicht so recht SQL entspricht. Folgendes ist laut Exception auch falsch:

    CREATE TABLE tab3 LIKE tab2
    

    Und das ist doch wohl definitv richtig, oder?



  • Heimelchen schrieb:

    CREATE TABLE tab3 LIKE tab2
    

    Und das ist doch wohl definitv richtig, oder?

    Nicht das ich wüßte. Ich hätte das eher so gemacht:

    CREATE TABLE new_table
      AS (SELECT * FROM old_table);
    

    Kommt das mit dem LIKE eventuell aus der MySQL-Ecke?



  • Hallo,

    nein. MySQL ist ebenfalls

    INSERT INTO tab (id1, id2, id3)
    SELECT id1, id2, id3 FROM tab2
    

    VlG



  • Das würde zumindest erklären, warum meine Doku von MySQL hier nicht immer funktioniert...
    Ich probiere und geb dann Laut.



  • Syntax Fehler in CREATE TABLE Anweisung aufgetreten.
    


  • Hallo,

    sry, hab mich total verlesen.

    CREATE TABLE funktioniert in MySQL genau so, wie du beschrieben hast.

    CREATE TABLE [IF NOT EXISTS] tab LIKE alt_tab;
    

    VlG



  • Mit was arbeitest du denn nun? Access oder MySQL? Da gibt es dann doch ein paar Unterschiede.

    Wie heißen die Spalten? Ich hoffe doch, dass da nicht wirlich Index als Feldname verwendet wird, Index ist ein reserviertes Schlüsselwort in SQL.

    EDIT: Ich hab gerade mal versucht unter Access 2003 eine Tabelle auf Basis einer anderen zu erstellen, ohne Erfolg. Entweder ist das eine Einschränkung des Treibers (ich hab ODBC verwendet) oder der ADO-Komponenten selbst. Tabellen kannst du so also nicht erzeugen (weder mir LIKE, noch mit AS (SELECT...).



  • Ich verwende die ADO-Objekte und einen MS Access-Treiber. Der Index heißt tatsächlich Index, ist auch nicht von mir festgelegt und kann ich auch nicht ändern.
    Tabellen erstellen geht übrigens, nur das LIKE mag er nicht.



  • Hallo,

    das musst du dazu sagen! CREATE TABLE LIKE ist MySQL-typisch. Für MSSQL gibt es soweit ich weiß keine Möglichkeit. Die Tabelle wirst du von Hand erstellen müssen. Den Inhalt kannst du dann wie schon erwähnt kopieren (INSERT INTO tab SELECT FROM .....).

    Alternativ (wenn das in Frage kommt): Export -> Import

    VlG



  • Heimelchen schrieb:

    Der Index heißt tatsächlich Index.

    Was bedeutet, dass du diesen Spaltennamen in SQL-Statements immer in Hochkommas setzen musst -> sonst Exception.



  • Wo finde ich denn eine Dokumentation über die Befehle, die mein Treiber unterstützt? Das würde mir sehr weiterhelfen.



  • So, nach Tagen der Verzweifelung nun mal Butter bei die Fische:

    Die Syntax zum kopieren einer Access-Tabelle in eine neue Tabelle ist:

    SELECT * INTO NewTable FROM OldTable
    

    Wenn man nur das Gerüst haben will, kann man die ja noch löschen. Vielleicht funktioniert auch "WHERE false" oder so. Aber das will ich jetzt nicht ausprobieren, um mein Glücksgefühl nicht zu dämpfen!


Anmelden zum Antworten