Tabellen mit CRecordset erstellen, aba wie?



  • Hi,

    ich schreib derzeit an nem Programm, mit dem ich in ne Datenbank eintrage, wann ich an anderen Projecten was geändert hab, welcher Bug beseitigt wurde, ...
    Also praktisch n Historyprogramm basierend auf ner Access-Datenbank (*.mdb)

    Bisher funktioniert es auch alles soweit. Nun möchte ich es nur erweitern, dass ich auch neue Projecte hinzufügen kann.
    Wenn das neue Project ohne Zugehörigkeit zu anderen is, soll die History in eine neue Tabelle geschrieben werden. Tabellennamen, Versionsnummer, ... sin schon in anderen Tabellen untergebracht.

    Nur wie erstell ich eine neue Tabelle für meine History? Komm ich da mit CRecordset weiter, oder muss ich doch noch auf was anderes ausweichen?

    LG
    Anti



  • versuch es mit CDatabase, damit kannst du direkt SQL-Befehle absetzen. 🙂



  • Wie schon geschrieben wurde kannst du über CDatabase SQL Statements ausführen, z.B. CREATE TABLE usw.

    Üblicherweise macht man das aber garnicht so, wieso willst du für jedes Projekt eine eigene Tabelle?
    Eher schon

    Projekte
        Projekt_ID INT NOT NULL PRIMARY KEY IDENTITY(1,1)
        Projekt_Name NVARCHAR(100)
        ...
    
    Projekt_Log
        Projekt_ID INT NOT NULL
        ...
    

    Die History steht dabei für alle Projekte in Projekt_Log. Wenn du nur die Daten von einem oder ein paar Projekten sehen willst filterst du einfach, also "SELECT ... FROM ProjektLog WHERE Projekt_ID = 123" oder "... WHERE Projekt_ID IN (123, 124, 125)".



  • Mit CDatabase is n guter Vorschlag von euch beiden. Werd ich mich mal reinversetzen und sehen, dass ich n richtiges SQLStatement zusammenbekomm.
    Mit mehreren Tabellen dachte ich mir so.

    Bsp.:
    Ich programmiere für Win98. Dann kommen alle kleinen Teilprojekte dazu in die Historytabelle zu Win98.
    Fange ich jetz aba mit der Programmierung von Win2000 an, wäre es doch besser, dafür ne eigene Tabelle zu machen.

    So war zumindest mein Gedanke, um es wenigstens etwas zu strukturieren ^^


  • Mod

    Der Datenbank ist es egal ob es Win98 oder Windows 2000 ist.

    Ich würde nur dann neue Tabellen anlegen, wenn sich deren Struktur unterscheidet, alles andere würde ich immer in einer Datenbank machn und entsprechende Indexe setzen.



  • Bin jetz auf ein neues Problem gestoßen...
    Und zwar hab ich mir überlegt, ich erstelle für die History-Tabelle ein Template, in dem die Spalten und Eigenschaften(Primärschlüssel, Standardwert, Eingabe erforderlich, Indiziert, ...) bereits gesetzt sind.
    Nun will ich das Template einfach in den neuen Tabellennamen umkopieren. Dabei werden die Eigenschaften der Tabellenspalten nicht übernommen.

    CString strSQLStatement,
                strHistoryTabName = "t_NewTable";
        CDatabase *oNewHistoryTab = GetDatabase();
    
        strSQLStatement.Format("SELECT * INTO %s FROM %s", strHistoryTabName, t_HistoryTemplate);
    
        oNewHistoryTab->ExecuteSQL(strSQLStatement);
    

    Habt ihr dafür noch ne Idee, oder bin ich jetz hoffnungslos verloren? 😕



  • Ich kenne keinen SQL Befehl mit dem man Tabellen kopieren kann. SELECT INTO ist was anderes, daher werden auch keine Constraints, Indexe, Defaults etc. übernommen.

    Vorschlag:

    1. Verwende ein "gescheites" Datenformat (bloss eine Tabelle für alle Projekt-Logs zusammen, siehe ältere Postings)
    2. Bau die Datenbank gänzlich mittels DDL Statements auf. Die Syntax hängt leider stark von der Datenbank ab, aber dann kannst du einfach eine C++ Funktion machen die dir eine neue Tabelle für ein Projekt-Log anlegt.
      Mit T-SQL (MS SQL Server) könnte ich dir hierbei helfen, mit Access kann ich nicht so gut, und mag ich schon garnicht 🙂


  • Schade, dass das mit dem Tabelle kopieren nich geht.
    Hab mich jetz aba für eine große History-Tabelle entschieden, wie von vielen hier so hoch angepriesen & ich glaub, ich kann mich damit ganz gut anfreunden 😃
    Erspart mir ja so auch einiges an Arbeit :p

    Danke für Eure Hilfe 👍
    Werd gern wieder drauf zurückkommen, wenn wieder mal was is 🙄 😃

    LG
    Anti


Anmelden zum Antworten