SDI mit CRecordView
-
Hallo
Ich hatte vor längerem mal eine SDI-Anwendung geschrieben; Basisklasse war CListView. Ich konnte dann in OnCreate mit:
CListCtrl &m_list=GetListCtrl();...auf die Liste zugreifen, und entsprechend verändern, also z.B. Spalten hinzufügen.
Ich wollte das Programm jetzt neu schreiben, und zwar mit Anbindung an eine ODBC-Datenbank (Access). Die Anbindung habe ich hinbekommen, aber ich bekomme keinen Zugriff auf die Liste. Basisklasse ist jetzt natürlich CRecordView. Unterstützt das keine Listenansicht?
Beim compilieren bekomm ich bei obiger Zeile die Meldung, "GetListCtrl' : nichtdeklarierter Bezeichner".Wie kann ich das denn jetzt machen? Muss ich mir eine Klasse CListView ableiten?? Wie mache ich dann den Zugriff auf die Datenbank?
-
naja du machst das ganze ja in einem dialog nehm ich mal an.
in dem dialog fragst du ja unteranderem die datenbank nach ihrem inhalt ab.die abfrage des inhaltes der datenbank machst du ja hoffe ich in einer eigenen Classe die von der CRecordset Klasse abgeleitet wird.
in der CListCtrl worann ja das ListenElement gebunden ist findest du ja die function GetListCtrl.
beide klassen vereinst du nun im Hauptdialog.
dort wo du die liste erstellen willst, brüfst du die datenbank auf einträge.
wenn du nun einen eintrag in der datenbank gefunden hast fügst du diesen als element der liste hinzu. das spiele machst du dann solange wie die schleife einträge in der datenbank findet.
-
Hallo
...danke für die schnelle Antwort, aber

Das ist jetzt wieder eine SDI-Anwendung; Basisklasse ist dann natürlich CRecordView. Ich kann so halt nicht die Liste initialisieren, wie in dem alten Programm, wo die Basisklasse CListView war.
Ich möchte halt die komplette Datenbank auslesen (jeder Eintrag hat 7 Positionen), und bräuchte deshalb Zugriff auf ein Listenfeld, wo ich 7 Spalten erzeugen kann.
Problem ist wie gesagt, das ich nicht mit "CListCtrl &m_list=GetListCtrl();
" die Liste erstellen kann, weil CRecordView das anscheinend nicht unterstützt.Oder mache ich generell was falsch??

-
warum machst du es nicht über CListView anstatt mit CRecordView. du willst das in einer liste erstellt haben ich versteh nicht was du mit der CRecordView willst, wenn du es in einer liste darstellen willst.
beim erstellen der liste brauchst du dann ne classe die dir die datenbank auslist und du je nach anzahl halt die liste erweiterst (CRecordset)
LowFly
-
Hallo!
Also, das wie LowFly vorschlägt ist aufgrund deiner Vorkenntnisse ein guter Ansatz.
CRecordView ist auch nur ein FormView und die Datenbankunterstützung brauchst du anders als der es bereitstellt.Mach einen Listview und lade die Daten per CRecordsetklasse in der OnInitialUpdate.

-
Hallo
...das habe ich jetzt gemacht. Wenn ich dann die Klasse CRecordSet nachträglich dem Projekt hinzufüge, bekomme ich 14 Fehlermeldungen.

...error C2504: 'CRecordset' : Basisklasse undefiniert
...error C2629: 'class CData (' unerwartet
...error C2238: Unerwartete(s) Token vor ';'
...error C2061: Syntaxfehler : Bezeichner 'CFieldExchange'
...error C2653: 'CRecordset' : Keine Klasse oder Namespace
...error C2065: 'classCRecordset' : nichtdeklarierter Bezeichner
...error C2065: 'CDatabase' : nichtdeklarierter Bezeichner...und so weiter. Habe ich da was vergessen??
-
#include <afxdb.h>
...muss noch in den Header rein. Könnte der Assi ja auch noch erzeugen...
-
Hi
1000 DANK für die schnelle Antwort.

Funktioniert einwandfrei.