ComboBox
-
hi hellsgore
danke erstmal für deine Antwort,
ja die Seite kenn ich schon
Also ich benutze Visual C++ 6 und ADO DtenbankzugriffDie Sache ist so, wenn ich ein Combobox erstellt habe, kann ich klar mit diesem Befehl
m_ctlComboName.AddString("blabla"); in der Funktion OnInitDialog
was in der Combobox anzeigen lassenNun habe ich aber in meiner Datenbank (Access) 4 Datensätze drin, sogenannte Stammdaten,die man immer auswählen kann.
Bloß weiß ich echt nicht wie man das machtVerbinden und Daten abrufen ist ja im Tutorial 21 Tage beschrieben, wo muss ich das einfügen? Bei der OnInitDialog() Funktion
HAbe echt kein Plan, bitte helft mir
danke schön
-
OnInit klingt doch gut.

Es ist doch eine "Initialisierung" der Combobox. *eselsbrückebau*
-
hi
was meinst du damit?
Was muss ich da reinschreiben, kannst du mir da helfen?
merci
-
Da ich von DAO keine Ahnung habe, nicht wirklich.
Hier mal ein Versuch in Pseudocode:
Laden Daten aus DB
solange noch Daten
Füge String an Combobox an
Nächster DatensatzFür CRecordset hätte ich auch Quelltext...
-
aha
ich habe auch wenig Ahnung von ADO
schade egal,trotzdem danke
-
Hier mal der Quelltext für ODBC, musste nur eben umbauen vermute ich.
CBankenSet BankenSet; // Daten aus der Datenbank holen BankenSet.Open(); if (BankenSet.IsBOF()) { // Hab ich so kopiert, verhindert Fehler } else { while(!BankenSet.IsEOF()) { // Schleife über die Datensätze m_cbxBlz.AddString(BankenSet.GetBlz()); BankenSet.MoveNext(); // Nächster } }
-
Nach Open ist doch automatisch IsBOF, vorausgesetzt es sind Daten vorhanden und er rennt in den if-Zweig. Wenn keine da sind, ist IsEOF und er rennt in den else-Zweig...
-
Deswegen mein Kommentar - ich hatte das mal gelösch und prompt ein Problem. Ich warte nun also händeringend auf das Buch was hier wer in Arbeit hat um dann endlich mehr zu wissen als VC++ in 21 Tagen vermittelt.

Die Quellen sind sehr dürftig, was Datenbankzugriff angeht.

-
danke erstmal
für was steht "banken"? ist das die Datenbanktabelle? Muss das in die OnInitDialog Funktion?Mit dem hier geht das nicht oder :? GetCurSel(), hab ich in der Hilfe gefunden
merci
-
Da wird eine Liste von Banken gefüllt. Das war das kleinste Beispiel, was ich finden konnte.
Was willst du mit GetCurSel? Die Funktion gibt dir zurück, die wievielte Zeile der Combobox markiert ist. Die hat nix mit Füllen zu tun.
-
Achja, in OnInitDialog ist es gut aufgehoben. Oder du machst eine kleine Funktion, die von dort aufgerufen wird, ganz wie du magst.
-
...._T("Provider=MSDASQL.1;Data Source=Adressen");
... = _T("select * from Kunden");m_ptrRs->Open((LPCTSTR)m_strCmdText, (LPCTSTR)m_strConnection,
adOpenDynamic, adLockOptimistic, adCmdUnknown)muss ich dann dass nicht mehr angeben um die Tabelle zu öffnen
-
Das kann ich dir nicht sagen. Ich gebe das nicht an, weil es durch zwei Funktionen in CRecordset schon erledigt wird.
Denk bitte daran, dass ich die Anbindung über ODBC und nicht DAO habe.
Ich würde es einfach da stehen lassen, solange es geht und dir nicht jemand erklärt, wie es anders geht.
(Siehe mein "unnützes" if im anderen Beitrag.)
-
sorry wen ich jetzt so blöd frage aber ich hab jetzt mal den code in die OnInitDialog Funkt. reingeschrieben, Anstatt Banken habe ich meine Datenbanktabelle genommen
[code]CAnlassSet AnlassSet;
// Daten aus der Datenbank holen
AnlassSet.Open();if (AnlassSet.IsBOF())
{ // Hab ich so kopiert, verhindert Fehler}
else
{
while(!AnlassSet.IsEOF())
{ // Schleife über die Datensätze
m_ctlComboAnlass.AddString(AnlassSet.GetAnlass());
AnlassSet.MoveNext(); // Nächster
}
}jetzt kommen natürlich Fehlermeldungen
error C2065: 'CAnlassSet' : nichtdeklarierter Bezeichner
AnlassSet' : nichtdeklarierter Bezeichner
Der linke Teil von '.Open' muss eine Klasse/Struktur/Union seinwie muss ich dass noch machen?
danke
-
Das heißt bei dir doch
m_ptrRsoder?
Du musst schon deine Variablentypen verwenden.

-
_RecordsetPtr m_ptrRs;
ja so ist m_ptrRs definiert, au man ich raff dass immer noch nicht
_RecordsetPtr m_ptrRs;[/code]_RecordsetPtr m_ptrRs;
// Daten aus der Datenbank holen
AnlassSet.Open();if (AnlassSet.IsBOF())
{ // Hab ich so kopiert, verhindert Fehler}
else
{
while(!AnlassSet.IsEOF())
{ // Schleife über die Datensätze
m_ctlComboAnlass.AddString(AnlassSet.GetAnlass());
AnlassSet.MoveNext(); // Nächster
}
}und asnstatt AnlassSet steht _RecordsetPtr das jetzt?
-
Du stehst irgendwie noch mit den Codetags auf Kriegsfuß.

m_ptrRs->Open(); //Oder auch das was du vorhin geschrieben hattest: m_ptrRs->Open((LPCTSTR)m_strCmdText, (LPCTSTR)m_strConnection, adOpenDynamic, adLockOptimistic, adCmdUnknown); if (m_ptrRs->IsBOF()) { // Hab ich so kopiert, verhindert Fehler } else { while(!m_ptrRs->IsEOF()) { // Schleife über die Datensätze m_ctlComboAnlass.AddString(m_ptrRs->GetAnlass()); m_ptrRs->MoveNext(); // Nächster } }
-
wie machste dass immer dass der code so aussieht im Fenster ?
dass hab ich nun reinkopiert
m_ptrRs->Open((LPCTSTR)m_strCmdText, (LPCTSTR)m_strConnection,
adOpenDynamic, adLockOptimistic, adCmdUnknown);if (m_ptrRs->IsBOF())
{ // Hab ich so kopiert, verhindert Fehler
}
else
{
while(!m_ptrRs->IsEOF())
{ // Schleife über die Datensätze
m_ctlComboAnlass.AddString(m_ptrRs->GetAnlass());
m_ptrRs->MoveNext(); // Nächster
}
}Jetzt kommt noch der Fehler und wahrscheinlich Folgefehler
error C2039: 'IsBOF' : Ist kein Element von '_Recordset'je mehr ich da rum mach umso tiefer steck ich im Sumpf

-
Unter dem Eingabefeld für Text ist ein Knopf wo "C/C++" drauf steht. Den drückst du, dann fügst du deinen Quelltext ein und dann drückst du noch mal.
Das sieht dann so aus, aber ohne *
[cpp]
//hier kommt dein Quelltext hin.
[/cpp]So, da es mit der Übertragbarkeit von CRecordset zu dem was du da hast sehr hapert, müssen wir mal herausfinden WAS du da hast, damit man mal in die Hilfe schauen kann.
Was ist _Recordset? Das ist ein Datentyp, soweit bin ich. Aber er steht nicht in meiner MSDN. Und in der im Internet sah der Beispielquelltext völlig unbekannt aus, wie Visual Basic.

Ich bin langsam echt ratlos, was du da hast.Die if kannst du auch testweise rauswerfen, aber ob dir das so viel weiter hilft?
m_ptrRs->Open((LPCTSTR)m_strCmdText, (LPCTSTR)m_strConnection, adOpenDynamic, adLockOptimistic, adCmdUnknown); while(!m_ptrRs->IsEOF()) { // Schleife über die Datensätze m_ctlComboAnlass.AddString(m_ptrRs->GetAnlass()); m_ptrRs->MoveNext(); // Nächster }
-
http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/kap15.htm
also ich hab mir von dieser seite mal das beispiel copiert ( nur 3 sachen Nachname vorname alter)
merh kann ich dazu auch nicht sagen , leiderm_ctlComboAnlass.AddString("???");
Das funktionier auch, dann seh ich meiner Combobox wasaber ich wills ja nicht so, aber das hab ich ja alles schon geschrieben
ne leider nicht, geht nicht
error C2039: 'IsEOF' : Ist kein Element von '_Recordset'