Datensatz in andere DB verschieben



  • Hallo Leute,

    Ich habe ein Problem. Und zwar arbeite ich mit Recordset's und DAO. Ich habe ein kleines Prog geschrieben das bisher nur eine Abfrage auf eine Datenbank startet und anschließen einen bestimmten Wert zurück gibt. Doch nun soll ich die ausgewählten Datensätze in eine andere Datenbank verchieben. Da ich schon ewig nichts mehr in C++ gemacht habe, komme ich einfach nicht weiter. Kann mir jemand sagen wie ich ein geöffnetes Recordset von der einen in die andere Datenbank verschieben kann? Ein Ansatz würde mir auch schon helfen.

    Dank im vorraus.

    Mfg Tommy



  • Also ich wüsste jetzt nicht wie man nen gesamtes Recordset mal eben so "verschieben kann", zudem auch noch von einer Datenbank in eine andere.

    Du kannst dein Recordset durchlaufen, und dann für jeden Datensatz einen neuen Datensatz in der anderen Datenbank anlegen und die Werte einfügen (RecordSet.AddNew() oder direkt nen SQL-Insert schreiben).

    Also 2 Recordsets (Quelle / Ziel) und dann mit CRecordset::AddNew()
    oder 1 Recordset und dann nen Insert (CDatabase::ExecuteSQL)

    wäre so mein Vorschlag.

    Musst du öfters das gleiche kopieren? Wie wär es mit nem Link zwischen den beiden DBs?



  • Ohje, dann wird des doch nicht so einfach :-)!
    Ein Link würde mir nicht viel bringen da ich die ganze Umkopiererei nur mache damit die Datenbank nicht zu groß wird.Aber wenn mann kein komplettes Recorset verschieben kann, muss ich halt die ganzen daten "von hand" kopieren. Okay falls noch jemand eine bessere Variante kennt dann meldet euch bitte. Ansonsten muss ich halt den vorgeschlagenen Weg gehen :-|.



  • Du kannst auch je nach DBMS mit SQL-Befehlen arbeiten. Beim SQL-Server habe ich gerade BCP für sowas entdeckt. 🙂



  • Also was BCP ist weiss ich noch nicht / werde mich aber mal schlau machen. Wenn dass ganze mit SQl funktioniert wäre das ja supper :-)! Ich benutze eine Access DB und DAO.



  • Bei Access wirst du das BCP vermutlich umsonst suchen - das gehört zum Microsoft SQL-Server. ⚠
    Mach es am besten so, wie Tow-B geschrieben hat. 🙂

    Du kannst es dir ja ein wenig einfacher machen, indem du deinen Recordsets einen Zuweisungsoperator spendierst. 🙂
    Oder versuch mal, das GetDefaultConnect nach dem Laden auf die Zieldatenbank umzubiegen und dann einfach ein Update zu machen - vielleicht geht es ja. 😃



  • Tommy005 schrieb:

    ...Ein Link würde mir nicht viel bringen da ich die ganze Umkopiererei nur mache damit die Datenbank nicht zu groß wird....

    Versteh ich nicht 😕
    Ein Link ist hier doch optimal! Dann kannst du ganz easy ein einziges Statement abschicken um den Kram rüberzuschicken.

    Unter Oracle/SQL etwa so (Dürfte unter standard SQL nicht viel anders sein)

    insert into [ziel-schema].tabelle@[linkname] (select * from [deinetabelle] where [bedingung])
    


  • @cpp_junky: Genau so mein ich das, und ich kenn es auch von Oracle 😉

    Aber wenn du sowieso 2 Access-Datenbanken hast, dann kannst du doch in der einen einfach ne Verknüpfung auf die andere legen (sogar direkt auf eine Tabelle!) dann brauchst du nur noch ein "insert as select" von einer Tabelle in die andere. Durch die Verknüpfung wandern die Daten dann automatisch in die andere Access-DB.

    Ist ja eigentlich nicht viel anders als 2DBs zu linken, man linkt quasi nur die Tabelle.

    mfg
    tobi



  • Zwischen zwei Access-DB's brauchste noch nicht mal eine Verknüpfung, Du kannst einfach von einer in eine andere DB INSERTen, zum Beispiel so:

    INSERT INTO Tabelle1 IN 'Pfad_plus_dateiname.mdb' SELECT column1, column2, column3... FROM tabelle2 WHERE blabla...
    

    Gruß T. 🙂



  • Cool, wieder was gelernt, danke 😋



  • Zwischen zwei Access-DB's brauchste noch nicht mal eine Verknüpfung, Du kannst einfach von einer in eine andere DB INSERTen, zum Beispiel so:

    C/C++ Code:
    INSERT INTO Tabelle1 IN 'Pfad_plus_dateiname.mdb' SELECT column1, column2, column3... FROM tabelle2 WHERE blabla...

    Gruß T.

    Dass heist ich bräuchte dann nur ein recordset dem ich dann diesen String übergeben oder ? ich werds gleich mal versuchen!

    @All : danke für eure bissherige hilfe ! hab jetzt wenigstens ein paar anregungen :-)! ich melde mich dann wenn ich mein Prob gelöst habe .


Anmelden zum Antworten