Rekordhalmaz: Rekordhalmaz paraméterezése (ODBC)

Ez a témakör az MFC ODBC-osztályokra vonatkozik.

Előfordulhat, hogy futásidőben szeretne rekordokat kiválasztani a végfelhasználó által kiszámított vagy beszerzett információk alapján. A rekordhalmaz paraméterei lehetővé teszik a cél megvalósítását.

Ez a témakör a következőt ismerteti:

Paraméteres rekordhalmazok

A paraméteres rekordkészlettel futtatáskor adhat meg paraméteradatokat. Ennek két értékes hatása van:

  • Ez jobb végrehajtási sebességet eredményezhet.

  • Lehetővé teszi a lekérdezés futásidőben történő összeállítását a tervezéskor nem elérhető információk alapján, például a felhasználótól beszerzett vagy futásidőben kiszámított információk alapján.

Amikor meghívja Open a lekérdezés futtatását, a rekordhalmaz a paraméteradatok alapján fejezi be az SQL SELECT utasítást. Bármilyen rekordhalmazt paraméterezhet.

Mikor érdemes paramétereket használni?

A paraméterek tipikus felhasználási módjai a következők:

  • Futásidejű argumentumok átadása előre definiált lekérdezésnek.

    Ha paramétereket szeretne átadni egy tárolt eljárásnak, meg kell adnia egy teljes egyéni ODBC CALL utasítást – paraméterhelyőrzőkkel –, amikor hívást kezdeményez Open, és felül kell írnia a rekordhalmaz alapértelmezett SQL-utasítását. További információért lásd: CRecordset::Open a Class Library Reference és a SQL: A rekordkészlet SQL-utasításának testreszabása (ODBC), valamint Rekordkészlet: Osztály deklarálása előre definiált lekérdezéshez (ODBC).

  • Számos lekérdezés hatékony végrehajtása különböző paraméterinformációkkal.

    Ha például a végfelhasználó egy adott tanuló adatait keresi a diákregisztrációs adatbázisban, a felhasználótól kapott paraméterként megadhatja a tanuló nevét vagy azonosítóját. Ezután, amikor meghívja a rekordhalmaz tagfüggvényét Requery , a lekérdezés csak az adott tanuló rekordját választja ki.

    A rekordhalmaz szűrősztringje a következőképpen nézhet ki: m_strFilter

    "StudentID = ?"
    

    Tegyük fel, hogy beszerzi a tanulói azonosítót a változóban strInputID. Ha egy paramétert strInputID (például a 100-os tanulói azonosítót) állít be, a változó értéke a szűrősztringben szereplő "?" paraméterhelyőrzőhöz van kötve.

    Rendelje hozzá a paraméter értékét az alábbiak szerint:

    strInputID = "100";
    ...
    m_strParam = strInputID;
    

    Nem szeretné így beállítani a szűrősztringet:

    m_strFilter = "StudentID = 100";   // 100 is incorrectly quoted
                                       // for some drivers
    

    A szűrősztringek idézőjeleinek helyes használatáról a Recordset: Filtering Records (ODBC) című témakörben olvashat.

    A paraméter értéke minden alkalommal eltér, amikor újra lekérdezi a rekordhalmazt egy új tanulóazonosítóhoz.

    Jótanács

    A paraméterek használata hatékonyabb, mint egy szűrő. Paraméteres rekordhalmaz esetén az adatbázisnak csak egyszer kell feldolgoznia egy SQL SELECT utasítást. Paraméterek nélküli szűrt rekordhalmazok esetén a SELECT utasítást minden alkalommal fel kell dolgozni, amikor Requery új szűrőértéket ad meg.

A szűrőkkel kapcsolatos további információkért lásd: Rekordhalmaz: Rekordok szűrése (ODBC).

A rekordhalmaz-osztály paraméterezése

Megjegyzés:

Ez a szakasz azokra az CRecordset-ből származó objektumokra vonatkozik, amelyeknél nincs megvalósítva a tömeges sorlehívás. Ha tömeges sorbeolvasást használ, a paraméterek implementálása hasonló folyamat. További információért kérlek keresd fel Recordset: Rekordok lekérése tömegesen (ODBC).

A rekordhalmaz-osztály létrehozása előtt határozza meg, hogy milyen paraméterekre van szüksége, mik az adattípusaik, és hogyan használja őket a rekordhalmaz.

Rekordhalmazosztály paraméterezése

Megjegyzés:

Az MFC ODBC Consumer varázsló nem érhető el a Visual Studio 2019-ben és újabb verzióiban. Ezt a funkciót továbbra is manuálisan is létrehozhatja.

  1. Az osztály létrehozásához futtassa az MFC ODBC Fogyasztói varázslót az Osztály hozzáadása parancsból.

  2. Adja meg a rekordhalmaz oszlopainak mezőadat-tagjait.

  3. Miután a varázsló egy fájlba írja az osztályt a projektben, lépjen a .h fájlra, és adjon hozzá manuálisan egy vagy több paraméteradat-tagot az osztálydeklarációhoz. A hozzáadás a következő példához hasonló lehet, egy snapshot class része, amely a "Mely tanulók vannak a felsős osztályban?" kérdés megválaszolására lett kialakítva.

    class CStudentSet : public CRecordset
    {
    // Field/Param Data
        CString m_strFirstName;
        CString m_strLastName;
        CString m_strStudentID;
        CString m_strGradYear;
    
        CString m_strGradYrParam;
    };
    

    Adja hozzá a paraméteradat-tagokat a varázsló által létrehozott mezőadat-tagok után. A konvenció szerint a "Param" szót hozzá kell fűzni minden felhasználó által definiált paraméternévhez.

  4. Módosítsa a DoFieldExchange tagfüggvény definícióját a .cpp fájlban. Adjon hozzá egy RFX-függvényhívást az osztályban hozzáadott minden paraméter adattaghoz. Az RFX-függvények írásáról további információt a Record Field Exchange: How RFX Works (Az RFX működése) című témakörben talál. Előzze meg a paraméterek RFX-hívásait egyetlen hívással:

    pFX->SetFieldType( CFieldExchange::param );
    // RFX calls for parameter data members
    
  5. A rekordhalmazosztály konstruktorában növelje a paraméterek számát. m_nParams

    További információ : Rekordmezőcsere: A varázsló kódjának használata.

  6. Amikor megírja az osztály rekordhalmaz-objektumát létrehozó kódot, helyezzen el egy "?" (kérdőjel) szimbólum az SQL-utasítás sztringjeinek minden olyan helyén, ahol egy paramétert le kell cserélni.

    Futásidőben a "?" helyőrzőket a megadott paraméterértékekkel, sorrendben töltik ki. A SetFieldType hívás után beállított első paraméter adatmező az SQL-sztring első "?" elemét helyettesíti, a második paraméter adatmező pedig a második "?", és így tovább.

Megjegyzés:

A paraméterek sorrendje fontos: a saját függvényedben lévő RFX-hívások sorrendjének meg kell egyeznie az SQL karakterláncban lévő paraméter-helyőrzők sorrendjével.

Jótanács

A legvalószínűbb, hogy a használható karakterlánc az, amelyet az osztály m_strFilter adattagjának ad meg (ha van ilyen), de egyes ODBC-illesztőprogramok más SQL-záradékokban is engedélyezhetik a paramétereket.

Paraméterértékek átadása futásidőben

Paraméterértékeket kell megadnia a hívás Open előtt (új rekordhalmaz-objektum esetén) vagy Requery (meglévő esetén).

Paraméterértékek átadása egy rekordhalmaz-objektumnak futás közben

  1. Hozza létre a rekordhalmaz-objektumot.

  2. Készítsen elő egy vagy több sztringet, például a m_strFilter sztringet, amely az SQL-utasítást vagy annak részeit tartalmazza. Helyezze el a "?" helyőrzőket, ahol a paraméterinformációk el lesznek helyezve.

  3. Rendeljen hozzá egy futásidejű paraméterértéket az objektum minden paraméteradat-tagjához.

  4. Hívja meg a Open tagfüggvényt (vagy Requeryegy meglévő rekordhalmazhoz).

Tegyük fel például, hogy egy szűrősztringet szeretne megadni a rekordhalmazhoz a futtatáskor beszerzett információk alapján. Tegyük fel, hogy korábban létrehozott egy CStudentSet osztályú rekordkészletet – rsStudents néven –, és most egy adott típusú tanulói információért szeretné újra lekérdezni.

// Set up a filter string with
// parameter placeholders
rsStudents.m_strFilter = "GradYear <= ?";

// Obtain or calculate parameter values
// to pass--simply assigned here
CString strGradYear = GetCurrentAcademicYear( );

// Assign the values to parameter data members
rsStudents.m_strGradYrParam = strGradYear;

// Run the query
if( !rsStudents.Requery( ) )
    return FALSE;

A rekordhalmaz azoknak a diákoknak a rekordjait tartalmazza, akik rekordjai megfelelnek a szűrő által megadott feltételeknek, amelyek futásidejű paraméterekből készültek. Ebben az esetben a rekordhalmaz az összes végzős tanuló rekordjait tartalmazza.

Megjegyzés:

Szükség esetén egy paraméteradat-tag értékét Null értékre állíthatja a SetParamNull használatával. Hasonlóképpen ellenőrizheti, hogy egy paraméteradat-tag null értékű-e az IsFieldNull használatával.

Lásd még

Rekordhalmaz (ODBC)
Rekordhalmaz: Rekordok hozzáadása, frissítése és törlése (ODBC)
Rekordhalmaz: Hogyan választják ki a rekordokat a rekordhalmazok (ODBC)