Datenbank suche



  • Name    User_id                 User_id   Job_id  ZeitBegin  ZeitEnde
    -----   --------                -------   ------  ---------  --------
    Frank   12                       12        001     11:14      11:18
    Martin  14                       14        002     11:48      11:50
    Markus  17                       17        003     11:55      11:57
    

    ich habe wie oben 2 tabellen. User Id ist in der Erste tabelle Hauptschlüssel und in der zweite tabelle fremdschlüssel.Job id ist in der zweite tabelle Hauptschlüssel.

    Als eingabe bekomme ich einen String (Name) und ich muss erst schauen ob diese Name in DB vorhanden ist, danach muss ich die BeginZeit und EndZeit für diese Name eingeben können. Z.B. Ich bekomme als eingabe Frank und ich muss 11:14 und 11:18 ausgeben können.
    dafür habe ich so ein funktion geschrieben

    void sucheinDB(const CString &m_sName)//m_sName is eingegebene name z.B.Frank
    {
        RsNamenTabelle rsName(m_pDoc->m_pDatabase);
        try
        {
          rsAdmin.Open(CRecordset::snapshot,NULL,CRecordset::readonly)
          ....
    //Ab Hier wusste ich nicht wie ich m_sName in datenbak finde und die Zeitbeginn und zeitEnde eingebe...
    
        }
    }
    

    Kann mir bitte jemand Helfen, ich habe noch keine richtige erfahrung damit..
    Kann jemand den Code verbessern oder vervollständigen..

    Vielen Dank



  • Also die 11:14 und 11:18 muss ich ausgeben können ,da ich als eingabe Frank habe. also ich muss die werte (11:14 und 11:18) in der andere tabelle finden und ausgeben können oder in eine andere Rechnung benutzen können.



  • kann mir keiner Helfen???



  • schaust du dir CRecordset::m_strFilter an, da kannst du schon mal selektieren also die where-Klausel implementieren.
    ZeitBegin und ZeitEnde sollten ja Member deiner Recordset-Klasse sein die zu der Tabelle gehört, darüber kannst du doch die Zeiten erhalten und entsprechend Verarbeiten.

    Eigentlich steht doch alles Wissenswerte über die Klasse CRecordSet in der MSDN, also schaust du die Member der Klasse an, hast du doch schon alles möglichen Filter- und Sortiermöglichkeiten



  • Ja aber mein problem ist hier, ich bekomme ein Name und es gibt ein Id. Ich muss erst die Id finden und dann die Id in der andere Tabelle suchen.
    Ich weiß nicht so genau wie ich das machen soll..
    Ich habe nicht so viel Erfahrung mit SQL...
    Könntest du mal vielleicht paar zeilen kodieren als Beispiel.. Damit ich weiterarbeiten könnte..

    Vielen vielen Dank



  • Auf die Tabelle mit Name und ID:

    .m_strFilter.Format(_T("Name = %s"),m_sName);
    

    und auf die andere Tabelle mit den Zeiten:

    .m_strFilter.Format(_T("ID = %d"),m_ID);
    

    wobei m_ID natürlich der ID-Menber aus der ersten Tabelle ist.

    Weiter kann ich dir da jetzt ohne beschreibung der Tabellen und der RecordSet-Klassen auch nicht helfen, ich weis ja nicht was wie wo drin landet.



  • Vielen dank für die Hilfe..

    Ich sag mal so, in der erste Tabelle gibt es User_Id und jeder Name hat eine eigene User Id. Und in der zweite tabelle sieht man die gleiche User Id's. jeder user Arbeitet eine bestimmte zeit.und das sieht man mit der User_Id's in der zweite tabelle.

    Also , mein Problem ist, jemand will wissen wie lang Frank gearbeitet hat. und er schreibt in Editor "Frank". und diese Name geht in die sucheinDB Funktion(m_sName).
    Und jetzt will ich die Arbeitszeiten von Frank zugreifen (wissen) und das ausgeben.
    Ist das jetzt verständlicher erklärt..?



  • und es gibt auch noch Job Id's in der zweite Tabelle und ich möchte z.B. wissen Wie Lange Zeit hat er Frank bei der erste Job(Job_id=001) gebraucht.



  • na dann mach das doch wie ich oben beschrieben habe, jede Tabelle bekommt ein eigenen CRecordSet und mit m_StrFilter kannst du die gesuchten daten Filtern

    was du suchst ist eigentlich so was

    Select ZeitBegin, ZeitEnde form SecondTable where FirstTable.Name = 'Fank' AND FirstTable.User_id = SecondTable.User_id;

    oder eben:

    rsFirstTable.m_strFilte.Format(_T("'Name' = %s"),m_sName);
    rsFirstTable.Open(....);
    rsSecondTable.m_strFilte.Format(_T("'User_id' = %d"),rsFirstTable.m_iUserID);
    rsSecondTable.Open(....);
    

    Sollte ja nun jetzut deutlich sein wie man das machen kann. wobei wenn du das Recordset deiner zweiten Tablelle benutzt und den Filter der ja eigentlich die where-Klausel der SQL ist, geschickt benutzt kannst du das in einem Ritt machen. aber das lass ich dir dann selbst raus finden.



  • RersteTabelle rA(m_pDoc->m_pDatabase);
    	RzweiteTabelle rH(m_pDoc->m_pDatabase);
    
    	rA.m_strFilter.Format(_T("[UserId] = %d"),m_sName2);
    	rA.Open(CRecordset::snapshot, NULL, CRecordset::readOnly);
    
    	rH.m_strFilter.Format(_T("[Hs_UserID] = %d"),rA.m_UserId);
    	rH.Open(CRecordset::snapshot, NULL, CRecordset::readOnly);
    

    mach ich da was falsches ,ich bekomme nicht die richtige Id??



  • RersteTabelle rA(m_pDoc->m_pDatabase);
    	RzweiteTabelle rH(m_pDoc->m_pDatabase);
    
    	rA.m_strFilter.Format(_T("[Name] = %s"),m_sName2);
    	rA.Open(CRecordset::snapshot, NULL, CRecordset::readOnly);
    
    	rH.m_strFilter.Format(_T("[Hs_UserID] = %d"),rA.m_UserId);
    	rH.Open(CRecordset::snapshot, NULL, CRecordset::readOnly);
    

    mach ich da was falsches ,ich bekomme nicht die richtige Id??

    Hättest du dir mal rA.m_strFilter im Debuger angeschaut, hättest du mitbekommen das der gar nicht stimmen kann. Da m_sName2 doch ein String ist und kein Dezimalwert also %s und der Name steht doch in der Spalte Name in RersteTabelle und danach willst du doch Suchen. Die ID aus der Tabelle RersteTabelle steht doch dann in rA.m_UserId das willst du doch als Erbgebnis haben


Log in to reply