Problem mit CString
-
Wenns am Anfang mal funktioniert hat und nun nicht mehr obwohl du nichts mehr dran geändert hast würde ich mal überprüfen ob du vielleicht irgendwo einer Variablen Char oder TCHAR zuviel speicher gegeben hast.
Am besten deklariert man die Dinger immer so damit Dynamisch der Speicher verwendet wird:TCHAR szBuffer[256]; memset(szBuffer,0,sizeof(szBuffer));Ich kann es mir wirklich nicht erklären ich kann mir nur eins vorstellen das dein CString zuviel deiner Daten intuss hat d.h. seine Speicherkapazität überschritten wird das ist aber in dem Fall glaube ich nicht so. Ich denke mal soviel Daten hast du nicht.
Bei mir tauchen solche Sachen erst dann auf, wenn ich Speicher unnötig verpulvere.Hellsgore
-
Oder so:
char szBuffer[256]={0};
-
Funktioniert leider auch nicht.
Aber ich habe etwas herrausgefunden.v_detail += "System "+did+":\r\n"; v_detail += "Computername: "; v_detail += returndb3; v_detail += "\r\nIP Adresse: "; v_detail += returndb4; v_detail += "\r\nSeriennummer: "; v_detail += returndb2; v_detail += "\r\nGeräte Typ: "; v_detail += returndb8; v_detail += "\r\nRamgröße: "; v_detail += returndb5; v_detail += "\r\nBetriebssystem: "; v_detail += returndb6; v_detail += "\r\nServicepack: "; v_detail += returndb7; loaddetailcpu(ID);//Funktioniert im ersten lauf loaddetailloc(returndb10);//Funktioniert im ersten lauf loaddetailher(returndb9);//Funktioniert im ersten lauf loaddetailbem(ID);//Funktioniert im ersten lauf loaddetailmas(ID); //Funktioniert im ersten lauf //Funktioniert auch im ersten lauf nicht??? v_detail += "\r\n"; //Funktioniert wieder??? UpdateData(false);Ich glaub ich dreh am rad

-
Kann es sein das returndb7 0 ist bzw. einer der Werte die angefügt werden sollen '\0' sind ?
-
jo, könnte sehr gut sein, dass eine deiner Funktionen ein '\0' in den String schreibt. Da CString intern ein NULLterminiertes Array verwendet ist der String für CString dann dort natürlich zu Ende.
-
Leider nein. Das wird bei der Eingabe der Daten kontrolliert.
Kein wert darf == 0 oder == NULL sein.
Mal ein Auszug:
*
System 0:
Computername: RECHNERNAME2
IP Adresse: 123.456.789.0
Seriennummer: 123452
Geräte Typ: Workstation
Ramgröße: 128
Betriebssystem: Windows 2000
Servicepack: SP 3
CPU Typ: Intel Pentium(R) III
CPU Speed: 333
CPU Anzahl: 1
Location: Buxdehude
Hersteller: 123
Bemerkung: Bemerkung
Massenspeicher Typ: Diskettenlaufwerk
Massenspeicher Größe: 1.44 MB
Massenspeicher Anzahl: 1
Massenspeicher Typ: CD-Rom Laufwerk
Massenspeicher Größe: 700 MB
*Folgendes ist aber nicht mit drinn:
v_detail += "\r\n";
-
zeig doch mal den Code der funktion loaddetailsmas
-
CString soll ja bis zu 2.000.000 Zeichen oder so in der Grössenordnung verkraften, aber ich hatte auch mal so ein Problem, bei dem ich ständig mit += einen CString verlängert habe. Das hat aber ziemlich schnell schon nicht mehr funktioniert. So in der Nähe von 250 Zeichen war Schluss, da hat er, warum auch immer, nix mehr angehängt.
Mit strcpy(...) und dann vielen strcat(...) anstatt += hat es dann aber doch geklappt.
-
void ChvDlg::loaddetailmas(CString ID) { CString returndb1, returndb2, returndb3; CString SQLString; CDatabase db; CString connectstring = "DSN=myconnect;UID=****;PWD=****"; TRY { bool erg; erg = db.OpenEx(connectstring,CDatabase::noOdbcDialog); if(erg == true) { CRecordset recset( &db ); SQLString = "SELECT MTyp AS MT, MGroesse AS MG, MAnzahl AS MA FROM HMassenspeicher WHERE CID ="; SQLString += ID; SQLString += ";"; recset.Open(CRecordset::forwardOnly,SQLString,CRecordset::readOnly); while( !recset.IsEOF() ) { recset.GetFieldValue("MT",returndb1); recset.GetFieldValue("MG",returndb2); recset.GetFieldValue("MA",returndb3); v_detail += "\r\nMassenspeicher Typ: "; v_detail += returndb1; v_detail += "\r\nMassenspeicher Größe: "; v_detail += returndb2; v_detail += "\r\nMassenspeicher Anzahl: "; v_detail += returndb3; recset.MoveNext(); } db.Close(); } } CATCH(CDBException, e) { CString error = "Folgender Fehler ist aufgetreten:\n"; error = e->m_strError; MessageBox(error,"Error",MB_OK); } END_CATCH; }
-
*aaaaaahhhhhhhrrrrrrrrrgggggggg* 
Nachdem ich in der DB die werte von float auf varchar umgestellt habe funktioniert es wieder?????
*aaaaaahhhhhhhrrrrrrrrrgggggggg* 
@ALL: Danke
-
ähm?
float-werte? Und dann liest du sie in nen CString aus ?!
-
Ganz ehrlich?
Mir ist im moment scheiss egal was ich auslese, hauptsache es funktioniert.
Ich muss Heute die ersten ergebnisse abgeben.
Um alles weitere kann ich mir später sorgen machen.MFG
RS