Visualizzazione dei risultati da 1 a 2 su 2

Discussione: C++

  1. #1

    C++

    io devo realizzare una dll che gestisca un DB, creando una pagina html, allora io creo una classe ManDB

    #if !defined(AFX_MANDB_H__1AB2A1A3_80A0_4A2A_B26C_71B4 96FB3D2D__INCLUDED_)
    #define AFX_MANDB_H__1AB2A1A3_80A0_4A2A_B26C_71B496FB3D2D_ _INCLUDED_


    #include "resource.h"

    class CManDBExtension : public CHttpServer
    {
    public:
    CManDBExtension();
    ~CManDBExtension();

    public:
    virtual BOOL GetExtensionVersion(HSE_VERSION_INFO* pVer);
    virtual BOOL TerminateExtension(DWORD dwFlags);
    void Default(CHttpServerContext* pCtxt);

    DECLARE_PARSE_MAP()

    BOOL recInsert();
    void dbRead(CHttpServerContext*, EXTENSION_CONTROL_BLOCK *);
    void dbRDDelete(CHttpServerContext*, EXTENSION_CONTROL_BLOCK *);
    void dbRDUpdate(CHttpServerContext*, EXTENSION_CONTROL_BLOCK *);
    BOOL recDelete();
    BOOL recUpdate();
    };



    #endif // !defined(AFX_MANDB_H__1AB2A1A3_80A0_4A2A_B26C_71B4 96FB3D2D__INCLUDED)

    questa viene definita nel file mandb.cpp



    #include "stdafx.h"
    #include "ManDB.h"
    #import "c:\programmi\file comuni\system\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")

    VOID OutputString(EXTENSION_CONTROL_BLOCK *pECB, LPCSTR szBuffer);


    CWinApp theApp;
    const PCSTR Conn = "dsn=caio;uid=;pwd=;";


    BEGIN_PARSE_MAP(CManDBExtension, CHttpServer)

    ON_PARSE_COMMAND(Default, CManDBExtension, ITS_EMPTY)
    ON_PARSE_COMMAND(dbRead, CManDBExtension, ITS_EMPTY)
    ON_PARSE_COMMAND(dbRDDelete, CManDBExtension, ITS_EMPTY)
    ON_PARSE_COMMAND(dbRDUpdate, CManDBExtension, ITS_EMPTY)
    ON_PARSE_COMMAND(recInsert, CManDBExtension, ITS_EMPTY)
    ON_PARSE_COMMAND(recDelete, CManDBExtension, ITS_I4)
    ON_PARSE_COMMAND(recUpdate, CManDBExtension, ITS_I4)

    DEFAULT_PARSE_COMMAND(Default, CManDBExtension)
    DEFAULT_PARSE_COMMAND(dbRead, CManDBExtension)
    DEFAULT_PARSE_COMMAND(dbRDDelete, CManDBExtension)
    DEFAULT_PARSE_COMMAND(dbRDUpdate, CManDBExtension)
    DEFAULT_PARSE_COMMAND(recInsert, CManDBExtension)
    DEFAULT_PARSE_COMMAND(recDelete, CManDBExtension)
    DEFAULT_PARSE_COMMAND(recUpdate, CManDBExtension)*/

    END_PARSE_MAP(CManDBExtension)



    CManDBExtension theExtension;

    CManDBExtension::CManDBExtension()
    {
    }

    CManDBExtension::~CManDBExtension()
    {
    }

    BOOL CManDBExtension::GetExtensionVersion(HSE_VERSION_I NFO* pVer)
    {
    // Call default implementation for initialization
    CHttpServer::GetExtensionVersion(pVer);

    // Load description string
    TCHAR sz[HSE_MAX_EXT_DLL_NAME_LEN+1];
    ISAPIVERIFY(::LoadString(AfxGetResourceHandle(),
    IDS_SERVER, sz, HSE_MAX_EXT_DLL_NAME_LEN));
    _tcscpy(pVer->lpszExtensionDesc, sz);
    return TRUE;
    }


    BOOL CManDBExtension::TerminateExtension(DWORD dwFlags)
    {
    // extension is being terminated
    //TODO: Clean up any per-instance resources
    return TRUE;
    }


    void CManDBExtension:efault(CHttpServerContext* pCtxt)
    {
    StartContent(pCtxt);
    WriteTitle(pCtxt);

    *pCtxt << _T("This default message was produced by the Internet");
    *pCtxt << _T(" Server DLL Wizard. Edit your CManDBExtension:efault()");
    *pCtxt << _T(" implementation to change it.\r\n");

    EndContent(pCtxt);
    }

    VOID OutputString(EXTENSION_CONTROL_BLOCK *pECB, LPCSTR szBuffer)
    {
    DWORD dwBuffer = strlen(szBuffer);
    pECB->WriteClient(pECB->ConnID, (PVOID) szBuffer, &dwBuffer, 0);
    }
    /*
    BOOL CManDBExtension::recInsert()
    {
    }*/
    /*
    Funzione per la lettura di un Database Generico

    SE Layout = 'D'
    ALLORA lettura di default
    ALTRIMENTI
    SE Layout='E'
    ALLORA lettura con aggiunta di un link ke chiami metodo di delete
    ALTRIMENTI
    SE Layout='U'
    ALLORA lettura con aggiunta di un link che chiami metodo Update
    */
    void CManDBExtension::dbRead(CHttpServerContext* pCtxt, EXTENSION_CONTROL_BLOCK *pECB)
    {
    _RecordsetPtr rs = NULL;
    rs.CreateInstance("ADODB.Recordset.1.5");
    char sql[]="SELECT * FROM schedario;";
    rs->Open(sql, Conn, adOpenForwardOnly, adLockReadOnly, adCmdTable);
    /*
    if rs==NULL
    OutputString(pECB, "<h1>ERROR not open recordset</h1>");
    */
    long NumField=rs->Fields->Count;
    FieldPtr *rgflds = new FieldPtr[NumField];
    for (long i = 0; i < NumField; i++)
    rgflds[i] = rs->Fields->GetItem(i);

    StartContent(pCtxt);
    OutputString(pECB, "<TITLE>Lettura di un DB</TITLE>");
    OutputString(pECB, "<BODY>");
    //creazione tabella
    OutputString(pECB, "<TABLE>");
    //creazione testata Tabella
    OutputString(pECB, "<TR>");
    for (i=0; i<NumField;i++)
    {
    OutputString(pECB, "<TH>");
    OutputString(pECB, (PCSTR)(_bstr_t)rgflds[i]->Name);
    OutputString(pECB, "</TH>");
    }
    OutputString(pECB, "</TR>");

    //aggiunta della tabella con tutti i dati
    while (VARIANT_FALSE == rs->EndOfFile)
    {
    OutputString(pECB, "<TR>");
    for (i=0; i<NumField; i++)
    OutputString(pECB, "<TD>Autore</TD>");
    OutputString(pECB, "</TR>");
    rs->MoveNext();
    }
    OutputString(pECB, "</TABLE>");
    OutputString(pECB, "</BODY>");

    EndContent(pCtxt);


    }
    /*
    BOOL CManDBExtension::recDelete()
    {
    }
    BOOL CManDBExtension::recUpdate()
    {
    }*/

    // Do not edit the following lines, which are needed by ClassWizard.
    #if 0
    BEGIN_MESSAGE_MAP(CManDBExtension, CHttpServer)
    //{{AFX_MSG_MAP(CManDBExtension)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    #endif

    questo in teoria dovrebbe funzionare, ma nn mi crea la pagina
    il sistema funziona così
    mandb.dll?<nome_funzione>, digitando il nome della funzione il server esegue la funzione e ritorna una pagina HTML, ad esempio se nella dll viene chiamata la dbRead, la teoria vuole che venga visualizzata una tabella che contenga i dati presenti nel DB specificato.
    iloiacorb

    VB5, vb6, Java, C/C++, SQL, ACCESS, ORACLE, ASP, AUTOCAD, DBCAD, winME, 9x, 2000, Assembly 8086, 8051

  2. #2
    ap
    Se in un primo momento l'idea non è assurda, allora non c'è nessuna speranza che
    si realizzi
    .
    Os: WinME
    Lang: C++
    Editor: C++ Builder 6 Enterprise

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.