String zerteilen / aufsplitten



  • Möglicherweise mag er das INSERT direkt im Open-Befehl nicht. Laut MSDN kannste bei CRecordset::Open nur ein SELECT-Statement mitschicken.



  • Ich hab das jetzt nicht mehr so präsent, aber kann man bei forwardonly überhaupt ein INSERT ausführen?



  • tagchen...
    also habe jetzt auch die spaltennamen nochmal mit hinzugefügt, trotzdem kein erfolg.
    desweiteren habe ich das forwardonly ersetzt:
    dynaset, snapshot, forwardOnly, dynamic
    funktioniert aber auch nicht. bzw bei dynaset kommt, das der treiber nicht unterstützt wird...

    irgendwie komm ich hier absolut nicht weiter, und weiß nicht was ich noch machen kann..
    hoffe ihr könnt helfen und bedanke mich schonmal
    thx a lot
    cu bartholomeus



  • Hallo,
    warum glaubst du das daten[0] in die doppelten hochkommas muessen?
    Hast versucht die mal weg zu nehmen, so das nur die Variable steht, also in den einfachen hochkommas? 😕
    Versuchs mal ohne:

    //INSERT INTO customer VALUES ('"+daten[0]+"','"+daten[1]+",...);
    INSERT INTO customer VALUES ('+daten[0]+','+daten[1]+',...);
    

    lg



  • ja das habe ich auch schon gemacht. funktioniert nicht. das mit den Hochkommas oder anführungszeichen habe ich versehentlich aus php übernommen, da das eigentlich mein gebiet ist.. naja..

    ich habe es anders gemacht aber immer noch einen fehler:

    CSaugenSet rs; 
    rs.Open(CRecordset::snapshot,NULL,CRecordset::appendOnly); 
    
    rs.AddNew();
    rs.m_c_id = daten[1];
    rs.m_c_vorname = daten[1];
    rs.m_c_nachname=daten[2];
    rs.m_c_strasse = daten[3];
    rs.m_c_hnr=daten[4];
    rs.m_c_plz=daten[5];
    rs.m_c_ort=daten[6];
    rs.m_c_telefon=daten[7];
    rs.m_c_telefax=daten[8];
    rs.m_c_email=daten[9];
    rs.m_c_land=daten[10];
    rs.m_c_bank=daten[11];
    rs.m_c_konto=daten[12];
    rs.m_c_blz=daten[13];
    rs.m_l_user=daten[14];
    rs.Update();
    

    habe es mit snapshot versucht zu öffnen. dabei kommt folgende fehlermeldung:
    "Datensatzgruppe kann nur gelesen werden"

    wie bekomm ich das weg???
    danke nochmal... und sorry das ich soviel nerve...



  • Spendier der Tabelle doch mal einen Primärschlüssel.



  • na hab ich doch.... und zwar c_id...



  • MSDN:
    CRecordset::appendOnly Do not allow Edit or Delete on the recordset. Allow AddNew only. This option is mutually exclusive with CRecordset::readOnly.
    Vielleicht funktioniert ja
    CRecordset::none No options set. This parameter value is mutually exclusive with all other values. By default, the recordset can be updated with Edit or Delete and allows appending new records with AddNew. Updatability depends on the data source as well as on the nOpenType option you specify.



  • mal SQL-Nachhilfe geben^^

    Die Angabe der Spalten kannst du weglassen, wenn du alle füllst. Wenn du aber nur bestimmte Spalten einer Zeile hinzufügen willst, dann musst dem System natürlich mitteilen welche.

    So CRecordset ist grundsätzlich dazu da, um Daten aus der Datenbank zu holen. Daher ist ein INSERT da fehl am Platze. ALlerdings funktioniert es(Leider), wenn nach dem SELECT-Statement noch nen INSERT steht. Generell werden alle noch dranhängenden SQL-Befehle ausgeführt im Recordset-Open.

    Wenn du SQL ausführen willst, welches keine Daten zurück liefert, dann benutzt man CDatabase::ExecuteSQL. Dort kann dann das INSERT rein.



  • tagchen...
    also danke erstmal für eure hilfe und mühe.
    habe es jetzt endlich gelöst.

    ich realisiere ja alles mit der Crecordset klasse. Habe meine DB und spreche 4 tabellen an. In eine der tabellen will ich daten einfügen. So geht das aber nicht mit Crecordset. so wie ich es gelesen und verstanden habe, erwartet Crecordset für alle angesprochenen tabellen irgendwelche abfrage oder routinen oder sonstiges. sobald ich aber nur diese eine tabelle meiner db anspreche und damit den datenaustausch vornehme klappt alles wunderbar.
    auf jedenfalls gehts so...

    THX a lot
    cu bartholomeus



  • Du hast ein Recordset über 4 Tabellen?
    Ahja, klar dann kannst du nur lesen, das ist dann nämlich ein View. 😉



  • tagchen...

    achso... gut... und wie bekomm ich das hin, dass ich auf mehrere tabellen zugreife?
    bzw mein problem ist zu zeit: ich habe ne online db und ne offline db und möchte ein datenaustausch durchführen. habe das gerade mittels einer txt datei realisert und 2 programmen.. kann man das eigentlich auch alles in einem programm vereinbaren? bzw ist es möglich in einem programm zwei verschiedene datenbanken (sql server) anzusprechen?
    muss dazu sagen, bin blutiger anfänger auf dem gebiet.
    ich danke schonmal!
    thx a lot.
    cu bartholomeus



  • Klar kannst du mehrere ansprechen. Es gibt ja keine Beschränkung auf ein CRecordset-Objekt. Du kannst ja mehrere anlegen.
    Pro Tabelle sollte man ein Recordset nehmen, zumindest wenn du ne eigene Klasse ableitest, ansonsten halt JOINS usw per SELECT entsprechend zusammen basteln.



  • Hi!

    Mach doch mal ne zweite (oder noch mehr) von CRecordset abgeleitete Klasse.
    Die einzelnen Klassen können auf völlig verschiedene Tabellen zugreifen, aber auch unterschiedliche Datenbanken auf verschiedenen Servern sind möglich. 🙂

    Du wirst beim Erstellen der Klasse ja gefragt. (Und später ist es auch änderbar.)

    Wenn du schreiben können willst, gilt: 1 Recordset pro Tabelle.


Anmelden zum Antworten