CRecordSet Hilfe!!!



  • Hi.

    Danke für den Link.

    Allerdings ist es noch nicht ganz Verständlich!
    Hier:
    Bei Punkt 5.5 Hat er eine Methode erstellt die Heist Suche!
    Der Methoder übergebe ich Parameter als ein String, deiser String soll ein Spaltennamen sein die, die Methode finde soll.
    Dann komm: if ((m_strBezeichnung == strBezeichnung) && (!IsEOF()))
    Ich verstehe nicht was und woher diese "m_strBezeichnung" ist oder woher es kommt!
    Gibt es irgendeine Lösung dass ich einfach sagenn kann , dass ich Spalte Nr. 2 in der Zeile Nr. 10 ändern möchte???
    Das wäre natrlich die beste Lösung.



  • fortsetzung vom anderen thread

    hmmm das ist nicht so einfach zu erklären,

    hab da grad wieder was gefunde im netzt
    Visual C++ 6 in 21 Tagen is ne sehr gute lektüre, hat mir auch gehelft 😉
    lies dir bitt mal das kapitel Tag 14 Daten aus ODBC- Datenbanken abrufen durch, wenn du dann noch fragen hast meld dich wieder dann kann man besser auf die fragen eingehn, wenn da mehr code und mehr versändniss deiner seits da ist 😉



  • Hi.
    Dankeschön es hat sehr gut geklappt bis auf eine Sache!

    Bei dem String klappt es sehr gut! Hier schau an->

    CString cZ="Hans";
    m_pnrs->MoveFirst();
    m_pnrs->Edit();
    m_pnrs->m_Artikelname=cZ;
    //m_Artikelname ist von Datentyp CString
    m_pnrs->Update();
    

    Bei dem "long" allerdings nicht, obwohl ich es Kaste
    So sieht es dan aus:

    CString cZ="1234";
    long nY; //long variable
    m_pnrs->MoveFirst(); //ich will erste Zeile
    m_pnrs->Edit();
    nY=atol(cZ); //Hier Casten von CString to long
    m_pnrs->m_Artikel_Nr=nY; //hier eintragen
    m_pnrs->Update(); //Hier Aktualisieren
    

    Folgende Meldung erscheint: Feld konnte nicht Aktualisiert werden!
    Verstehe nicht warum hmmmm!



  • bist du 100% sicher das das Feld in der Accessdatenbank vom Typ long ist??
    wenn das Feld in der Accessdatenbank nen anderen typ hat haut das nämlich nicht hin.

    versuch das doch mal mit int warum muss es long sein??

    NEW EDIT:
    für ne Nr mit 123456 brauchst du auch kein long da reicht int

    int geht von -2,147,483,648 bis 2,147,483,647 denke das ist ausreichend



  • HI

    Ja da bin ich 100% sicher. Auch wenn ich da einfach so eingebe:

    m_pnrs->MoveFirst(); //ich will erste Zeile
    m_pnrs->Edit();
    m_pnrs->m_Artikel_Nr=12345; //hier eintragen
    m_pnrs->Update(); //Hier Aktualisieren
    

    klappt es nicht!

    Hier sind die Ganze Variablen Schau an:

    class CNordWindRecordset : public CRecordset
    {
    public:
    	CNordWindRecordset(CDatabase* pDatabase = NULL);
    	DECLARE_DYNAMIC(CNordWindRecordset)
    
    // Field/Param Data
    	//{{AFX_FIELD(CNordWindRecordset, CRecordset)
    	long	m_Artikel_Nr; // <------ Diese Variable will ich Updaten
    	CString	m_Artikelname;
    	long	m_Lieferanten_Nr;
    	long	m_Kategorie_Nr;
    	CString	m_Liefereinheit;
    	CString	m_Einzelpreis;
    	int		m_Lagerbestand;
    	int		m_BestellteEinheiten;
    	int		m_Mindestbestand;
    	BOOL	m_Auslaufartikel;
    	//}}AFX_FIELD
    
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CNordWindRecordset)
    	public:
    	virtual CString GetDefaultConnect();    // Default connection string
    	virtual CString GetDefaultSQL();    // Default SQL for Recordset
    	virtual void DoFieldExchange(CFieldExchange* pFX);  // RFX support
    	//}}AFX_VIRTUAL
    
    // Implementation
    #ifdef _DEBUG
    	virtual void AssertValid() const;
    	virtual void Dump(CDumpContext& dc) const;
    #endif
    };
    


  • ähm fällt mir jetzt erst auf, du machst das wenn du schon selbst dafür sorgst das du die variablen belegst, schon so oder

    m_pnrs->MoveFirst();
    m_pnrs->Edit();
    m_pnrs->m_Artikel_Nr = 1213; 
    m_pnrs->m_Artikelname = "Hosenknopf";
    m_pnrs->m_Lieferanten_Nr = 5;
    m_pnrs->m_Kategorie_Nr = 2;
    m_pnrs->m_Liefereinheit = "blub";
    m_pnrs->m_Einzelpreis = "Unbezahlbar";
    m_pnrs->m_Lagerbestand = 5;
    m_pnrs->m_BestellteEinheiten = 2;
    m_pnrs->m_Mindestbestand = 1;
    m_pnrs->m_Auslaufartikel = TRUE;
    m_pnrs->Update();
    

    auch frag ich mich gerade ob du die variablen mit all den steuerelementen verbunden hast weil dann müstest du nicht casten sowie es in Abbildung 14.7 beschrieben wird



  • Ja ich habe Sie angebunden, das habe ich nachgeschaut. Auserdem der Wizzard Assistent macht es ja Automatisch.

    Da steht beid er Variable "m_Artikel_Nr" im Wizzard Assisten "Datenquelle Integer an Feld long binden". Also ist sie auch an Long anbeunden.
    Komischer Weise klappt es nicht.

    Kann es sein dass die "m_Artikel_Nr Spalte" gesperrt ist oder so? So dass man diese Nicht ändern kann? Weil die Variable "m_Lieferanten_Nr" ist auch von Bool und diese Kann ich updaten ohne Problem! Auch die Varibale "m_Kategorie_Nr" kann ich ruhig updaten, klappt Wunderbar.



  • Ääähm Sorry!

    Ich meine dass die variable "m_Lieferanten_Nr" auch von long ist und ich kann diese ohne Probleme ändern. Warum geht es den nicht bei der "m_Artikel_Nr" ???



  • ist die m_Artikel_Nr evtl die erste spalte in der Datenbank, die sich Primäreschlüßel nennt??
    also die die sich automatisch erweitert wenn du einen neuen datensatz erstellst!!

    nein die läst sich nicht abdaten sofern du die datenbank mit "Assistent soll Primäreschlüßel festlegen" erstellt hast.

    wenn du dich selbst darum kümmern willst dann must du beim erstellen der datenbank im Tabelen Assistenten "Primäreschlüßel selbst festlegen" anklicken. aber schon klar das du dann auch dafür sorge tragen must immer eine neue Spalte anzulegen wenn die letzte beschrieben wurde.



  • Hi.

    Ja das ist die erste Spalte in der Tabelle 🙂
    Ich glaube auch dass sie als Primärschlüssel festgelegt ist 🙂
    Kann man diese dann nicht Updaten ne wenn sie als Primärschlüsel und Ato_Increment festgelegt????
    😃 😃



  • wie gesagt wenn du beim erstellen der datenbank im Tabelen Assistenten festgelegt hast das der "Assistent den Primäreschlüßel festlegen soll" dann hast du keine chance dieses Feld zu aktualisieren da es dann schreibgeschützt ist.

    kannst dann höchstens nochmal die datenbank neu erstellen und im Tabelen Assistenten festlegen das du den Primärschlüßel festlegst, dann ist das Feld nicht schreibgeschütz. aber wie gesagt dann hast du wieder mehr arbeit, weil du kucken must das du immer rechtzeitig ein neues feld erstellst.

    wenn du die gleiche datenbank nochmal neu erstellst mit gleichen spaltenamen, typen, dateinamen & datenbankname dann ist es kein problem die alte datenbank durch die neue zu überschreiben. die wird dann einfach von deinem prog anerkannt.



  • Jo das ist mir schon klar 🙂

    Ich danke dir für deine Hilfe werde mich erstmal weiter Beschäftigen und probiere alle Felder zu aktulisieren, kann ja sein dass da noch ein Fehler oder so auftritt also nicht diesen Forum schließen bis übermorgen oder so :)!
    Danke schoen und bis denn 😉


Anmelden zum Antworten