Помогите пожалуйста создать базу Access кодом, или при помощи Access только что бы он не отображался на рабочем столе и не выдавал сообщений об ошибках.
Заранее благодарен. Юрий.
			
		

CreateDatabase "c:\db1.mdb", dbLangGeneral

boevik писал(а):При использовании DAО:
- Код: Выделить всё
 CreateDatabase "c:\db1.mdb", dbLangGeneral

Option Explicit
Global db As DAO.Database
Private Const dbFileName As String = "database.mdb"
Private Const dbPassword As String = "password"
Public Enum ResultCodes
  rcUnknown = 0
  rcOK = 1
  rcCancel = 2
  rcError = 3
End Enum
Public Function InitDB() As ResultCodes
Dim F As String, res As ResultCodes
F = AppPath & dbFileName
If Len(Dir$(F)) = 0 Then
  If MsgBox("Не обнаружена база данных! Создать новую базу данных?", vbQuestion + vbYesNo) = vbYes Then
    On Error Resume Next
      Set db = DAO.CreateDatabase(F, dbLangCyrillic & ";pwd=" & dbPassword, dbVersion30)
      res = IIf(Err = 0, rcOK, rcError)
      db.Close
    On Error GoTo 0
    If res <> rcOK Then MsgBox "Не удается создать базу данных!", vbExclamation
  Else
    res = rcCancel
  End If
  If res <> rcOK Then InitDB = res: Exit Function
End If
InitDB = rcOK
Set db = DAO.OpenDatabase(F, False, False, dbLangCyrillic & ";pwd=" & dbPassword)
InitTables "SampleTable"
End Function
Public Function InitTables(ByVal TableName As String) As ResultCodes
Dim td As TableDef, I As Long
For I = 0 To db.TableDefs.Count - 1
  If db.TableDefs(I).Name = TableName Then Exit For
Next I
If I < db.TableDefs.Count Then Exit Function
Select Case TableName
  Case "SampleTable"
    Set td = CreateTableDef(TableName, Array("*|ID|ID", "U|Order|No", "U|FullName|No;Name", "RevName|-Name"), _
    "ID|+", "R|No|Long", "RZ|Name|Text*100", "RZ|Text|Memo")
  Case Else
    Exit Function
End Select
db.TableDefs.Append td
Set td = Nothing
End Function
Private Sub InitTable_Prepare(NumField As Integer, NumIndex As Integer, Fields() As Field, Indexes() As Index)
Dim I As Integer
ReDim Fields(0), Indexes(0)
If NumField > 0 Then ReDim Fields(1 To NumField)
If NumIndex > 0 Then ReDim Indexes(1 To NumIndex)
For I = 1 To NumField
  Set Fields(I) = New Field
Next I
For I = 1 To NumIndex
  Set Indexes(I) = New Index
Next I
End Sub
Private Function CreateTableDef(Name As String, Indexes As Variant, ParamArray Fields() As Variant) As TableDef
'Indexes - string or string array
'  Item: [[*][U][N]|]Name|[+|-]field ¹...
'    * - Primary
'    U - Unique (default for primary)
'    N - Ignore nulls
'    Field ¹ - field(s) numbers
'Fields: [[R][Z]|]Name|Type[*Size]
'  R - Required field (default)
'  Z - Allow zero length
'  Name - Field name
'  Type - Field type
'    +     - Long Auto Increment (counter)
'    BigInt- BigInt
'    Bin   - Binary
'    Bool  - Boolean
'    Byte  - Byte
'    Char  - Char
'    Cur   - Currency
'    Date  - Date
'    Dec   - Decimal
'    Dbl   - Double
'    Float - Float
'    GUID  - GUID
'    Int   - Integer
'    Long  - Long
'    LBin  - LongBinary
'    Memo  - Memo
'    Num   - Numeric
'    Sng   - Single
'    Text  - Text
'    Time  - Time
'  Size - Field size (in bytes for Text and Char)
Dim td As TableDef, fld() As Field, idx() As Index
Dim NF As Long, NI As Long, C As Long, N As Long, I As Long, Z As String
Dim S0 As String, S1 As String, S2 As String
For I = LBound(Fields) To UBound(Fields)
  If VarType(Fields(I)) = vbString Then NF = NF + 1
Next I
If VarType(Indexes) >= vbArray Then
  For I = LBound(Indexes) To UBound(Indexes)
    If VarType(Indexes(I)) = vbString Then NI = NI + 1
  Next I
ElseIf VarType(Indexes) = vbString Then
  Z = Indexes
  ReDim Indexes(0)
  Indexes(0) = Z
  If Len(Z) > 0 Then NI = 1
End If
InitTable_Prepare (NF), (NI), fld(), idx()
NF = 0
For C = LBound(Fields) To UBound(Fields)
  If VarType(Fields(C)) = vbString Then Z = Fields(C) Else Z = ""
  If Len(Z) > 0 Then
    NF = NF + 1
    If InStr(Z, "|") = 0 Then
      S0 = Z
      S1 = "+"
      S2 = "R"
    Else
      I = InStrRev(Z, "|")
      S1 = Mid$(Z, I + 1)
      Z = Left$(Z, I - 1)
      If InStr(Z, "|") = 0 Then
        S0 = Z
        S2 = "R"
      Else
        I = InStrRev(Z, "|")
        S0 = Mid$(Z, I + 1)
        S2 = Left$(Z, I - 1)
      End If
    End If
    S1 = UCase$(S1): S2 = UCase$(S2)
    fld(NF).Name = S0
    If InStr(S1, "-") > 0 Then
      Mid$(S1, InStr(S1, "-"), 1) = "*"
      fld(NF).Attributes = fld(NF).Attributes + dbFixedField
    End If
    If InStr(S1, "*") > 0 Then
      I = Val(Mid$(S1, InStr(S1, "*") + 1))
      Z = UCase$(Left$(S1, InStr(S1, "*") - 1))
    Else
      I = 0
      Z = S1
    End If
    Select Case Z
      Case "+"
        fld(NF).Type = dbLong
        fld(NF).Attributes = fld(NF).Attributes + dbAutoIncrField
      Case "BIGINT", "BIG INT"
        fld(NF).Type = dbBigInt
      Case "BIN", "BINARY"
        fld(NF).Type = dbBinary
      Case "BOOL", "BOOLEAN"
        fld(NF).Type = dbBoolean
      Case "BYTE"
        fld(NF).Type = dbByte
      Case "CHAR", "CHAR"
        fld(NF).Type = dbChar
      Case "CUR", "CURRENCY"
        fld(NF).Type = dbCurrency
      Case "DATE", "DATE"
        fld(NF).Type = dbDate
      Case "DEC", "DECIMAL"
        fld(NF).Type = dbDecimal
      Case "DBL", "DOUBLE"
        fld(NF).Type = dbDouble
      Case "FLOAT"
        fld(NF).Type = dbFloat
      Case "GUID"
        fld(NF).Type = dbGUID
      Case "INT", "INTEGER"
        fld(NF).Type = dbInteger
      Case "LONG", "LONG"
        fld(NF).Type = dbLong
      Case "LBIN", "LONGBINARY", "LONG BINARY"
        fld(NF).Type = dbLongBinary
      Case "MEMO"
        fld(NF).Type = dbMemo
      Case "NUM", "NUMERIC"
        fld(NF).Type = dbNumeric
      Case "SNG", "SINGLE"
        fld(NF).Type = dbSingle
      Case "TEXT", "TXT", "STRING", "STR"
        fld(NF).Type = dbText
      Case "TIME"
        fld(NF).Type = dbTime
    End Select
    If I > 0 Then fld(NF).Size = I
    fld(NF).Required = (InStr(S2, "R") > 0)
    Select Case fld(NF).Type
      Case dbText, dbMemo
        fld(NF).AllowZeroLength = (InStr(S2, "Z") > 0)
    End Select
  End If
Next C
NI = 0
For C = LBound(Indexes) To UBound(Indexes)
  If VarType(Indexes(C)) = vbString Then Z = Indexes(C) Else Z = ""
  If Len(Z) > 0 Then
    NI = NI + 1
    If InStr(Z, "|") = 0 Then
      S0 = Z
      S1 = ""
      S2 = ""
    Else
      I = InStrRev(Z, "|")
      S1 = Mid$(Z, I + 1)
      Z = Left$(Z, I - 1)
      If InStr(Z, "|") = 0 Then
        S0 = Z
      Else
        I = InStrRev(Z, "|")
        S0 = Mid$(Z, I + 1)
        S2 = Left$(Z, I - 1)
      End If
    End If
    If InStr(S2, "U") = 0 And InStr(S2, "*") > 0 Then S2 = S2 + "U"
    idx(NI).Name = S0
    idx(NI).Primary = (InStr(S2, "*") > 0)
    idx(NI).Unique = (InStr(S2, "U") > 0)
    idx(NI).IgnoreNulls = (InStr(S2, "N") > 0)
    N = UBound(Split(S1, ";")) - LBound(Split(S1, ";")) + 1
    S0 = ""
    For I = 1 To N
      Z = Split(S1, ";")(I - 1)
      If Left$(Z, 1) = "+" Then
        S2 = " Asc"
        Z = Mid$(Z, 2)
      ElseIf Left$(Z, 1) = "-" Then
        S2 = " Desc"
        Z = Mid$(Z, 2)
      Else
        S2 = ""
      End If
      If InStr(Z, " ") > 0 Then
        If Left$(Z, 1) <> "[" And Right$(Z, 2) <> "]" Then Z = "[" & Z & "]"
      End If
      If I > 1 Then S0 = S0 & ";"
      S0 = S0 & Z & S2
    Next I
    idx(NI).Fields = S0
  End If
Next C
Set td = New TableDef
td.Name = Name
For I = 1 To UBound(fld)
  td.Fields.Append fld(I)
Next I
For I = 1 To UBound(idx)
  td.Indexes.Append idx(I)
Next I
Erase fld, idx
Set CreateTableDef = td
Set td = Nothing
End Function


Public cn As New ADODB.Connection  'Обявляем новый объект доступный всему проэкту
Public rst As New ADODB.Recordset  'Обявляем новый объект доступный всему проэкту
Private Sub Form_Load() 
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security " & _
    "Info=True;Data Source=" & "Путь к твоей базе" & "\Temp.mdb;" & _
    "Mode=ReadWrite;" 'Устанавливаем соединение с базой
End Sub
Private Sub Form_Unload(Cancel As Integer)
    cn.Close 'Закрываем соединение с базой
End Sub
Private Sub Text1_Change()
    Dim itmX As ListItem
    Dim q As Integer
    Dim SQL As String
    Dim W, E As String
    If O1(0).Value = True Then
        W = ""
        E = "%"
    Else
        W = "%"
        E = "%"
    End If
    SQL = "Select * From Plat Where pltOsn Like '" & W & Text1 & E & "'" 'Строим запрос
    ListView1.ListItems.Clear 'Обнуляем набор записей в компоненте
    rst.Open SQL, cn, adOpenKeyset, adLockOptimistic 'Открываем Рекордсет со следующими параметрами: запрос, используемое соединение, (не помню), режим доступа к используемым таблицам...
    If rst.RecordCount > 0 Then 'Если количество результирующих записей в  больше ноля ...
        ProgressBar1.Max = rst.RecordCount 'Задаем максимальное значение 
    Else
        ProgressBar1.Max = 1
    End If
    ProgressBar1.Visible = True
    D.Caption = "" 'Это лабел - просто коряво обозваный
    K.Caption = "" 'Это лабел - просто коряво обозваный
    Zap.Caption = "" 'Это лабел - просто коряво обозваный
    For q = 1 To rst.RecordCount
        Zap.Caption = rst.RecordCount
        ProgressBar1.Value = q
        Set itmX = ListView1.ListItems.Add(, , rst.Fields(0), 0, 0) 'Добавляем запись в ListView1 и привязываем itmX к этой записи - после чего работая с itmX фактически работаеш с этой записью
            If Not IsNull(rst.Fields(1)) Then itmX.SubItems(1) = rst.Fields(1) 'Присваиваем значение подзаписи
            If Not IsNull(rst.Fields(2)) Then
                If rst.Fields(2) Then
                    itmX.SubItems(2) = "Дебет"
                    D.Caption = Str(Val(D.Caption) + rst.Fields(8))
                Else
                    itmX.SubItems(2) = "Кредит"
                    K.Caption = Str(Val(K.Caption) + rst.Fields(8))
                End If
            End If
            If Not IsNull(rst.Fields(3)) Then itmX.SubItems(3) = rst.Fields(3)
        rst.MoveNext 'Прерходим к следующей записи
    Next q
    rst.Close 'Закрываем Рекордсет

Часто люди падают с большой высоты из-за недостатков, которые помогли им ее достичь. [/img]



'******очистка всей таблице в базе данных*********
Rst2.MoveFirst            'перехожу на первую запись
Do While Rst2.EOF = False 'делать пока не конец тоблицы
  Rst2.Delete             ' удалять текущую запись
  Rst2.MoveNext           'перехожу на следующую запись
Loop
Rst2.Update               'Сохраняю дазу данных
'******** и все **********************************
Но только перед этим надо не забыть подключиться к базе данных

Ivan1 писал(а):Можно очень легко и просто сделать базу данных в
Accese только одно но надо делать в 97
а не в 2000 ...

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6