powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
10 сообщений из 10, страница 1 из 1
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
    #37074311
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существуют или нет функции которые могут сообщить что в 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
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
    #37074372
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
    #37074388
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопшем сделал все как и хотел. Чтоб не подсчитывать вручную копирую код с 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
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
    #37074400
Фотография Андрей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.
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
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
    #37074401
Андрей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
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
    #37074402
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже хороший вариант. спасибо за участие
...
Рейтинг: 0 / 0
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
    #37074404
Андрей159,
не заметил Ваш вариант от 03:46. Не сочтите за плагиат.
Бэзсоння(с)
...
Рейтинг: 0 / 0
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
    #37074410
Андрей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
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
    #37075649
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ночью так и не понял зачем подчеркнул две одинаковые строчки, а проснувшись увидел что я поспешил и сделал синтаксис. Спасибо

И еще вопрос будет: а как програмно открыть базу access и там создать новую таблицу а в ней создать поля и описание к ним ? сохранить
...
Рейтинг: 0 / 0
База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
    #37076818
Андрей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
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / База данных на open for random. Добавление нового поля. Удобный экспорт и импорт
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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