CRecordSet Hilfe!!!
-
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 AktualisierenFolgende 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 intint 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 Aktualisierenklappt 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