Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » SQL befehl an Open() übergeben

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 <
000
07.10.2004, 08:03 Uhr
bbatec



Hallo,

ich versuche über die Funktion Open(), von CRecordSet, einen SQL Befehl zu übergeben, ich habe es so wie es in der MSDN steht versucht.
Ich bekomme zur Laufzeit des Programms die Fehlermeldung "Fehler beim abrufen eines Datensatzes!" Der Fehler kommt von der Open()-Funktion.

Hier mein Code:

C++:
void CMaterialAnlegenView::OnBnClickedSucheLieferant()
{
    CTabLieferanten mTabLief;

    mTabLief.Open( CRecordset::snapshot,"SELECT Kontaktperson FROM
    Lieferanten"
,CRecordset::readOnly );
    
    mTabLief.MoveFirst();
    CString strTest=(CString)mTabLief.m_Kontaktperson;
      
    mTabLief.Close();
}

Wenn ich statt Kontaktperson einen * einfüge (für alles) dann bekomme ich keine Fehlermeldung. Sobald ich einen Namen von einer Spalte eingebe bekomme ich die Fehlermeldung.

Muss ich vielleicht etwas in der von CRecordSet abgeleiteten Klasse verändern?
Ich bin langsam am verzweifeln, weil laut der MSDN und paar anderen Nachforschungen sollte es so eigentlich mit dem SQL-Statement funktionieren.

Gruß
bbatec
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.10.2004, 16:00 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, du musst mindestens die felder abrufen die in der CRecordSet-abgeleiteten Basisklasse definiert sind
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.10.2004, 20:49 Uhr
~bbatec
Gast



Zitat von FloSoft:
hi, du musst mindestens die felder abrufen die in der CRecordSet-abgeleiteten Basisklasse definiert sind


Hallo FloSoft,

bei mir sind alle Felder die in der Tabelle auch vorhanden sind in der abgeleiteten Basisklasse
definiert. Heißt das das ich so ein SQL-Befehl wie oben angegeben garnet verwenden kann.
Hier die von CRecordSet abgeleitete Klasse

C++:
CTabLieferanten::CTabLieferanten(CDatabase* pdb)
    : CRecordset(pdb)
{
    m_LieferantenNr = 0;
    m_Lieferantenname = L"";
    m_Anrede = L"";
    m_Kontaktperson = L"";
    m_Suchbegriff1 = L"";
    m_Suchbegriff2 = L"";
    m_Strasse = L"";
    m_Hausnummer = L"";
    m_Postleitzahl = L"";
    m_Ort = L"";
    m_Land = L"";
    m_Region = L"";
    m_Postfach = L"";
    m_Postfach_PLZ = L"";
    m_Std_Komm = L"";
    m_Sprache = L"";
    m_Vorwahl = 0;
    m_Telefonnummer = 0;
    m_Vorwahl_FAX = 0;
    m_Faxnummer = 0;
    m_EmailAdresse = L"";
    m_Internetadresse = L"";
    m_Anmerkungen = L"";
    m_Zahlungsbedingung = L"";
    m_nFields = 24;
    m_nDefaultType = dynaset;
}



und abrufen wollte ich eigentlich nur als Beispiel die Kontaktpersonen (wie im ersten Posting).
Ich hoffe du kannst es mir etwas näher erklären, weil ich sonst den Sinn des (meines) SQL-Befehls mit "SELECT blablabla FROM blublublu " nicht verstehe.

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.10.2004, 21:29 Uhr
bbatec



Hallo FloSoft,

hier noch die Ergänzung zum Posting von vorhin. Dasmeldet der Debuger
in dem Fall abfrage für Anrede, genau das selbe macht er auch bei Kontaktperson.



Zitat von Verfasser:

DBMS: ACCESS
Version: 04.00.0000
ODBC Driver Manager Version: 03.52.0000
Error: fetching row from server.
Fehler in Zeile
Ungültiger Zeichenwert für Konvertierungsangabe. bei Spalte 1
(Anrede)

State:01S01,Native:9,Origin:[Microsoft][ODBC Microsoft Access Driver]
State:2200
5,Native:39,Origin:[Microsoft][ODBC Microsoft Access Driver]

Fehler beim Abruf eines Datensatzes.



Dieser Post wurde am 07.10.2004 um 21:30 Uhr von bbatec editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.10.2004, 21:42 Uhr
bbatec



Hallo ich bins nochmal

wenn ich nach der 1. Spalte Slectiere also

C++:
mTabLief.Open( CRecordset::snapshot,"SELECT LieferantenNr FROM Lieferanten",CRecordset::readOnly );


LieferantenNr steht in der 1. Spalte dann funktioniert es, muss ich dem SQL-Befehl mitgeben in welcher Spalte er selektieren muss?

Gruß

BBATEC
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.10.2004, 15:36 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


probier mal


SQL:

SELECT 0, '', Kontaktperson FROM ...



oder vll hilft ein


SQL:

SELECT Kontaktperson AS Kontaktperson FROM ...


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: