Datenbank durchsuchen
-
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