Datenbank durchsuchen



  • 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 richitg

    Edit: 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


Anmelden zum Antworten