Dela via


MFC: Använda databasklasser utan dokument och vyer

Ibland kanske du inte vill använda ramverkets dokument-/vyarkitektur i dina databasprogram. I det här avsnittet förklaras:

När du inte behöver dokument

Vissa program har ett distinkt begrepp i ett dokument. Dessa program läser vanligtvis in hela eller större delen av en fil från lagringen till minnet med kommandot Öppna fil . De skriver tillbaka den uppdaterade filen till lagringen samtidigt med kommandot Spara eller Spara som . Det användaren ser är en datafil.

Vissa programkategorier kräver dock inget dokument. Databasprogram fungerar när det gäller transaktioner. Programmet väljer poster från en databas och presenterar dem för användaren, ofta en i taget. Det som användaren ser är vanligtvis en enda aktuell post som kan vara den enda i minnet.

Om programmet inte kräver något dokument för att lagra data kan du avstå från vissa eller alla ramverkets dokument-/vyarkitektur. Hur mycket du avstår från beror på vilken metod du föredrar. Du kan:

  • Använd ett minimalt dokument som en plats för att lagra en anslutning till datakällan, men använd inte vanliga dokumentfunktioner, till exempel serialisering. Detta är användbart när du vill ha flera vyer av data och vill synkronisera alla vyer, uppdatera dem alla samtidigt och så vidare.

  • Använd ett ramfönster som du ritar direkt i i stället för att använda en vy. I det här fallet utelämnar du dokumentet och lagrar data- eller dataanslutningar i ramfönsterobjektet.

Programguidealternativ för dokument och vyer

MFC-programguiden har flera alternativ i Välj databasstöd, som visas i följande tabell. Om du använder MFC-programguiden för att skapa ett program skapar alla dessa alternativ program med dokument och vyer. Vissa alternativ erbjuder dokument och vyer som utelämnar överflödig dokumentfunktionalitet. Mer information finns i guiden Databasstöd, MFC-program.

Alternativ Utsikt Dokument
Ingen Härledd från CView. Ger inget databasstöd. Det här är standardalternativet.

Om du väljer alternativet Stöd för dokument-/vyarkitektur på sidan Programtyp, MFC-programguide får du fullständigt dokumentstöd, inklusive serialisering och kommandona Ny, Öppna, Spara och Spara somArkiv-menyn . Se Applikationer utan dokument.
Endast rubrikfiler Härledd från CView. Tillhandahåller den grundläggande nivån av databasstöd för ditt program.

Innehåller Afxdb.h. Lägger till länkbibliotek, men skapar inga databasspecifika klasser. Du kan skapa poster senare och använda dem för att undersöka och uppdatera poster.
Databasvy utan filstöd Härledd från CRecordView Tillhandahåller dokumentstöd men inget serialiseringsstöd. Dokumentet kan lagra postuppsättningar och samordna flera vyer. Det stödjer inte serialisering eller kommandona Ny, Öppna, Spara och Spara som. Se Program med minimala dokument. Om du inkluderar en databasvy måste du ange datakällan.

Innehåller databasens huvudfiler, länkbibliotek, en postöversikt och en postuppsättning. (Endast tillgängligt för program med alternativet Stöd för dokument-/vyarkitektur valt på sidan Programtyp, MFC-programguide .)
Databasvy med filstöd Härledd från CRecordView Ger fullständigt dokumentstöd, inklusive serialisering och dokumentrelaterade filmenykommandon . Databasapplikationer fungerar vanligtvis på en post-för-post-basis i stället för en fil-för-fil-basis och behöver därför inte serialisering. Du kan dock ha en särskild användning för serialisering. Se Program med minimala dokument. Om du inkluderar en databasvy måste du ange datakällan.

Innehåller databasens huvudfiler, länkbibliotek, en postöversikt och en postuppsättning. (Endast tillgängligt för program med alternativet Stöd för dokument-/vyarkitektur valt på sidan Programtyp, MFC-programguide .)

En diskussion om alternativ till serialisering och alternativa användningsområden för serialisering finns i Serialisering: Serialisering jämfört med databasindata/utdata.

Program med minimala dokument

MFC-programguiden har två alternativ som stöder formulärbaserade dataåtkomstprogram. Varje alternativ skapar en CRecordView-baserad vyklass och ett dokument. De skiljer sig åt i vad de utelämnar i dokumentet.

Dokument utan filstöd

Välj databasalternativet Databasvy utan filstöd om du inte behöver dokumentserialisering. Dokumentet har följande användbara syften:

  • Det är en praktisk plats att lagra ett CRecordset objekt på.

    Den här användningen liknar vanliga dokumentkoncept: dokumentet lagrar data (eller i detta fall en uppsättning poster) och vyer är en vy över dokumentet.

  • Om programmet visar flera vyer (till exempel flera postvyer) stöder ett dokument samordning av vyerna.

    Om flera vyer visar samma data kan du använda CDocument::UpdateAllViews medlemsfunktionen för att samordna uppdateringar till alla vyer när en vy ändrar data.

Du använder vanligtvis det här alternativet för enkla formulärbaserade program. Programguiden stöder en bekväm struktur för sådana program automatiskt.

Dokument med filstöd

Välj programguidens databasalternativ Databasvy med filstöd när du har en alternativ användning för menykommandon relaterade till Fil och dokumentserialisering. För dataåtkomstdelen i ditt program kan du använda dokumentet på samma sätt som beskrivs i Dokument utan filstöd. Du kan till exempel använda dokumentets serialiseringsfunktion för att läsa och skriva ett serialiserat användarprofildokument som lagrar användarens inställningar eller annan användbar information. Fler idéer finns i Serialisering: Serialisering jämfört med databasindata/utdata.

Programguiden stöder det här alternativet, men du måste skriva koden som serialiserar dokumentet. Lagra den serialiserade informationen i dokumentdatamedlemmar.

Applikationer utan dokument

Ibland kanske du vill skriva ett program som inte använder dokument eller vyer. Utan dokument lagrar du dina data (till exempel ett CRecordset objekt) i din ramfönsterklass eller din programklass. Eventuella ytterligare krav beror på om programmet visar ett användargränssnitt.

Databasstöd med ett användargränssnitt

Om du har ett användargränssnitt (förutom till exempel ett kommandoradsgränssnitt för konsolen) drar programmet direkt till ramfönstrets klientområde i stället för till en vy. Ett sådant program använder inte CRecordView, CFormView eller CDialog för sitt huvudsakliga användargränssnitt, men använder normalt CDialog för vanliga dialogrutor.

Skriva program utan dokument

Eftersom programguiden inte stöder att skapa program utan dokument måste du skriva din egen CWinApp-derived-klass och, om det behövs, även skapa en CFrameWnd eller CMDIFrameWnd -klass. Åsidosätt CWinApp::InitInstance och deklarera ett programobjekt som:

CYourNameApp theApp;

Ramverket tillhandahåller fortfarande mekanismen för meddelandekarta och många andra funktioner.

Databasstöd separat från användargränssnittet

Vissa program behöver inget användargränssnitt eller bara ett minimalt. Anta till exempel att du skriver:

  • Ett mellanliggande dataåtkomstobjekt som andra program (klienter) anropar för särskild bearbetning av data mellan programmet och datakällan.

  • Ett program som bearbetar data utan användarintervention, till exempel ett program som flyttar data från ett databasformat till ett annat eller ett som utför beräkningar och utför batchuppdateringar.

Eftersom inget dokument äger CRecordset objektet vill du förmodligen lagra det som en inbäddad datamedlem i din CWinApp-härledda programklass. Alternativen är:

  • Inte hålla ett permanent CRecordset objekt alls. Du kan skicka NULL till postuppsättningsklasskonstruktorer. I så fall skapar ramverket ett tillfälligt CDatabase-objekt med hjälp av informationen i datamängdens GetDefaultConnect medlemsfunktion. Detta är den mest sannolika alternativa metoden.

  • Göra objektet till CRecordset en global variabel. Den här variabeln bör vara en pekare till ett postuppsättningsobjekt som du skapar dynamiskt i din CWinApp::InitInstance-återimplementering. På så sätt undviker du att försöka konstruera objektet innan ramverket initieras.

  • Använd postuppsättningsobjekt så som du skulle göra i kontexten av ett dokument eller en vy. Skapa postuppsättningar i medlemsfunktionerna i ditt program eller ramfönsterobjekt.

Se även

MFC-databasklasser