m_strFilter
-
hm das mit der SQL-Anfrage geht bei mir nicht wirklich!
Hab es so probiertvoid CDatabaseView::OnBTNSQL() { LPCTSTR strSQL = "SELECT * FROM Anrufe"; //vorhandenes Recorset schließen m_pSet->Close(); //erneut mit SQL string öffnen m_pSet->Open(CRecordset::snapshot, strSQL); }
Dann bringt er mir immer Ungültiger Deskriptor Index. (Hat das was mit dem SP zu tun?) Hab auf der MS HP gelesen dass es in Excel zu nem Problem kommen kann wo er diese Meldung bringt. muss ich mir jetzt das SP3 ziehen??
-
Tja hab echt lange gegoogelt, die einen meinen es sein ein Bug von VC++, mann muss die Klasse einfach neu anlegen wenn das nicht klappt als DAO andere sagen bekommt man gar nicht weg andere sagen es kommt darauf an wie man es ausliest, da man in der gleichen Reihenfolge auslesen muss wie in der SQL-query (ich les noch gar nicht aus) und so weiter aber meine erste Vermutung mit dem SP kann glaub ich nicht sein denn das ist alles nur immer für exel ich hab ja aber Access als DB laufen.
Wenn jemandem was zu falschen Deskriptor Indexen einfällt bitte schreiben.
Aber dank euch allen für eure Bemühungen
-
Ok wenn zum Beitrag eins weiter oben niemand eine Ahnung hat dann aber wahrscheinlich zu diesem neuen Problem.
einen m_strFilter. Ich will nach einer Variablen Zahl Filtern also nach ner int Variable.m_pSet->m_strFilter = "Maschinennummer = hierdie in Variable";
kann mir da jemand die Zeile kurz schreiben und wenn '"?+ o.ä. drin vorkommen bitte kurz erklären warum und wieso die da stehen
-
warum guckst du da nicht in ein SQL-tutorial ??
aber ok ...m_pSet->m_strFilter = "Maschinennummer = \"*\"";
für den SQL-Server heißt das das hier:
Maschinennummer = "*"
und das stern bedeutet wie du sicherlich ahnen kannst, da kann stehen was will
(bin mir auch ziemlich sicher das auch eine leere zeichenfolge in die ergebniss tabelle aufgenommen wird)
Edit:
sorry, das du nach Integer suchst hab ich übersehen, da musste die gänsefüßchen natürlich weg lassen
-
Suchst du nicht eher sowas?
long lID = 5; m_pSet->m_strFilter.Format(_T("ID = %d"), lID);
Da würde dann für den SQL-Server stehen:
ID = 5
-
Polofreak schrieb:
Ich will nach einer Variablen Zahl Filtern also nach ner int Variable.
für mich hört sich das nach einer art antowrt nach dem was ich geschrieben hab an :D;)
oder nicht ??
-
estartu_de schrieb:
Suchst du nicht eher sowas?
long lID = 5; m_pSet->m_strFilter.Format(_T("ID = %d"), lID);
Da würde dann für den SQL-Server stehen:
ID = 5
genau das habe ich gesucht.
Vielen Dank
-
ahhh, nein. der polofreak hat entschieden. ich nehme alles zurück ^^
-
*gg* Aber dir auch herzlichen Dank Skall für die schnelle Antwort vielleicht hab ich mich nicht richtig ausgedrückt. Aber die Realität zeigt man konnte mich verstehen
-
daran wirds liegen
-
hm noch en Frage zu getField Value. Erst mal Source:
CDBVariant varValue; short index =0; m_pSet->GetFieldValue( index, varValue); m_MaschinenNR =varValue.m_lVal;
So sieht des aus. Nur versteh ich des nciht so richtig wo kann ich jetzt wirklich auswählen welches Field ich eigentlich will. Index dachte ich sei Zeilennummer und in VarValue steht der Spaltenname aber wie kann ich dem was zuweisen, da steht immer ein scheiß drin!
Danke schon mal im Voraus!
-
Okay, da bin ich nicht so firm - ich versuchs trotzdem mal:
Index ist die SPALTENnummer.
In den Zeilen bewegst du dich mit den Funktionen, die mit Move anfangen.Du kannst, wenn sich die Spalten des Recordset nicht ändern, aber auch mit DoFieldExchange arbeiten. Das geht einfacher.
-
OK bringt mich schon mal ein Stück weiter aber
void CMy2dbView::OnBtnSelect() { CDBVariant varValue; m_pSet->MoveFirst(); short index =3; m_pSet->GetFieldValue( index, varValue); m_MaschinenNR =varValue.m_lVal; AfxGetMainWnd()->SendMessage(WM_COMMAND, IDM_SWITCHTO2); }
Bis zur letzten Zeile steht der richtige Wert drin dann die letzte Zeile und der Wert kotzt voll ab! Warum?? wenn ich die andere View öffne dann mache ich ja nichts mit der Membervariable!
-
Definiere bitte:
Polofreak schrieb:
Bis zur letzten Zeile steht der richtige Wert drin dann die letzte Zeile und der Wert kotzt voll ab!
Du solltest dir aber mal zwei nette Funktionen anschauen: IsEOF und IsBOF
-
Nein moment ich habe mich mal wieder sehr missverständlich ausgedrückt! Mit letzter Zeile meinte ich die letzte Sourcezeile die ich oben geschrieben hab.
Also:AfxGetMainWnd()->SendMessage(WM_COMMAND, IDM_SWITCHTO2);
wenn ich Step by Step mit dem Debugger durchgehe, dann bekomm ich immer bei oben genannter Zeile einen Scheiß Wert in meine Membervariable. Also m_MaschinenNR ist immer der richtige Wert drin dann kommt
AfxGetMainWnd()->SendMessage(WM_COMMAND, IDM_SWITCHTO2);
Und jetzt steht ein Scheiß drin.
Klar??
-
Verstanden habe ich es jetzt, aber keine Idee.
Treten denn damit verbundene Fehler auf?
Ist es die einzige Variable, die sich ändert?Bist du ganz sicher, dass du nirgends zugreifst? Setz mal auf ALLE Zugriffe einen Breakpoint und guck nochmal.
-
Also ich hab jetzt die ganze Zeit noch dran rum geeiert und mittlerweile hab ich raus gefunden, wenn ich es mit einer member mache dann geht es nicht wenn ich es mit einer global deklarierten Variable mache, dann geht es. Also auf gut deutsch es geht jetzt. Wenn dir aber einfallen sollte woran sowas liegen könnte, dann kannst ja nochmal schreiben. Und übrigens nein es treten sonst keine Fehler damit auf, ich frag diese Variable in nem anderen view auf und da gibt er mir dann ne ganz komische Zahl einfach aus.
-
Polofreak schrieb:
Und übrigens nein es treten sonst keine Fehler damit auf, ich frag diese Variable in nem anderen view auf und da gibt er mir dann ne ganz komische Zahl einfach aus.
Da du an der Stelle schon mehrfach einen Fehler hattest: Zeig bitte, wie du sie aufrufst. Nicht, dass du eine unintialisierte Variable in einem "lokalen" View hast.
Sehr komische Zahlen sind nämlich oft Speichermüll.Globale Variable... naja, wenns nicht zu oft vorkommt und deutlich vermerkt wird...
-
kann mir zwar nciht vorstellen dass es was mit dem Aufruf zu tun hat, da ich ja mit dem Debugger schaue und sie sich noch vor dem Aufruf ändert. Aber ich poste de Source mal der Masterin!!
int selectedMNR; void CMy2dbView::OnBtnSelect() { CDBVariant varValue; CBoundaryView test; short index =3; m_pSet->GetFieldValue( index, varValue); selectedMNR = varValue.m_lVal; AfxGetMainWnd()->SendMessage(WM_COMMAND, IDM_SWITCHTO2); }
oben ist die globale Varialble, so geht es auch wenn ich jetzt statt int selectedMNR; eine member verwende kackt er ab.
Ich will die Member mit einer get Funktion dann in ner anderen Klasse verwenden.int CMy2dbView::getSuche() { return selectedMNR; }
ich mach dann in der anderen Klasse (anderes View)
CMy2dbView such; int MNR = such.getSuche();
So jetzt du!!
-
Und du hast WIEDER eine LOKALE Variable von deinem View angelegt.
Ich habe keine Ahnung, warum das mit einer globalen Variablen geht - sowas nutze ich fast nie. Wenn, dann war es Bestandteil einer fertigen Lösung...
Du musst dir entweder einen Zeiger auf den eigentlichen View besorgen, oder du gibst das hoch an die App (die ist prima als Speicher für dauernd und überall benötigte Sachen) oder du läßt es wie es ist.
...warum sich die Variable ändert, weiß ich jetzt erst recht nicht mehr - da du ja mit einer völlig anderen Instanz des View arbeitest.