SQL lekérdezés, VS C++-ban
2005-04-22T15:03:56+02:00
2005-04-24T12:42:12+02:00
2022-07-23T02:02:28+02:00
Új-Kaleb
Sziasztok !


C++-ban lekérdezni akarok. Van egy tábla, t_quality. A következö kóddal ki tudok szürni egy rekordot :

pointer->m_strFilter="t_quality.TXT_QUALITY_NAME LIKE 'Jó termék'";

De nekem az kellene, hogy minden egyes NAME-t ki tudjak választani (azaz : nem akarok szürni). Próbáltam '*'-gal, vagy a LIKE nem megadásával, de nem megy. Van tippetek ?
Mutasd a teljes hozzászólást!
Elnezve az utolso 3 nyitott topicod, ket dolgot ajanlanek:
1. alap sql tutorial
2. ado hasznalata
Mutasd a teljes hozzászólást!

  • talán ha üres sztringet adsz meg filternek? :))

    (mellesleg leírhatnád, hogy milyen apit használsz)
    Mutasd a teljes hozzászólást!
  • pointer->m_strFilter="t_quality.TXT_QUALITY_NAME IS NOT NULL"; /*ha a NULL elemekre nem vagy kíváncsi, ha azok is kellenek, akkor üres string kell ha pedig csak olyan nevek kellenek, amiknek van értelmük:*/ pointer->m_strFilter="t_quality.TXT_QUALITY_NAME <> '' AND t_quality.TXT_QUALITY_NAME IS NOT NULL";
    Mutasd a teljes hozzászólást!
  • Inkább mást kérdezek, mert nem ez a fö bajom. Vannak tábláim : t_quality, t_batch stb. Ezek arra szolgálnak, az ebben lévö értékekböl + mérési adatokból fog összeállni egy t_meas_data tábla, amibe mérésenként az adatok is belekerülnek. De most a t_quality, t_batch, un. definiciós táblákkal van a baj. Mondjuk a t_qualityben benne van, hogy 'Jó minöség', 'Rossz minöség', 'Nem mért' stb. Ezek külön külön rekordokban vannak benne. És ezeken az egyes táblákon rekordonként végig akarok menni, hogy ezek alapján töltsek fel comboboxokat : ez a combolista. Nem tudom ezt megcsinálni.. ODBC csatlakozás van.
    Visual c++-al dolgozok.
    Mutasd a teljes hozzászólást!
  • Különbözö ötleteim voltak. Ugye a lekérdezésnél kell egy open, ami meghivja a GetDefaultSQL-t. Itt van egy return, ahol táblákat adok vissza.

    1. Ha minden táblát visszaadok, akkor teljesen lelassul a dolog, és le is fagy, pedig az strFilter-ben csak egy tábláról kérem a kiválasztott (azaz most az összes) táblát.
    2. Ha pedig attól függöen, hogy most melyik táblával akarok foglalkozni :

    CString CNewPolipSet::GetDefaultSQL()
    {
    if(tablecounter==1)
    return _T("[dbo].[t_machine]");
    if(tablecounter==2)
    return _T("[dbo].[t_quality]");

    stb.

    } -t csinálok (itt a tablecounter attól függ, melyik combot töltöm fel), akkor meg az a baja, hogy minden tábla minden mezöje bent van a változók között (ld Wizardban), de csak 1 táblát kérdezek le.... Az elsö megoldásnak kellene jónak lennie, de lelassul, és megfagy.
    Mutasd a teljes hozzászólást!
  • Vagyis az 1. esetben néha Unable to write buffer hibát is ir. már keverem, mikor mit ir. Ennél a hibánál pl. a Jó termék stb. minöségeket sokszor (de minegyikat) beirja a comboba, ami redundáns, tehát nem jó. Utána adja a fenti hibát (unable..) PEdig a t_qualityben minden minöség csak egyszer van.
    Mutasd a teljes hozzászólást!
  • Elnezve az utolso 3 nyitott topicod, ket dolgot ajanlanek:
    1. alap sql tutorial
    2. ado hasznalata
    Mutasd a teljes hozzászólást!
  • Figyu, mád majdem jó az ODBC. Az SQL-lel ilyen szinten tisztán vagyok, általában olyan dolgokkal megy el az idöm, hogy akkor most ; , vagy " ill. "".
    Mutasd a teljes hozzászólást!
  • Itt egy kód részlet, ami valami hasonlót csinál ahhoz, amit te szeretnél. Igaz, hogy nem ado, hanem recordset, de a lényeg benne van.

    class CRVezeto : public CRecordset
    {
    public:
    CRVezeto(CDatabase* pDatabase = NULL);
    DECLARE_DYNAMIC(CRVezeto)
    void LoadCB(class CComboBox &cb) ;
    // Field/Param Data
    //{{AFX_FIELD(CRVezeto, CRecordset)
    long m_v_id;
    CString m_v_nev;
    CString m_v_szam;
    //}}AFX_FIELD


    // Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CRVezeto)
    public:
    virtual CString GetDefaultConnect(); // Default connection string
    virtual CString GetDefaultSQL(); // Default SQL for Recordset
    virtual void DoFieldExchange(CFieldExchange* pFX); // RFX support
    //}}AFX_VIRTUAL

    // Implementation
    #ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
    #endif
    };

    void CRVezeto::LoadCB(class CComboBox &cb)
    {
    int index;
    CString str ;

    Open(CRecordset::dynaset) ;

    m_strSort="v_nev";
    m_strFilter="";
    try
    {
    Requery();
    cb.ResetContent();
    while (!IsEOF())
    {
    str.Format("%-15s", m_v_nev) ;
    index=cb.AddString(str);
    cb.SetItemData(index, m_v_id);
    MoveNext();
    }
    }
    catch(CDBException *e)
    {
    AfxMessageBox(e->m_strError, MB_OK | MB_ICONEXCLAMATION);
    e->Delete();
    }

    Close() ;
    }
    Mutasd a teljes hozzászólást!
  • Köszi a tippet. De én ugy látom, hogy a Te kódod egy combot tölt fel, és én többet akarok, minden egyes combo valamely tábla alapján töltödjön.
    Mutasd a teljes hozzászólást!
abcd