|
Создание базы данных |
472End Sub24732474' удаление таблицы *************************************************2475Public Sub DelTable(Index%) 2476 For i% = Index To (UBound(DB) - 1) 2477 DB(i) = DB(i + 1) 2478 Next i2479 If (UBound(DB) > 0) Then ReDim Preserve DB(UBound(DB) - 1) 2480End Sub24812482' если нужно то строка шифруется по паролю, иначе не изменяется2483Function CodeDecode(Index%, str$, col%, row%, Optional pass$ = "", Optional usepass As Boolean = False) As String2484 If Not usepass Then pass$ = DB(Index). Password2485 If (pass = "") Then2486 CodeDecode = str2487 Exit Function2488 End If2489 CodeDecode = ""2490 p% = 12491 Dim ch As Byte2492 For i% = 1 To Len(str) 2493 ch = Asc(Mid(str, i, 1)) Xor Asc(Mid(pass, p, 1)) Xor col Xor row2494 CodeDecode = CodeDecode + Chr(ch) 2495 p = p + 1: If p > Len(pass) Then p = 12496 Next i2497End Function24982499' сохранение БД в файле *************************************************2500Public Sub FlushDB(DBIndex%) 2501 Dim s$, W%2502 If Not UserIsAdmin Then2503 Call ProtectedMsg2504 Exit Sub2505 End If2506 If (DBPath <> "") Then2507 Call DeleteFile(DBPath) 2508 DBI% = FreeFile2509 Open DBPath For Binary As DBI2510 2511 ' заголовок - 122512 Put DBI,, DB(DBIndex). Header2513 2514 ' если надо, то сохраняю пароль2515 If (DB(DBIndex). Header. Flags And flPasswordNeed) Then2516 Dim str$, ch1 As Byte, ch2 As Byte2517 Dim lng As Byte, lng2 As Byte2518 lng = Len(DB(DBIndex). Password) 2519 lng2 = lng / 22520 Put DBI,, lng2521 2522 For i% = 1 To lng22523 ch1 = Asc(Mid(DB(DBIndex). Password, i, 1)) 2524 ch2 = Asc(Mid(DB(DBIndex). Password, lng - i + 1, 1)) 2525 str = Chr(ch1 Xor ch2) + str2526 Next i2527 For i = lng2 To 1 Step - 12528 Put DBI,, CByte(Asc(Mid(str, i, 1))) 2529 Next i2530 End If ' сохранение пароля2531 2532 ' данные полей2533 Dim l As Long2534 For i% = 0 To DB(DBIndex). Header. ColCount - 12535 Put DBI,, DB(DBIndex). Cols(i). Class2536 Put DBI,, DB(DBIndex). Cols(i). TitleLen2537 If (DB(Index). Header. Flags And flCoded) Then2538 Put DBI,, CodeDecode(DBIndex, DB(DBIndex). Cols(i). title, i, 0) 2539 Else2540 Put DBI,, DB(DBIndex). Cols(i). title2541 End If2542 Select Case DB(DBIndex). Cols(i). Class2543 Case ccString2544 If (DB(Index). Header. Flags And flCoded) Then2545 s = CodeDecode(DBIndex, CStr(DB(DBIndex). Cols(i). DefValue), i, 0) 2546 Else2547 s = CStr(DB(DBIndex). Cols(i). DefValue) 2548 End If2549 W = Len(s) 2550 Put DBI,, W2551 Put DBI,, s2552 Case ccInteger2553 l = CInt(DB(DBIndex). Cols(i). DefValue) 2554 Put DBI,, l2555 End Select2556 Next i2557 2558 ' запись контрольного байта2559 Put DBI,, ValidateByte2560 2561 ' записи2562 Dim f As TDBElem2563 Dim col As TDBElemData2564 For R% = 0 To DB(DBIndex). Header. RowCount - 12565 f = DB(DBIndex). Rows(R) 2566 For c% = 0 To DB(DBIndex). Header. ColCount - 12567 col = DB(DBIndex). Cols(c) 2568 ' в зависимости от типа данных колонки пишу в файл определённый тип данных2569 Select Case col. Class2570 ' если число - записываю как long2571 Case ccInteger2572 l = CLng(f. Fields(c)) 2573 Put DBI,, l2574 ' если строка - то байт длины и сама строка2575 Case ccString2576 If (DB(Index). Header. Flags And flCoded) Then2577 s = CodeDecode(DBIndex, CStr(f. Fields(c)), c, R) 2578 Else2579 s = CStr(f. Fields(c)) 2580 End If2581 ' Len возвращает 4 байта, а мне нужно 22582 W = Len(s) 2583 Put DBI,, W2584 Put DBI,, s2585 End Select2586 Next c2587 Next R2588 2589 MainForm. SB. Panels(3). Text = DBPath2590 Call MsgForm. InfoMsg("БД сохранена! ") 2591 2592 ' закрытие файла2593 Close2594 DBChanged = False2595 Call TestDBChanged2596 End If2597End Sub25982599' загрузка БД *************************************************2600Public Function LoadDB(DBIndex%, ByVal Path$) As Boolean2601 Dim DBH As TDBHeader2602 pwrd$ = ""2603 LoadDB = False2604 DBI% = FreeFile2605 DBP$ = Path2606 ' открываю БД2607 Open DBP For Binary As DBI2608 ' считываю заголовок2609 Get DBI,, DBH2610 With DBH2611 If (. Header <> "DBX") Then2612 Call MsgForm. ErrorMsg("БД повреждена! ") 2613 GoTo Notdata2614 End If26152616 ' если надо, то загружаю пароль2617 If (DBH. Flags And flPasswordNeed) Then2618 Dim lng As Byte2619 Get DBI,, lng2620 Dim str$, ch1 As Byte, ch2 As Byte, ch3 As Byte2621 str = ""2622 For i% = 1 To lng \ 22623 Get DBI,, ch12624 str = str + Chr(ch1) 2625 Next i2626'********************************************************2627 With PasswordForm2628. PassText = ""2629 2630. CaptionLabel = "Защита БД"2631. TextLabel = "Открываемая БД защищена паролем. Для работы с БД необходимо ввести пароль. "2632. Frame2. Visible = False2633. Frame1. Visible = True2634 2635 Dim ROE As Boolean2636 2637 ROE = Not ((DBH. Flags And flReadOnlyEnable) = flReadOnlyEnable) 2638 2639 If ROE Then2640. Frame3. Visible = True2641. NoFullLabel. Visible = False2642 Else2643. Frame3. Visible = False2644. NoFullLabel. Visible = True2645 End If2646. Show vbModal2647 If (. res) Then2648 ' допустимый тип доступа2649 Mode% = 02650 ' введёный пароль2651 str2$ = Trim(. PassText) 2652 2653 ' проверка пароля2654 lng_2 = Len(str2) 2655 If (lng_2 <> lng) Then2656 Mode = - 12657 GoTo bad2658 End If2659 For i% = 1 To lng \ 22660 ch1 = Asc(Mid(str2, i, 1)) 2661 ch2 = Asc(Mid(str2, lng - i + 1, 1)) 2662 ch3 = Asc(Mid(str, i, 1)) 2663 If ((ch1 Xor ch2) <> ch3) Then2664 Mode = - 12665 GoTo bad2666 End If2667 Next i2668 2669bad: 2670 ' обработка правильности пароля и уровня доступа2671 If (Mode = 0) And (. Check1 = 0) Then2672 Call MsgForm. InfoMsg("Пароль принят! ") 2673 pwrd = str22674 UserIsAdmin = True2675 Else2676 If ROE And (. Check1 = 1) Then2677 Call MsgForm. InfoMsg("Только чтение! ") 2678 UserIsAdmin = False2679 Else2680 Call MsgForm. ErrorMsg("Пароль не принят! Доступ запрещён! ") 2681 Unload PasswordForm2682 GoTo Notdata2683 End If2684 End If2685 Else2686 Unload PasswordForm2687 GoTo Notdata2688 End If ' if (. res) 2689 Unload PasswordForm2690 End With2691'********************************************************2692 End If26932694 ' выделение нужной памяти2695 If (. ColCount > 0) Then2696 ReDim DB(DBIndex). Cols(. ColCount - 1) 2697 If (. RowCount > 0) Then2698 ReDim DB(DBIndex). Rows(. RowCount - 1) 2699 For R% = 0 To. RowCount - 12700 ReDim DB(DBIndex). Rows(R). Fields(. ColCount - 1) 2701 Next R2702 End If2703 End If2704 2705 ' считывание данных полей2706 For i% = 0 To DBH. ColCount - 12707 ' получение класса2708 Get DBI,, DB(DBIndex). Cols(i). Class2709 ' получение длины заголовка2710 Get DBI,, DB(DBIndex). Cols(i). TitleLen2711 ' получение заголовка2712 s$ = ""2713 Dim B As Byte2714 For j% = 1 To DB(DBIndex). Cols(i). TitleLen2715 Get DBI,, B2716 s = s + Chr(B) 2717 Next j2718 s = CodeDecode(DBIndex, s, i, 0, pwrd, True) 2719 DB(DBIndex). Cols(i). title = s2720 ' получение значения по-умолчанию2721 Dim l As Long2722 Dim W%2723 Select Case DB(DBIndex). Cols(i). Class2724 Case ccInteger2725 Get DBI,, l2726 DB(DBIndex). Cols(i). DefValue = l2727 Case ccString2728 Get DBI,, W2729 s = ""2730 For j% = 1 To W2731 Get DBI,, B2732 s = s + Chr(B) 2733 Next j2734 s = CodeDecode(DBIndex, s, i, 0, pwrd, True) 2735 DB(DBIndex). Cols(i). DefValue = s2736 End Select2737 Next i2738 2739 ' чтение контрольного байта2740 Dim VB As Byte2741 Get DBI,, VB2742 If (VB <> ValidateByte) Then2743 Call MsgForm. ErrorMsg("БД повреждена! ") 2744 GoTo Notdata2745 End If27462747 ' считывание записей2748 Dim col As TDBElemData2749 For R% = 0 To. RowCount - 12750 For c% = 0 To. ColCount - 12751 col = DB(DBIndex). Cols(c) 2752 ' в зависимости от типа данных колонки пишу в файл определённый тип данных2753 Select Case col. Class2754 ' если число - считываю как long2755 Case ccInteger2756 Get DBI,, l2757 DB(DBIndex). Rows(R). Fields(c) = l2758 ' если строка - то байт длины и сама строка2759 Case ccString2760 Get DBI,, W2761 s = ""2762 For j% = 1 To W2763 Get DBI,, B2764 s = s + Chr(B) 2765 Next j2766 s = CodeDecode(DBIndex, s, c, R, pwrd, True) 2767 DB(DBIndex). Rows(R). Fields(c) = s2768 End Select2769 Next c2770 Next R2771 2772 End With2773 LoadDB = True2774 2775 DB(DBIndex). Header = DBH2776 DBPath = DBP2777 DBChanged = False2778 DB(DBIndex). Password = pwrd2779 2780 Call MsgForm. InfoMsg("БД загружена! ") 2781 2782Notdata: 2783 ' закрытие файла2784 Close2785End Function27862787' создание новой БД *************************************************2788Public Function NewDB(Path$) 2789 DBI% = FreeFile2790 ' удаляю БД2791 Call DeleteFile(Path) 2792 ' открываю БД2793 Open Path For Binary As DBI2794 ' применяю стандартный заголовок к БД2795 Call ClearAll2796 DBPath = Path2797 ' записываю заголовок БД2798 Put DBI,, DB(0). Header2799 ' запись контрольного байта2800 Put DBI,, ValidateByte2801 Close2802 Call MsgForm. InfoMsg("БД создана с настройками по-умолчанию! ") 2803End Function28042805' очистка ВСЕГО2806Public Sub ClearAll() 2807 ReDim DB(0) 2808 Call ClearHeader(DB(0). Header) 2809 DBChanged = False2810 DBPath = ""2811End Sub28122813' установка полей в начальные значения *************************************************2814Public Sub ClearHeader(H As TDBHeader) 2815 H. Header = "DBX"2816 H. Flags = 02817 H. ColCount = 02818 H. RowCount = 02819End SubМодуль: API. bas2820' создание файла2821Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long28222823' создание архивной копии БД2824Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long28252826' запуск браузера и почтовой программы2827Public Declare Function ShellExecute Lib "shell32. dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long28282829' звук2830Public Declare Function sndPlaySound Lib "winmm. dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long2831Public Const SND_APPLICATION = &H802832Public Const SND_ASYNC = &H12833Public Const SND_FILENAME = &H2000028342835' перемещение окна и анимация кнопок2836Public Type RECT2837 Left As Long2838 Top As Long2839 Right As Long2840 Bottom As Long2841End Type2842Public Type POINTAPI2843 x As Long2844 y As Long2845End Type2846Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long2847Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long2848Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long2849Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long2850Public Declare Function PtInRect Lib "user32" (lpRect As RECT, pt As POINTAPI) As Long28512852' перетаскивание2853Dim ClickBool As Boolean2854Dim Xs%, Ys%28552856Sub MInit() 2857 ClickBool = False2858 Xs = 02859 Ys = 02860End Sub28612862Sub MMove(ByVal Handle As Long, ByVal x%, ByVal y%) 2863 Dim R As RECT2864 If ClickBool Then2865 Call GetWindowRect(Handle, R) 2866 W% = R. Right - R. Left2867 H% = R. Bottom - R. Top2868 x = R. Left + (x - Xs) / Screen. TwipsPerPixelX2869 y = R. Top + (y - Ys) / Screen. TwipsPerPixelY2870 Call MoveWindow(Handle, x, y, W, H, True) 2871 End If2872End Sub28732874Sub MDown(ByVal x%, ByVal y%) 2875 ClickBool = True2876 Xs = x2877 Ys = y2878End Sub28792880Sub MUp() 2881 ClickBool = False2882End SubМодуль: DBConst. bas2883' результаты работы диалогов из MsgBox2884Public Const resBad = 0 ' выход, закрытием окна2885Public Const resOk = 1 ' Да2886Public Const resNo = 2 ' Нет2887Public Const resCancel = 3 ' Отмена28882889' константы типов данных2890Public Const ccInteger As Byte = 02891Public Const ccString As Byte = 128922893' флаги доступа доступа к БД2894 ' требовать пароль для входа2895Public Const flPasswordNeed As Byte = 12896 ' запрещать доступ на чтение без пароля2897Public Const flReadOnlyEnable As Byte = 22898 ' зашифрованность данных2899Public Const flCoded As Byte = 429002901' для диаграмм2902Type TDiagElem2903 Text As String2904 Val As Integer2905 Color As Long2906End Type29072908' права Только чтение2909Public Sub ProtectedMsg() 2910 Call MsgForm. ErrorMsg("Недостаточно прав для выполнения действия! ")
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
|
|
|
© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент. |
|
|