Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Заполнение базы тестовіми данными. КОМУ? / 2 сообщений из 2, страница 1 из 1
18.05.2005, 11:14:51
    #33071467
Ser Tri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение базы тестовіми данными. КОМУ?
Вот код, имитирующий нагрузку на прямые таблицы БД ACCESS.
Кто может доделать (посадить на форму/отладить/скомпилить)?
Выложите сюда же результат, плз!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
Public d As New ADODB.Connection
Public r As New ADODB.Recordset
Public r1 As New ADODB.Recordset
Public t As New ADOX.Catalog
Public c As New ADODB.Command

Dim tbl As New ADOX.Table
Dim clmn As New ADOX.Column
Dim ind As New ADOX.Index
'
‘где-то должны быть настроены переменные d,r,r1,t,c на используемое соединение, что-то вроде
‘    varConnect = d.ConnectionString
‘    d.Open
‘    r.ActiveConnection = d.ConnectionString
‘    t.ActiveConnection = varConnect
‘

Private Sub cmdOKInsert_Click()
‘Ссылка на переключатели, позволяющие выбрать количество записей 
    If opt100 Then
        varN =  100 
    ElseIf opt1000 Then
        varN =  1000 
    ElseIf opt10000 Then
        varN =  10000 
    ElseIf opt100000 Then
        varN =  100000 
    End If
‘lstActiveTab    список таблиц,  вкоторые нужно внести записи
    For i =  0  To lstActiveTab.ListCount -  1 
'Удаление старых записей
        nametable = lstActiveTab.List(i)
        Set tbl = t.Tables(nametable)
        r.Open "select * from " & tbl.Name, varConnect, adOpenKeyset
        If r.RecordCount <>  0  Then
            If MsgBox("Удалять старые данные?", vbQuestion + vbYesNo) = vbYes Then
                c.CommandText = "delete * from " & nametable
                c.Execute
            Else
                n = r.RecordCount
                varN = IIf(n < varN, varN - n,  0 )
            End If
        End If
        r.Close
'Установка начальных значений
        s0 = ""
        s = ""
        
'Формирование начала оператора insert
        s0 = "insert into " & nametable & "("
        For j =  0  To tbl.Columns.Count -  1 
            s = s & tbl.Columns(j).Name & ","
        Next
        s = Mid(s,  1 , Len(s) -  1 )
'Формирование заданного количества строк для ввода в таблицы
        For k =  1  To varN
            s1 = ""
            For j =  0  To tbl.Columns.Count -  1 
                Set clmn = tbl.Columns(j)
'Проверка, не требуется ли уникальное значение для обрабатываемого поля
                flPrKey = False
                For l =  0  To tbl.Indexes.Count -  1 
                    Set ind = tbl.Indexes(l)
                    For ll =  0  To ind.Columns.Count -  1 
                        If ind.Columns(ll).Name = clmn.Name And (ind.PrimaryKey Or ind.Unique) Then
                            flPrKey = True
                        End If
                    Next
                Next
                
                If flPrKey Then
                    s1 = s1 & MyGenKey(clmn.Type, clmn.DefinedSize, clmn.Name, tbl.Name) & ","
                Else
                    s1 = s1 & MyGenData(clmn.Type, clmn.DefinedSize) & ","
                End If
            Next
'Выполнение оператора insert
            s1 = Mid(s1,  1 , Len(s1) -  1 )
            c.CommandText = s0 & s & ") values (" & s1 & ")"
'Debug.Print c.CommandText
            c.Execute
        Next
        r.Open "select * from " & tbl.Name, varConnect, adOpenKeyset
‘lstActiveQRec –список, отображающий количество записей в соответствующих таблицах
        lstActiveQRec.List(i) = r.RecordCount
        r.Close
    Next
    
End Sub

Public Function MyGenData(MyType As Long, MySize As Integer, n As Long) As String
    Randomize
    Select Case MyType
        Case adBigInt
            g = CStr(Int( 1000  * Rnd()))
        Case adInteger
            g = CStr(Int( 100  * Rnd()))
        Case adVarChar, adChar, adLongVarChar, adVarWChar, adWChar
            
            g = "'" & GenString(MySize) & "'"
        Case adDate
            g = "#" & Int( 11  * Rnd()) +  1  & "/" & Int( 28  * Rnd()) +  1  & "/" & Int(n * Rnd()) +  1  & "#"
            
        Case Else
            g = "null"
    End Select
    MyGenData = g

End Function

Public Function GenString(varSize As Integer) As String
    n = Int(varSize * Rnd())
    n = IIf(n =  0 ,  1 , n)
    For i =  1  To n
        Select Case Int( 3  * Rnd())
            Case  0 
                g = g & Chr(Asc("a") + Int( 26  * Rnd()))
            Case  1 
                g = g & Chr(Asc("A") + Int( 26  * Rnd()))
            Case  2 
                g = g & Chr(Asc("0") + Int( 10  * Rnd()))

        End Select
    Next
    GenString = g
End Function
Public Function MyGenKey(MyType As Long, MySize As Integer, p As String, tt As String, gg As Long) As String
    Select Case MyType
        Case adBigInt, adInteger
            g = gg +  1 
        Case adVarChar, adChar
            Do
                g = "'" & GenString(MySize) & "'"
                r1.Open "select count(*) from " & tt & " where " & p & "=" & g, , adOpenStatic, adLockReadOnly
                n = r1.RecordCount
                r1.Close
            Loop Until n =  0 
        Case adDate
            
            g = "#" & CStr(CDate(gg) +  1 ) & "#"
            
        Case Else
            g = "null"
    End Select
    MyGenKey = g

End Function
...
Рейтинг: 0 / 0
18.05.2005, 18:31:37
    #33073077
Один1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение базы тестовіми данными. КОМУ?
С этим лучше в форум "работа" обратится.
С выполнением требований к работодателям, к-е написаны в форуме "работа"
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Заполнение базы тестовіми данными. КОМУ? / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]