Datenbank durchsuchen
-
Ach gottchen das hatte ich noch gar ned geändert, mal schauen. Aber wie füge ich meine KundenNr hinzu
-
Mit Format.
CString strDummy; strDummy.Format("%d %s %s %s %s", kndSet.m_Kundennummer, kndSet.m_Vorname, kndSet.m_Nachname, kndSet.m_Telefonnummer, kndSet.m_Email); m_Kundenliste.AddString(strDummy);
Ich habe deinen Variablennamen nicht im Kopf, könnte sein, dass kndSet.m_Kundennummer falsch ist.
-
Komm mal nach Hamburg estartu denn bekommst nen Kasten ausgegeben
Danke!
Hattte es vorher anders probiert,zwar auch mit Format bloss nur die KundenNr, da wollte er das ned Oo
Btw estartu Die Variablen übergabe von der KundenNr vorher funktioniert solange bis ich nem Edit Feld die Spalte "KundenNr" meiner 2.Tabelle zuordne. Somit kann ich nun leider nicht einem Kunden mehrere Kinder zuordnen
-
Ich vermute, das Problem ist, dass die beiden Spalten gleich heißen.
Benenne doch einfach eine von beiden mal anders.Der sieht blos zweimal Kundennummer und weiß nicht, welche er nehmen soll - also gehts schief.
-
Also das umändern der Spalten Variablen bringt leider auch nix. Sobald ich den Zeiger auf das Edit feld mach übergibt er immer nur NULL in die Datenbank, nimm ich die Zeile raus geht es wieder. Notfalls muss ich die KundenNr denn per Hand abtippen
Edit: Ich hab es nun mit ner ZwischenVariable gelöst
Ich übergib nachm Update der m_pSet1 Daten meine neue KundenNr an das andere Editfeld und sag vorm Update der 2. Tabelle , der Wert im Editfeld=m_pSet2KundenNr :>
Funzt Wunderbar und so kann ich nun auch nachträglich Daten für den Kunden speichern.
-
Zeig mal, welche Zeile die Probleme macht.
-
So das normale Durchsuchen geht, aber wenn ich jetzt z.b. bei einem Kunden mehrere Kinder habe will ich mir ja also z.b. 3 mla die Kundendaten mit dem jeweiligen Kind
anzeigen lassen. Dafür müsste ich aber ne neue Klasse machen mit beiden tabellen oder? Weil so sind die Daten ja für jede Tabelle einzeln und ich kann mir zwar die Kinder nach und nach einzeigen lassen,bloss nicht passend zum Kunden.
-
ich frag mich halt weil wenn ich beim erstellen des Projektes mehrere tabellen ausgewählt habe nen kartesisches produkt hatte
-
reda schrieb:
ich frag mich halt weil wenn ich beim erstellen des Projektes mehrere tabellen ausgewählt habe nen kartesisches produkt hatte
Das passiert, weil du keine Beziehungen zwischen den Tabellen festgelegt hast.
-
Doch hab ja welche festgelegt
Irgendwie erkennt er die SQL Beziehungen wohl nicht, weil die Beziehungen sind alle vorhanden und unter SQL Query Analyzer funktioniert die Abfrage richitgEdit: Ich hab grad gesehen der Fehler liegt in meinem Filter, weiss aber grad ned wo der Fehler liegt.
suchSet.m_strFilter=_T("[Kundendaten].[KundenNr] =""[Kinder].[KundenNr] AND"); suchSet.m_strFilter.Format(_T("[Kundendaten].[Nachname]=\'%s\'"),m_Name );
-
Habs gefunden, musste den Filter bisschen umschreiben
suchSet.m_strFilter=_T("[Kundendaten].[KundenNr] =""[Kinder].[KundenNr] AND"); suchSet.m_strFilter+=_T("[Kundendaten].[Nachname]='"); suchSet.m_strFilter+= m_Name; suchSet.m_strFilter+=_T("'");
Edit: Ne neue Klasse mit beiden Tabellen muss ich aber auf jeden Fall erstellen oder?
-
reda schrieb:
Edit: Ne neue Klasse mit beiden Tabellen muss ich aber auf jeden Fall erstellen oder?
Nein, es geht auch mit den beiden Sets, die du schon hast.
Ist eben etwas anders als mit einem View.Du musst eben einen Kunden raussuchen und dann für die Kinder den Filter festlegen, Requery machen und kannst dann die Kinder zum Kunden anzeigen.
-
Ach ich mach das mit ner neuen Klasse, denn muss ich die Funktion ned grossartig umschreiben, und solange die neue Klasse keine Probleme machen kann ist es auch ganz gut
-
reda schrieb:
suchSet.m_strFilter=_T("[Kundendaten].[KundenNr] =""[Kinder].[KundenNr] AND"); suchSet.m_strFilter+=_T("[Kundendaten].[Nachname]='"); suchSet.m_strFilter+= m_Name; suchSet.m_strFilter+=_T("'");
Nur so als Anmerkung: Solche SQL-Anweisungen sind prädestiniert für SQL-Injection... man sollte *nie* "unbekannte" Strings direkt in einer SQL-Anweisung einbetten. Hierfür sollte man immer Parameter-Abfragen verwenden; also der Form "SELECT * FROM t WHERE n=?" und dann den Parameter separat über das Query-Objekt mitgeben...
Siehe: Stop SQL Injection Attacks Before They Stop You
http://msdn.microsoft.com/msdnmag/issues/04/09/SQLInjection/Bei Web-Applikationen ist dies natürlich gefährlicher als bei Windows-Apps; aber auch hier kann man einen geschickten "Namen" wählen und kann die Datenbank damit löschen...
-
Wie wäre denn die sichere und bessere Methode? Hab das so aus dem Visual C++ Buch von Addison-Wesley. Da die erste Variante ja leider nicht den gewünschten Effekt hatte.
-
-
Alles klar,danke