Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Probleme mit CRecordset und was ist CString???

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
02.08.2005, 11:24 Uhr
~aline
Gast


Hallo!

Ich möchte mich in C++ mit einer Oracle DB verbinden und bestimmte Sachen auslesen. Das Verbinden klappt schon, das hab ich folgendermaßen gemacht:


Code:
int main()
{

CDatabase db01;

db01.OpenEx("DSN=DB01;UID=user;PWD=passwort",
CDatabase::openReadOnly |
CDatabase::noOdbcDialog );

if(db01.IsOpen() != 0)
cout << "Verbindung zu DB01 hergestellt!" << endl << endl;
else
cout << "Verbinden zu DB01 fehlgeschlagen!" << endl;

...

return 0;
}



Als Header hab ich die <afxdb.h> verwendet.
Jetzt möchte ich mit einem CRecordset Objekt Daten aus einer Tabelle dieser DB auslesen. Allerdings blick ich nicht so ganz durch, wie dieses CRecordset arbeitet. Habs erstmal damit versucht:


Code:
CRecordset rdb01(&db01);

rdb01.Open(CRecordset::forwardOnly, sql, CRecordset::readOnly);

if(rdb01.IsOpen() != 0)
cout << "Recordset geöffnet!" << endl << endl;
else
cout << "Recordset nicht geöffnet!" << endl;



In der Variable sql steht eine SELECT Anweisung (SELECT * FROM Tabelle) und ist vom Typ CString, da mit einem normalen String sonst eine Fehlermeldung kommt. Allerdings verstehe ich nicht wie dieses CString arbeitet, da ich wenn ich davon eine Variable ausgeben möchte sie als Zeiger bahndeln muss (warum eigentlich?) und dann auch nur das 1. Zeichen der Zeichenkette ausgegeben wird.
Was genau unterscheidet denn nun String von CString?

Wie kann ich eigentlich den Inhalt eines bestimmten Felds auslesen. Das SQL dafür ist nicht das Problem, eher die Einbindung in C++. Habs mit GetFieldValue() versucht, aber da ist nix anständiges rausgekommen.

Außerdem stürzt das Programm neuerdings immer beim Öffnen des Recordsets ab und das hat es vorher nicht getan.

Bin also ziemlich ratlos...

Kann mir jemand helfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.08.2005, 12:12 Uhr
Pablo
Supertux
(Operator)


-->
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.08.2005, 13:28 Uhr
~aline
Gast


Alos mittlerweile habe ich schon einen besseren Durchblick als vorhin. Was mir jetzt wirklich noch Probleme macht ist die Sache mit dem CString...

Ich habe das Recordset geöffnet und möchte ein feld in der DB auslösen:


Code:
rdb01.GetFieldValue(0, wert);
tmp = wert



In tmp steht jetz also der Inhalt der 1. Spalte drin. Dummerweise gibt aber eine Variable vom Typ CString immer nur das erste Zeichen wieder aus. Den Rest ignoriert er einfach. jedenfalls bei mir
Wie kann ich denn so eine Variable ausgeben, dass er wirklich die komplette Zeichenkette anzeigt?? Ist das so etwas wie ein Array?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.08.2005, 13:35 Uhr
Tommix




Zitat von ~aline:
Dummerweise gibt aber eine Variable vom Typ CString immer nur das erste Zeichen wieder aus.

Hallo,
CString ist schon für Zeichenketten gedacht. Wei machst Du die Ausgabe?

Gruß, Tommix


Bearbeitung:

Mit cout, sehe ich gerade. Das muß dann so aussehen:

C++:
CString s = "hallöchen";
cout << (const TCHAR*) s << endl;




--
3

Dieser Post wurde am 02.08.2005 um 13:38 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.08.2005, 13:58 Uhr
~aline
Gast


Danke, Tommix, das hat geklappt!

Und schon kommt das neue Problem.... Ich habe jetzt ein zweites Mal GetFieldValue(), allerdings auf eine andere Spalte der gleichen Tabelle. und dann kam folgende Fehlermeldung:

Code:
error C2668: 'GetFieldValue' : Mehrdeutiger Aufruf einer ueberladenen Funktion


Da dachte ich mir, mach ich eben den zweiten Aufruf erstmal weg, aber selbst, nachdem ich das auskommentiert habe kommt immer noch der gleiche Fehler, obwohl die Funktion nur noch einmal im Quelltext vorhanden ist.
Woran kann das jetz liegen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.08.2005, 09:35 Uhr
~aline
Gast



Zitat von Tommix:


C++:
CString s = "hallöchen";
cout << (const TCHAR*) s << endl;




Und wie sieht das dann bei der Eingabe aus? Mit

C++:
cin >> (const TCHAR*) s;


funktioniert es jedenfalls nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.08.2005, 09:56 Uhr
Tommix



Was elegantes fällt mir da jetzt nicht ein. Du kannst std::string nehmen:

C++:
#include "stdafx.h"
#include <iostream>
#include <string>

int main()
{
    CString s;
    std::string tmp;
    std::cin >> tmp;
    s = tmp.c_str();
    return 0;
}



Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.08.2005, 10:01 Uhr
~aline
Gast


Naja, dann kann man sich das mit dem std::string auch sparen.

C++:
cin >> stringvar;
cstringvar = stringvar.c_str();


Klappt auch. Ist das jetzt elegant?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.08.2005, 10:16 Uhr
Tommix




Du hast von meinem Post lediglich ein paar (wesentliche) Zeilen weggelassen. Was sind stringvar und cstringvar denn? std::string- und CString-Instanzen, denk ich mal.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.08.2005, 10:23 Uhr
~aline
Gast


Also du ließt mit dem std::cin eine String Variable ein und danach wandelst du sie mit c_str() in eine CString Variable um. Aber eigentlich kann ich doch dann auch gleich mit cin einen String einlesen und den genauso umwandeln. Dann brauch ich das mit dem std:: nicht machen.

Hab ja extra noch gefragt ob das jetzt so in 2 Zeilen wie ich es habe elegant ist oder nicht.
stringvar ist eine Strin Variable und cstringvar eine CStringvariable. Dachte die Namen wären sprechend Naja, ich soll ja nich so viel denken, sagt man mir immer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: