mittelgroße Recordset Frage
-
Statt
if(!Set.IsEOF()) { Set.GetFieldValue("ANZAHL", strAnzahl); //da will ich danach auch noch den 2. Datensatz haben }
einfach
while(!Set.IsEOF()) { Set.GetFieldValue("ANZAHL", strAnzahl); //da will ich danach auch noch den 2. Datensatz haben Set.MoveNext(); }
sollte es sein.
-
*gg* schau mal was ich in der Zeit gemacht hab:
while(!Set.IsEOF()) { Set.GetFieldValue("IO_NIO", strAnzahl); test += strAnzahl; Set.MoveNext(); }
So jetzt aber folgendes
Ich glaub ich steh nicht an der richtige Stelle bzw nicht in der richtigen Tabelle! Ich hab ANZAHL davor schon mal an ner anderen Stelle verwendet und ich glaub darin steht er!
Wie komm ich mit getFieldValue in folgende Tabelle?Set.GetFieldValue("[dbo.#tmp_Auswertung.IO_NIO]", strAnzahl);
So geht es leider nicht!
EDIT: bringt die Meldung
---------------------------
ACRSQL
---------------------------
Ungültiger Feldname oder Feldindex.
---------------------------
OK
---------------------------
-
Das Feld heißt doch ANZAHL und nicht IO_NIO.
-
sorry verwirrend, ich hab es umbenannt da ich vermutet hab dass ich was ganz falsches einlese. In diesem Falle heißt es nun IO_NIO sorry hätte ich wohl erwähnen sollen.
-
AAAAAAAAAAAhhhhh es geht!!
Melde mich nochmal später mit den Ergebnissen.
DANKE DANKE DANKE
-
Also wollte mich ja nochmal mit den Ergebnissen melden, da es mir leider am Freitag nicht mehr gereicht hat hier das Ergebnis:
CString CACRSQLSet::CountTeile(CString Bedingung, int IOTeile) { CString strAnzahl ="0"; CString test =""; CDatabase db; db.Open( _T("ACR"),FALSE,true,_T("ODBC;UID=anyusr;PWD=anyusr"),false); CRecordset Set(&db); if(IOTeile == 0) Set.Open(CRecordset::dynaset , SQL_CNT_ALL_TEILE + Bedingung, CRecordset::readOnly); else { db.ExecuteSQL(SQL_CREATE_TMP); // erzeugt TMP Tabelle db.ExecuteSQL(SQL_FILL_TMP); // füllt TMP Tabelle Set.Open(CRecordset::dynaset , SQL_CNT_IO_NIO_TEILE, CRecordset::readOnly); } if(IOTeile == 2) { while(!Set.IsEOF()) { Set.GetFieldValue("ANZAHL", strAnzahl); test += strAnzahl + " mal Errorcode Nr. "; Set.GetFieldValue("ErrCode",strAnzahl); test += strAnzahl + "\r\n"; Set.MoveNext(); } } else Set.GetFieldValue("ANZAHL", strAnzahl); Set.Close(); if(IOTeile == 1) { db.ExecuteSQL(SQL_DROP_TMP); } if (IOTeile == 2) { db.ExecuteSQL(SQL_DROP_TMP); return test; } return strAnzahl; }
Ich mein die Funktion hatte zu dem Zeitpunkt nicht richtig funktioniert. Aber das noch viel größere Problemwar ich bin in die whileschleife auch bei nem Aufruf rein gelangt bei dem ich es gar nicht wollte
und dadurch hatte ich natürlich immer das falsche Ergebnis drinstehen, da eine ganz andere Funktion mit anderen Ergebnissen rein gekommen ist.
Dann kann ich meine Fehler natürlich nicht finden. Naja aber ich hab es ja geschafftVielen Dank für die Hilfe, denn ohne die Hilfe und vor allem die moralische Uterstützung hätte ich es wahrscheinlich nicht hinbekommen
-
NOch ne kleine Frage vielleicht wie bekomme ich den Feldinhalt als ein int zurück? oder auf jeden Fall mal als Zahlenwert? dieses ewige casten nervt! casten zum rechnen dannzurück zur Ausgabe... wäre schön wenn mir jemand dazu noch was sagen könnte.
Vielen Dank auch schon mal hierfür
-
Entweder mit dieser Version der Funktion:
void GetFieldValue( LPCTSTR lpszName, CDBVariant& varValue, short nFieldType = DEFAULT_FIELD_TYPE );
...frag mich aber nicht, wie man die benutzt.
Oder du machst dir eine eigene CRecordset-Basisklasse, in die du das casten gleich einbaust.
z.B.int n = GetIntValue(); CString str = GetStringValue();
usw.
-
*gg* manchmal sollte man sich einfach mal anschauen was so alles zu ner Funktion angeboten wird.
Vielen Dank.
Um so mehr ich mit der FKT arbeite umso mehr Fragen treten auf. Ich ruf die FKT drei mal hintereinander auf, einmal zähle ich IO einmal NIO und einmal alle. Jetzt mach ich ja jedes mal die DB auf nen Recset auf den Recset zu und dann die DB zu. Das ist doch bescheurt, oder? Kann man irgendwie mehrere Sachen zurück geben?? 3 Strings z.B. ich will nicht alles in einen kopieren und danach wieder auseinander schneiden.
-
öhm moment nicht weiter denken ich probier einfach mal ne open DB FKT zu machen und ne close und dann kann ich ja open dann abfrage 1 dann 2 dann 3 dann 4 (auch noch dazu gekommen) und dann close. Sollte ja eigentlich gehen.