Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / База данных на open for random. Добавление нового поля. Удобный экспорт и импорт / 10 сообщений из 10, страница 1 из 1
24.01.2011, 00:47
    #37074311
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
Существуют или нет функции которые могут сообщить что в GBD_Artist есть поля ZmI_Artist_PN, Nxt_ZmI_Artist_PN, ZmI_Artist_PN_Prizv.... какого типа и размер As String ?

Задал такой вопрос, потому что, сделал базу данных. Весит например 20мб. Нужно добавить поле (в процесе новых идей) и базу сложно всегда сливать в временную а потом обратно. Всегда должен писать отдельно для этого процедуру. Может есть решение ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Type GBD_Artist
  ZmI_Artist_PN As String *  64                 
  Nxt_ZmI_Artist_PN As Long                 
  ZmI_Artist_PN_Prizv As String *  16          
  Nxt_ZmI_Artist_PN_Prizv As Long            
  ZmI_Artist_PN_Real As String *  64            
  Nxt_ZmI_Artist_PN_Real As Long              
  ZmI_Artist_PN_Prizv_Real As String *  16      
  Nxt_ZmI_Artist_PN_Prizv_Real As Long       
  BAN_ZmI_Artist_PN_Real As Boolean           
  NtF_ZmI_Artist_PN_Real As Boolean         
  Dbl_ZmI_Artist_PN_Real As Boolean          
  ZmI_Artist_PN_Real_Link_Sirec As Long     
  ZmI_Artist_PN_Real_Link_SkN As Long       
  ZmI_Artist_PN_Real_Link_Path As Long      
  ZmI_Artist_PN_Real_Link_Track As Long       
  ZmI_Artist_PN_Real_Link_URL As Long         
  ZmI_Artist_PN_Real_Link_Info As Long       
  ZmI_Artist_PN_Real_Link_avtozamina As Long 
  ACS_ZmI_Artist_PN_Real As Boolean          
  Del_ZmI_Artist_PN_Real As Boolean          
End Type

с уважением Андрей
...
Рейтинг: 0 / 0
24.01.2011, 02:25
    #37074372
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
Код: plaintext
1.
2.
3.
4.
Public Type NewBaza
 q1 As String *  5 
 q2 As Long
 q3 As String *  2 
End Type

Код: 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.
Private Sub Command1_Click()
Dim s As NewBaza
Dim f As Long
'  Open "c:\ggg1.txt" For Random As #1 Len = Len(s)
'    For f = 1 To 100
'      s.q1 = "aaaaa"
'      s.q2 = 100
'      s.q3 = "bb"
'      Put #1, f, s
'    Next
'  Close #1
  
  Dim R As Long
  R = InputBox("Укажите новый размер", "Конвертация", Len(s))
  Open "c:\ggg2.txt" For Output As # 2 : Close # 2 
  Open "c:\ggg2.txt" For Random As # 2  Len = R
  Open "c:\ggg1.txt" For Random As # 1  Len = Len(s)
    For f =  1  To LOF( 1 ) / Len(s)
      Get # 1 , f, s
      Put # 2 , f, s
    Next
  Close # 1 
  Close # 2 

End Sub

В таком самопале нужно только в выделеных местах чучуть подменить и готово. Сделаю отдельную функцию. Сейчас попробую еще с input() поиграть, может лучше будет, когда у меня будет готовый экзешник, куда можно перетащить мышкой файл чтоб быстро задать путь и файл, в одно текстовое окно скопировать старый код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public Type GBD_Artist
  ZmI_Artist_PN As String *  64                 
  Nxt_ZmI_Artist_PN As Long                 
  ZmI_Artist_PN_Prizv As String *  16          
  Nxt_ZmI_Artist_PN_Prizv As Long            
  ZmI_Artist_PN_Real As String *  64            
  Nxt_ZmI_Artist_PN_Real As Long              
  ZmI_Artist_PN_Prizv_Real As String *  16      
  Nxt_ZmI_Artist_PN_Prizv_Real As Long       
  BAN_ZmI_Artist_PN_Real As Boolean           
  NtF_ZmI_Artist_PN_Real As Boolean         
  Dbl_ZmI_Artist_PN_Real As Boolean          
  ZmI_Artist_PN_Real_Link_Sirec As Long     
  ZmI_Artist_PN_Real_Link_SkN As Long       
  ZmI_Artist_PN_Real_Link_Path As Long      
  ZmI_Artist_PN_Real_Link_Track As Long       
  ZmI_Artist_PN_Real_Link_URL As Long         
  ZmI_Artist_PN_Real_Link_Info As Long       
  ZmI_Artist_PN_Real_Link_avtozamina As Long 
  ACS_ZmI_Artist_PN_Real As Boolean          
  Del_ZmI_Artist_PN_Real As Boolean          
End Type
а в другое - новый чтоб расчитать длину

или вводить длину вручную. Хочется чтоб было удобно
...
Рейтинг: 0 / 0
24.01.2011, 03:18
    #37074388
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
Вопшем сделал все как и хотел. Чтоб не подсчитывать вручную копирую код с type в текстовое поле, там функция дает мне результат len1, другое поле дает newlen2. Мышкой перетаскиваю файл чтоб задать NameFile, либо вручную можно писать. NewNameFile предлагает с префиксом New к предыдущему, хотя можно редактировать на свой. И вот такая функция которая конвертирует
Код: 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.
'byte - 1 байт
'boolean - 2 байта
'long - 4
'integer - 2
'date - 8
'curency - 8
'single - 4
'double - 8
'decimal
'input
Public Function CovertBD(NameFile As String, NewNameFile As String, Len1 As Long, NewLen2 As Long)
  Dim R As Long
  Dim M As String
  Dim f As Long
  R = NewLen2 - Len1: If R <  1  Then Exit Function
  Open NameFile For Binary As # 1 
  Open NewNameFile For Output As # 2 
    For f =  1  To LOF( 1 ) / Len1
      M = Input(Len1,  1 )
      Print # 2 , M & Space(R);
    Next
  Close # 1 
  Close # 2 
End Function
...
Рейтинг: 0 / 0
24.01.2011, 03:46
    #37074400
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
Расчет делаю так:
Код: 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.
Private Sub Text1_Change()
  Dim vWords As Variant
  Dim vWord As Variant
  Dim s As String
  Dim i As Long
  Dim Kst As Long

  vWords = Split(Text1.Text, vbCrLf)

  For Each vWord In vWords
    s = LCase(vWord)
    i = InStr( 1 , s, " as ", vbTextCompare)
    If i <>  0  Then
    
      s = Mid(s, i +  4 )
      If s = "byte" Then
        Kst = Kst +  1 
      ElseIf s = "boolean" Then
        Kst = Kst +  2 
      ElseIf s = "long" Then
        Kst = Kst +  4 
      ElseIf s = "integer" Then
        Kst = Kst +  2 
      ElseIf s = "date" Then
        Kst = Kst +  8 
      ElseIf s = "curency" Then
        Kst = Kst +  8 
      ElseIf s = "single" Then
        Kst = Kst +  4 
      ElseIf s = "double" Then
        Kst = Kst +  8 
      ElseIf Left(s,  9 ) = "string * " Then
        Kst = Kst + Val(Mid(s,  9 ))
      End If
    End If
  Next
 Label5.Caption = Kst
End Sub
...
Рейтинг: 0 / 0
24.01.2011, 03:55
    #37074401
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
Андрей159,
размер пользовательского типа по его описанию
Код: 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.
Option Base  0 
' **********************************
' размер пользовательского типа по его описанию
' (!) тип не содержит строк переменной длинны, массивов, и т.п. 
' t - текстовое поле с описанием типа
Function TypeLen%(t as TextBox)
Dim a
Dim s$
Dim i%, ii%, iLen%
a= Split(t.Text, vbCrLf)
For i=  1  To UBound(a)-  1 
  ii= InStr( 1 , a(i), " As ")
  If ii >  0  Then
	Select Case Mid$(a(i), ii+  4 ,  4 )
	  Case "Byte": ii=  1 
	  Case "Bool", "Inte": ii=  2 
          Case "Long", "Sing": ii=  4 
	  Case "Date", "Doub", "Curr": ii=  8 
	  Case "Stri": ii= CInt(Mid$(a(i), ii+  13 ))
	  Case Else
	    ' мож.чего забыл...
	End Select
	iLen= iLen+ ii
  End If
Next i
Erase a
TypeLen= iLen
End Function
...
Рейтинг: 0 / 0
24.01.2011, 03:58
    #37074402
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
Тоже хороший вариант. спасибо за участие
...
Рейтинг: 0 / 0
24.01.2011, 04:04
    #37074404
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
Андрей159,
не заметил Ваш вариант от 03:46. Не сочтите за плагиат.
Бэзсоння(с)
...
Рейтинг: 0 / 0
24.01.2011, 04:20
    #37074410
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
Андрей159,
Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Text1_Change()
' ...
'      ElseIf s = "curency" Then
      ElseIf s = "currency" Then
        Kst = Kst +  8 
' ...
...
Рейтинг: 0 / 0
24.01.2011, 15:35
    #37075649
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
Ночью так и не понял зачем подчеркнул две одинаковые строчки, а проснувшись увидел что я поспешил и сделал синтаксис. Спасибо

И еще вопрос будет: а как програмно открыть базу access и там создать новую таблицу а в ней создать поля и описание к ним ? сохранить
...
Рейтинг: 0 / 0
25.01.2011, 10:27
    #37076818
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
Андрей159,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim cn, sConn$, sSQL$, sDBPath$

sDBPath="C:\mydatabase.mdb"
sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDBPath & ";User Id=admin;Password=;"
' Connection strings for Access  http://connectionstrings.com/access

Set cn = CreateObject("ADODB.Connection")
cn.Open sConn

sSQL = "create table table1(f1 integer primary key, f2 char(10), f3 DateTime)"

cn.Execute sSQL

sSQL= "insert into table1(f1, f2, f3) values (1060, 'HEAVY RAIN' , #02/24/2011#)"

cn.Execute sSQL

' sSQL = "delete from table1 where f1 = 1880"
' sSQL = "drop table table1"

cn.Close: Set cn = Nothing
Все форумы / Microsoft Access
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / База данных на open for random. Добавление нового поля. Удобный экспорт и импорт / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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