Announcement

Collapse
No announcement yet.

mysql compact auf win mobile

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • mysql compact auf win mobile

    hi @ all,

    bin gerade dabei eine app für mobile geräte zu bauen, dazu brauch ich eine datenbank... habe dazu das sql compact framework 3.5 integriert.. eine beispielapp die ich bei msdn gefunden habe funktioniert auch.. jetzt will die datenbank in meine app packen und blicke in dem beispiel von msdn (northwindoledb) nich richtig durch (geschätzte 2k loc).. kennt jemand ein tutorial wo einfach ma die crud funktionen mit c++ codebeispielen gezeigt werden?

  • #2
    also im endeffekt scheitere ich schon am erstellen der database

    hier der code..

    Code:
    database = new CDataBase();
    hr = database->InitDatabase();
    
    //im header
    const WCHAR DATABASE_CURA_DATBASE[] = L"curadb.sdf";
    const WCHAR TABLE_PATIENTS[] = L"Patients";
    const WCHAR SQL_CREATE_PATIENTS_TABLE[]	= L"CREATE TABLE Patients (PatientsID INT, LastName NVARCHAR(20), FirstName NVARCHAR(10), Address NVARCHAR(60), City NVARCHAR(15), Region NVARCHAR(15), PostalCode NVARCHAR(10), Country NVARCHAR(15), HomePhone NVARCHAR(24), Photo IMAGE)";
    const WCHAR SQL_CREATE_PATIENTS_INDEX[]	= L"CREATE INDEX PK_Patients on Patients (Patients ASC)";
    const WCHAR SQL_DROP_PATIENTS[]			= L"DROP TABLE Patients";
    
    //.. und die funktionen
    
    HRESULT CDataBase::InitDatabase()
    {
        HRESULT			   	hr				= NOERROR;		// Error code reporting
    	HANDLE				hFind;							// File handle
    	WIN32_FIND_DATA		FindFileData;					// The file structure description  
    
    	// If database exists, open it,
    	// Otherwise, create a new database, insert sample data.
    	//
    	hFind = FindFirstFile(DATABASE_CURA_DATBASE, &FindFileData);
    	if (INVALID_HANDLE_VALUE != hFind)
    	{
    		FindClose(hFind);
    		hr = OpenDatabase();
    	}
    	else
    	{
    		// Create Patient database
    		//
    		hr = CreateDatabase();
    		if(SUCCEEDED(hr))
    		{
    			// Insert sample data
    			//
    			hr = InsertEmployeeInfo();
    		}else{
    			MessageBox(NULL, L"Error - Create Database", L"Cura Database", MB_OK);
    		}
    	}
    	return hr;
    }
    
    HRESULT CDataBase::CreateDatabase(){
    	HRESULT hr = NOERROR;
    	DBPROPSET			dbpropset[1];					// Property Set used to initialize provider
    	DBPROP				dbprop[1];						// property array used in property set to initialize provider
    
    	IDBInitialize	    *pIDBInitialize      = NULL;    // Provider Interface Pointer
    	IDBDataSourceAdmin	*pIDBDataSourceAdmin = NULL;	// Provider Interface Pointer
    	IUnknown			*pIUnknownSession	 = NULL;	// Provider Interface Pointer
    	IDBCreateCommand	*pIDBCrtCmd			 = NULL;	// Provider Interface Pointer
    	ICommandText		*pICmdText			 = NULL;	// Provider Interface Pointer
    
    	VariantInit(&dbprop[0].vValue);
    
    	// Delete the DB if it already exists
    	//
    	DeleteFile(DATABASE_CURA_DATBASE);
    
       	// Create an instance of the OLE DB Provider
    	//
    	hr = CoCreateInstance(	CLSID_SQLSERVERCE_3_5, 
    							0, 
    							CLSCTX_INPROC_SERVER, 
    							IID_IDBInitialize, 
    							(void**)&pIDBInitialize);
    	if(FAILED(hr))
    	{
    		MessageBox(NULL, L"Error - Database CoCreateInstance", L"Cura Database", MB_OK);
    		goto Exit;
    	}
    
    	// Initialize a property with name of database
    	//
    	dbprop[0].dwPropertyID		= DBPROP_INIT_DATASOURCE;
    	dbprop[0].dwOptions			= DBPROPOPTIONS_REQUIRED;
    	dbprop[0].vValue.vt			= VT_BSTR;
    	dbprop[0].vValue.bstrVal	= SysAllocString(DATABASE_CURA_DATBASE);
    	if(NULL == dbprop[0].vValue.bstrVal)
    	{
    		hr = E_OUTOFMEMORY;
    		goto Exit;
    	}
    
    	// Initialize the property set
    	//
    	dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
    	dbpropset[0].rgProperties	 = dbprop;
    	dbpropset[0].cProperties	 = sizeof(dbprop)/sizeof(dbprop[0]);
    
    	// Get IDBDataSourceAdmin interface
    	//
    	hr = pIDBInitialize->QueryInterface(IID_IDBDataSourceAdmin, (void **) &pIDBDataSourceAdmin);
    	if(FAILED(hr))
    	{
    		goto Exit;
    	}
    
    	// Create and initialize data store
    	//
    	hr = pIDBDataSourceAdmin->CreateDataSource(1, dbpropset, NULL, IID_IUnknown, &pIUnknownSession);
    	if(FAILED(hr))	
        {
    		goto Exit;
        }
    
        // Get IDBCreateSession interface
        //
      	hr = pIDBInitialize->QueryInterface(IID_IDBCreateSession, (void**)&m_pIDBCreateSession);
    	if(FAILED(hr))
    	{
    		goto Exit;
    	}
    
    	// Get IDBCreateCommand interface
    	//
    	hr = pIUnknownSession->QueryInterface(IID_IDBCreateCommand, (void**)&pIDBCrtCmd);
    	if(FAILED(hr))
    	{
    		goto Exit;
    	}
    
    	// Create a command object
    	//
    	hr = pIDBCrtCmd->CreateCommand(NULL, IID_ICommandText, (IUnknown**)&pICmdText);
    	if(FAILED(hr))
    	{
    		goto Exit;
    	}
    
    	// Drop "Employees" table if it exists ignoring errors
    	//
    	executeSQL(pICmdText, (LPWSTR)SQL_DROP_PATIENTS);
    
    	// Create Employees table
    	//
    	hr = executeSQL(pICmdText, (LPWSTR)SQL_CREATE_PATIENTS_TABLE);
    	if(FAILED(hr))
    	{
    		goto Exit;
    	}
    
    	// Create Index
    	// Note: The sample table has small amount of demo data, the index is created here.
    	// In your application, to improve performance, index shoule be created after 
    	// inserting initial data. 
    	//
    	hr = executeSQL(pICmdText, (LPWSTR)SQL_CREATE_PATIENTS_INDEX);
    	if(FAILED(hr))
    	{
    		goto Exit;
    	}
    
    Exit:
        // Clear Variant
        //
    	VariantClear(&dbprop[0].vValue);
    
    	// Release interfaces
    	//
    	if(pICmdText)
    	{
    		pICmdText->Release();
    	}
    
    	if(pIDBCrtCmd)
    	{
    		pIDBCrtCmd->Release();
    	}
    
    	if(pIUnknownSession)
    	{
    		pIUnknownSession->Release();
    	}
    
    	if(pIDBDataSourceAdmin)
    	{
    		pIDBDataSourceAdmin->Release();
    	}
    
    	if(pIDBInitialize)
    	{
    		pIDBInitialize->Release();
    	}	
    
    	return hr;
    }
    .. die funktion opendatabase() habe ich nicht mit geschickt, weils eh nich soweit kommt -.- ^^

    .. wenn mir jemand helfen könnte wäre ich sehr dankbar ^^
    Zuletzt editiert von Daniel.Sander; 21.12.2010, 02:17.

    Comment


    • #3
      .. problem gelösst^^..

      wens interessiert, diese funktion erstellt eine datenbank namens create35.sdf..


      BSTR connStrCreate = NULL;

      HRESULT GetInterfacePointers(ISSCEEngine **ppEngine, ISSCEError **ppErr = NULL)
      {
      HRESULT hr = NOERROR;

      if (NULL != ppEngine)
      {
      *ppEngine = (ISSCEEngine *) NULL;

      hr = CoCreateInstance(CLSID_Engine, NULL,
      CLSCTX_INPROC_SERVER, IID_ISSCEEngine, (LPVOID *) ppEngine);

      }

      if (NULL != ppErr)
      {
      *ppErr = (ISSCEError *) NULL;

      hr = CoCreateInstance(CLSID_SSCEError, NULL,
      CLSCTX_INPROC_SERVER, IID_ISSCEError, (LPVOID *) ppErr);


      }

      Exit:
      return hr;
      }

      HRESULT CDataBase::InitDatabase()
      {
      ISSCEEngine *pEngine = NULL;
      ISSCEError *pError = NULL;

      HRESULT hr = NOERROR;
      BSTR connStrCreate = SysAllocString((const OLECHAR*)L"Data Source=created35.sdf; SSCEatabase Password='123'; ");

      hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);

      hr = GetInterfacePointers(&pEngine, &pError);


      hr = NOERROR;
      hr=pEngine->CreateDatabase(connStrCreate);


      Exit:
      SysFreeString(connStrCreate);
      CoUninitialize();

      return hr;
      }

      Comment


      • #4
        Und was hat das jetzt mit MySQL zu tun?

        Comment

        Working...
        X