⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbfunc.c

📁 EVC4 编程CEDB数据库操作
💻 C
📖 第 1 页 / 共 2 页
字号:
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (C) 1993-1997  Microsoft Corporation.  All Rights Reserved.
//
//  MODULE:     dbfunc.c
//
//  PURPOSE:    Contains window procedures database related functions.
//
//  PLATFORMS:  WIN32_WCE
//
//  FUNCTIONS:
//      MainWndProc()       - Message handler for the main application window
//      Main_OnCommand()    - Processes WM_COMMAND messages
//      Main_OnDestroy()    - Handles the WM_DESTROY message
//      AboutDlgProc()      - Message handler for the application's about
//                            dialog.
//
//  COMMENTS:
//
//

#include <windows.h>
#include <windowsx.h>
#if !defined(_WIN_CE_EMULATION)
	#include <memory.h>
#endif
#include <aygshell.h>
#include <commctrl.h>
#include <tchar.h>
#include "resource.h"
#include "globals.h"


//
//  FUNCTION:   NewDBDlgProc( HWND  hWnd,UINT  message, WPARAM  wParam, LPARAM  lParam )
//
//  PURPOSE:    Callback function for creating a new Database
//
//  PARAMETERS:
//
//  RETURN VALUE:
//      (LRESULT) Dependant on the specific notification.  See Below.
//
//  COMMENTS:
//

BOOL CALLBACK NewDBDlgProc( HWND  hWnd,UINT  message, WPARAM  wParam, LPARAM  lParam )
{
  WORD wNotifyCode, wID;
  HWND hwndCtl;

  wNotifyCode = HIWORD(wParam); // notification code
  wID = LOWORD(wParam);         // item, control, or accelerator identifier
  hwndCtl = (HWND) lParam;      // handle of control

  switch(message)
  {
	case WM_INITDIALOG:
	{
		//On Pocket PC devices you normally create all Dialog's as fullscreen dialog's
		// with an OK button in the upper corner. You should get/set any program settings
		// during each modal dialog creation and destruction
		SHINITDLGINFO shidi;
		// Create a Done button and size it.
		shidi.dwMask = SHIDIM_FLAGS;
		shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
		shidi.hDlg = hWnd;
		//initialzes the dialog based on the dwFlags parameter
		SHInitDialog(&shidi);
		SetFocus(GetDlgItem(hWnd,IDC_DBNAME));

		SetFocus(GetDlgItem(hWnd,IDC_DBNAME));
		return TRUE;
	}

    case WM_COMMAND:
    {
		switch(wID)
		{
			case IDCANCEL:
					EndDialog(hWnd, IDCANCEL);
					break;
				case IDOK:
				{
					TCHAR szNewDBName[CEDB_MAXDBASENAMELEN];
					DWORD dwNewDBType = 929292; // hardcode for now

					if ( GetDlgItemText(hWnd,IDC_DBNAME, szNewDBName, (CEDB_MAXDBASENAMELEN-10) ))
					{
						CEOID CeOid;
						_tcscat(szNewDBName,TEXT("_TEST"));

						if ( !(CeOid =CeCreateDatabase(szNewDBName, dwNewDBType, 0, NULL)) )
						{
							TCHAR szBuf[50];
                            long lError;

                            lError = GetLastError();
   							wsprintf(szBuf, TEXT("ERROR: CeCreateDatabase failed with error: %ld\r\n"), lError);
   							OutputDebugString(szBuf);
                            switch(lError)
                            {
                                case ERROR_DISK_FULL:
                                    wsprintf(szBuf, TEXT("There is not enough disk space.\r\n"),szNewDBName);
                                    break;
                                case ERROR_DUP_NAME:
                                    wsprintf(szBuf, TEXT("Database '%s' already exists.\r\n"),szNewDBName);
                                    break;
                                default:
                                    break;
                            }
							MessageBox(hWnd, szBuf, TEXT("Error"), MB_OKCANCEL );

						}
						else
						{
							HANDLE          hNewDB;
							FILETIME        FileTime;
							SYSTEMTIME      SystemTime;
							LPWSTR          lpStr;
							LPWSTR          lpBlob;
							HWND            hwndTV;
							HWND            hParent;
							
							if( (hParent = GetParent(hWnd) ) )
								hwndTV = GetDlgItem(hParent, IDC_TREEVIEW);
							else
								hwndTV = GetDlgItem(hWnd, IDC_TREEVIEW);

							// Try to open DB
							hNewDB = CeOpenDatabase(&CeOid, NULL, 0, 0, NULL);
							if ( hNewDB == INVALID_HANDLE_VALUE)
							{
								TCHAR szError[50];
								wsprintf(szError, TEXT("ERROR: CeOpenDatabase failed after creating DB (%ld)"), GetLastError());
								OutputDebugString(szError);
								MessageBox(hwndTV, szError, TEXT("Error"), MB_OKCANCEL );
							}
							else
							{

								CEPROPVAL  NewRecProps[7];

								NewRecProps[0].propid = PROP_SHORT;
								NewRecProps[0].wLenData = 0;
								NewRecProps[0].wFlags = 0;
								NewRecProps[0].val.iVal = -1;

								NewRecProps[1].propid = PROP_USHORT;
								NewRecProps[1].wLenData = 0;
								NewRecProps[1].wFlags = 0;
								NewRecProps[1].val.uiVal = 1;

								NewRecProps[2].propid = PROP_LONG;
								NewRecProps[2].wLenData = 0;
								NewRecProps[2].wFlags = 0;
								NewRecProps[2].val.lVal = 0xffffffff;

								NewRecProps[3].propid = PROP_ULONG;
								NewRecProps[3].wLenData = 0;
								NewRecProps[3].wFlags = 0;
								NewRecProps[3].val.ulVal = 0x7FFFFFFF;

								SystemTime.wYear = 1999;
								SystemTime.wMonth = 12;
								SystemTime.wDayOfWeek = 6;
								SystemTime.wDay = 25;
								SystemTime.wHour = 12;
								SystemTime.wMinute = 12;
								SystemTime.wSecond = 12;
								SystemTime.wMilliseconds = 12;

								SystemTimeToFileTime(&SystemTime,&FileTime);
								NewRecProps[4].propid = PROP_FILETIME;
								NewRecProps[4].wLenData = 0;
								NewRecProps[4].wFlags = 0;
								NewRecProps[4].val.filetime = FileTime;
								
								lpStr = (TCHAR *)LocalAlloc(LMEM_FIXED, 50 * sizeof(TCHAR));
								if ( lpStr )
									_tcscpy(lpStr, TEXT("This is a string property"));

								NewRecProps[5].propid = PROP_LPWSTR;
								NewRecProps[5].wLenData = 0;
								NewRecProps[5].wFlags = 0;
								NewRecProps[5].val.lpwstr = lpStr;

								lpBlob = (TCHAR *)LocalAlloc(LMEM_FIXED, 50  * sizeof(TCHAR));
								if ( lpBlob )
									_tcscpy(lpBlob, TEXT("This is a blob property"));

								NewRecProps[6].propid = PROP_CEBLOB;
								NewRecProps[6].wLenData = 0;
								NewRecProps[6].wFlags = 0;
								NewRecProps[6].val.blob.dwCount = 50  * sizeof(TCHAR);
								NewRecProps[6].val.blob.lpb  = (LPBYTE) lpBlob;

                                //write record out with 7 property fields...
                                if( !CeWriteRecordProps(hNewDB, 0, 7, NewRecProps) )
								{
									TCHAR szError[50];
									wsprintf(szError, TEXT("ERROR: CeWriteRecordProps failed (%ld)"), GetLastError());
									OutputDebugString(szError);
									MessageBox(hwndTV, szError, TEXT("Error"), MB_OKCANCEL );
								}

								if( lpBlob )
									LocalFree(lpBlob);
								if( lpStr )
									LocalFree(lpStr);


								CloseHandle(hNewDB);
								if (!AddItemToTree(hwndTV, szNewDBName, NULL, TRUE, CeOid))
									OutputDebugString(TEXT("ERROR: Failed to add Database"));
							}


						}
					}
					else
						OutputDebugString(TEXT("ERROR: CeCreateDatabase Error. Error retreiving data.\r\n"));

					EndDialog(hWnd, IDOK);

					break;
				}
			default:
			return(FALSE);
		}
		break;
    }
    default:
      return(FALSE);
  }
  return (TRUE);
}


//
//  FUNCTION:   ShowDBInformation( TCHAR * pDBName)
//
//  PURPOSE:    Display database information in edit control
//
//  PARAMETERS:
//
//  RETURN VALUE:
//
//  COMMENTS:
//

void WINAPI ShowDBInformation( TCHAR * pDBName)
{
	TCHAR           szBuf[2000];
	TCHAR           szSort[100] = {0};
	CEOID          CeOID = 0;
    CEOIDINFO  CeObject;
	HANDLE          hOpenDB;
	int                     i;

	// no notification installed
	hOpenDB = CeOpenDatabase(&CeOID, pDBName, 0, 0, NULL);
	if ( hOpenDB == INVALID_HANDLE_VALUE)
	{
		wsprintf(szBuf, TEXT("ERROR: CeOpenDatabase failed to open database.(Error: %ld)\r\n"), GetLastError());
		OutputDebugString(szBuf);
		MessageBox(NULL, szBuf, TEXT("ERROR"), MB_OKCANCEL );
	}
	else
	{
		if ( !CeOidGetInfo(CeOID, &CeObject) )
		{
			wsprintf(szBuf, TEXT("ERROR: CeOidGetInfo failed with error (%ld)\r\n"), GetLastError());
			OutputDebugString(szBuf);
			MessageBox(NULL, szBuf, TEXT("ERROR"), MB_OKCANCEL );
		}
		else
		{
            switch(CeObject.wObjType)
            {
                case OBJTYPE_INVALID:
                    wsprintf(szBuf, TEXT("The object store contains no valid object that has this object identifier. \n"));
                    OutputDebugString(szBuf);
                    break;
                case OBJTYPE_FILE:
                    wsprintf(szBuf, TEXT("The object is a file. \n"));
                    OutputDebugString(szBuf);
                    break;
                case OBJTYPE_DIRECTORY:
                    wsprintf(szBuf, TEXT("The object is a directory. \n"));
                    OutputDebugString(szBuf);
                    break;
                case OBJTYPE_DATABASE:
                    wsprintf(szBuf, TEXT("The object is a database. \n"));
                    OutputDebugString(szBuf);
                    break;
                case OBJTYPE_RECORD:
                    wsprintf(szBuf, TEXT("The object is a record inside a database. \n"));
                    OutputDebugString(szBuf);
                    break;
                default:
                    wsprintf(szBuf, TEXT("Unrecognized wObjType\n"));
                    OutputDebugString(szBuf);
            }
			wsprintf(szBuf, TEXT("DB Flags: %#lx\r\nDB Name: %ls\r\nDB Type: %ld\r\n#Records: %d\r\n#Sort Orders: %d\r\nSorted On:"),
			CeObject.infDatabase.dwFlags,
			CeObject.infDatabase.szDbaseName,
			CeObject.infDatabase.dwDbaseType,
			CeObject.infDatabase.wNumRecords,
			CeObject.infDatabase.wNumSortOrder);
			for ( i = 0 ; i < CeObject.infDatabase.wNumSortOrder ; i++)
			{
				wsprintf(szSort, TEXT("\r\nRow: %ld\r\n"), CeObject.infDatabase.rgSortSpecs[i].propid);
						
				if ( CeObject.infDatabase.rgSortSpecs[i].dwFlags & CEDB_SORT_DESCENDING )
					_tcscat(szSort, TEXT("  DESCENDING \r\n"));

				if ( CeObject.infDatabase.rgSortSpecs[i].dwFlags & CEDB_SORT_CASEINSENSITIVE )
					_tcscat(szSort, TEXT("  CASEINSENSITIVE \r\n"));

				if ( CeObject.infDatabase.rgSortSpecs[i].dwFlags & CEDB_SORT_UNKNOWNFIRST )
					_tcscat(szSort, TEXT("  UNKNOWNFIRST \r\n"));

				if ( CeObject.infDatabase.rgSortSpecs[i].dwFlags & CEDB_SORT_GENERICORDER )
					_tcscat(szSort, TEXT("  GENERICORDER \r\n"));
				
				_tcscat(szBuf, szSort);

			}
			SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)szBuf);

		}
		CloseHandle(hOpenDB);
	}
}



//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -