Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: А у кого нить есть ...???
 
 автор: час   (31.07.2009 в 10:08)   личное сообщение
 
 

У кого нибудь имеется???
Функция переноса наименований столбцов табицы в описание столбцов таблицы.
Вручную запарился - мозоль на кнопке мышки.....

  Ответить  
 
 автор: osmor   (31.07.2009 в 10:45)   личное сообщение
 
 

как-то так для всех таблиц и всех полей
ну еще бы надо вычленить системные и связанные таблицы

Public Sub setFieldDescription()
Dim tbl As TableDef
Dim db As dao.Database
Dim fld As dao.Field
Dim prpNew As dao.Property
  On Error GoTo Err_Property
Set db = CurrentDb
For Each tbl In db.TableDefs
    For Each fld In tbl.Fields
        fld.Properties("Description") = fld.name
    Next
Next
Err_Property:

' Ошибка 3270 означает, что свойство не найдено.
    If DBEngine.Errors(0).Number = 3270 Then
        ' Создает свойство, задает его значение и добавляет
        ' свойство в семейство Properties.
        Set prpNew = fld.CreateProperty("Description", dbText, fld.name)
        fld.Properties.Append prpNew
        Resume Next
    Else
        ' При возникновении другой ошибки выводит сообщение.
    
        MsgBox "Код ошибки: " & Err.Number & vbCr & Err.Description
    
    
    End If

End Sub




А ты что поля по русски называешь?

  Ответить  
 
 автор: час   (31.07.2009 в 13:05)   личное сообщение
 
 

Поля, по аглицки а вот коментарий к полям.....
Чёта я в терминологии запутался.


Наименование поля -ID
Наименование колонки - идентификатор
Описание ....................................идентификатор ..............

  Ответить  
 
 автор: osmor   (31.07.2009 в 14:30)   личное сообщение
 
 

какие колонки!!!?
Есть поле
у него есть свойства:
name - имя
Caption - подпись
Description - описание
и т.д.
Description - это то что в режиме конструктора показывается вверху справа от имени после типа поля
а
Caption - это то что внизу где свойства поля
тебе что куда нужно перенести?

  Ответить  
 
 автор: час   (31.07.2009 в 14:51)   личное сообщение
 
 

Виноват

Хотел сказать

присвоить (Description) = значение (Caption)

  Ответить  
 
 автор: час   (31.07.2009 в 14:54)   личное сообщение
 
 

Тогда видимо вот так будет.........


For Each fld In tbl.Fields
fld.Properties("Description") = fld.Properties("Caption")
Next

  Ответить  
 
 автор: час   (31.07.2009 в 14:58)   личное сообщение
 
 

ОГРОМНОЕ СПАСИБО!!!!
ВСЁ ПОПЁРЛО,,,

Public Sub setFieldDescription()
' пренос наименований в описания
Dim tbl As TableDef
Dim db As DAO.Database
Dim fld As DAO.Field
Dim f As Long
Dim prpNew As DAO.Property
  On Error GoTo Err_Property
Set db = CurrentDb
For Each tbl In db.TableDefs
If Left(tbl.Name, 4) = "MSys" Then GoTo dalee
If Left(tbl.Name, 4) = "~TMP" Then GoTo dalee
    For Each fld In tbl.Fields
        fld.Properties("Description") = fld.Properties("Caption")
    Next
dalee:
Next
Err_Property:

' Ошибка 3270 означает, что свойство не найдено.
    If DBEngine.Errors(0).Number = 3270 Then
        ' Создает свойство, задает его значение и добавляет
        ' свойство в семейство Properties.
        Set prpNew = fld.CreateProperty("Description", dbText, fld.Properties("Caption"))
        fld.Properties.Append prpNew
        Resume Next
    Else
        ' При возникновении другой ошибки выводит сообщение.
     
        MsgBox "Код ошибки: " & Err.Number & vbCr & Err.Description
     
     
    End If

End Sub

Private Sub Кнопка0_Click()
setFieldDescription
End Sub

  Ответить  
 
 автор: osmor   (31.07.2009 в 15:00)   личное сообщение
 
 

ну вот.
А то "столбцы", "колонки"

  Ответить  
 
 автор: Гоблин   (31.07.2009 в 19:42)   личное сообщение
 
 

Вопрос. Чем плохо называть поля таблиц и сами таблицы кирилицей?

Как-то влияет на надежность базы в сети? Способствует разрушению базы? Дурной тон в среде программистов?

Просто интересно.

  Ответить  
 
 автор: osmor   (31.07.2009 в 20:40)   личное сообщение
 
 

возможно сейчас это уже где-то дань традиции.
в прошлых версиях MSA встречались проблемы с русскими именами полей, причем очень трудно диагностируемые.
При переносе таблиц на MS SQL сервер таблицы и поля названные по русски вызывали ошибку при переносе, и на сервере не работали.
Так просто удобнее набирать код - не нужно переключать раскладку, а то операторы по английски, а имена переменных и полей по русски.
Помогает выучить англицские слова :-)

  Ответить  
 
 автор: Lukas   (31.07.2009 в 20:46)   личное сообщение
 
 

У меня давеча, при ответе на вопрос, отказывался работать запрос на объединение:
то ему вдоль что-то не нравится, то поперек нехорошо.
Переименовал таблицу - все моментом заработало.
В оригинальном имени были и латиница и кириллица и цифры и символы подчеркивания, винегред какой-то.

  Ответить  
 
 автор: Гоблин   (31.07.2009 в 23:35)   личное сообщение
 
 

Спасибо просветили. Где-то так и предполагал.

  Ответить  
 
 автор: час   (03.08.2009 в 09:28)   личное сообщение
 
 

Пробую то же самое в VB6
Не получается


Public Function FUN_FIELD_TABLE(STR_PATH_BAZA As String, STR_BAZA_NAME As String, STR_TABLE_NAME As String)
' перебор полей таблицы
Dim rst As ADODB.Recordset ' набор записей
Dim Field As ADODB.Field
Set rst = New ADODB.Recordset

rst.Open "select * FROM KEYBOARD_TBL", GLB_con, adOpenKeyset, adLockOptimistic
For Each Field In rst.Fields
MsgBox Field.Properties("Caption") - не катит
MsgBox Field.Properties("Type")
'MsgBox Field.Properties("Value") - не катит
Call FUN_СREATE_FIELD(STR_PATH_BAZA, STR_BAZA_NAME, STR_TABLE_NAME, Field.Name, "Value")
'
Next
Set rst = Nothing
End Function

  Ответить  
 
 автор: osmor   (03.08.2009 в 09:41)   личное сообщение
 
 

Ты пытаешься изменять свойства полей recordset, кроме того ты используешь ADO
В примере используется DAO и объекты Field объета Tabledef
или используй DAO
или используй ADOX

  Ответить  
 
 автор: час   (03.08.2009 в 12:19)   личное сообщение
 
 

ДА?

  Ответить  
 
 автор: час   (01.08.2009 в 09:32)   личное сообщение
 
 

Во, блин,
слыхал? Гоблин.......
А у меня давиче
============
назвал я поле словом PATH
и нихрена ничё не работает
переименовал в PATHER
и заработало.....
Скока нюансов

  Ответить  
 
 автор: час   (03.08.2009 в 12:39)   личное сообщение
 
 

Чёта ваще ничё не хочет пахать


Public Function FUN_FIELD_TABLE(STR_PATH_BAZA As String, STR_BAZA_NAME As String, STR_TABLE_NAME As String)

'Dim adoxCat As New ADOX.Catalog
Dim adoxCat As ADOX.Catalog
Dim adoxTbl As ADOX.Table
Dim Field As ADOX.Column
Dim strDBPath As String

Set adoxCat = New ADOX.Catalog

strDBPath = FUN_Patch_File(STR_PATH_BAZA, STR_BAZA_NAME) '“C: ExamplDBMyDB.mdb”

adoxCat.ActiveConnection = "provider=Microsoft.JET.OLEDB.4.0;" & _
"data source=" & strDBPath

For Each adoxTbl In adoxCat.Tables
If adoxTbl.Name = STR_TABLE_NAME Then
For Each Field In adoxTbl.Columns
MsgBox Field.Name
MsgBox Field.Properties("Type")
MsgBox Field.Properties("Value")

Next
End If
Next
'Set rst = Nothing
End Function

  Ответить  
 
 автор: час   (03.08.2009 в 12:51)   личное сообщение
 
 

И так тожа не пахает


Dim adoxCat As ADOX.Catalog
Dim col As ADOX.Column
Dim strDBPath As String

Set adoxCat = New ADOX.Catalog

strDBPath = FUN_Patch_File(STR_PATH_BAZA, STR_BAZA_NAME) '“C: ExamplDBMyDB.mdb”

adoxCat.ActiveConnection = "provider=Microsoft.JET.OLEDB.4.0;" & _
"data source=" & strDBPath

For Each col In adoxCat(STR_BAZA_NAME).Columns
MsgBox col.Name
Next col

  Ответить  
 
 автор: час   (03.08.2009 в 13:03)   личное сообщение
 
 

Опять нет таких свойств


Dim adoxCat As ADOX.Catalog
Dim col As ADOX.Column
Dim adoxTbl As ADOX.Table
Dim strDBPath As String

Set adoxCat = New ADOX.Catalog

adoxCat.ActiveConnection = GLB_con
For Each adoxTbl In adoxCat.Tables
If adoxTbl.Name = "USER_ACCESS" Then
For Each col In adoxCat(adoxTbl.Name).Columns
MsgBox col.Name
MsgBox col.Properties("Type")
MsgBox col.Properties("Description")
Next col
End If
Next adoxTbl

  Ответить  
 
 автор: час   (03.08.2009 в 19:49)   личное сообщение
 
 

КАК выловить Description????????

  Ответить  
 
 автор: Lukas   (03.08.2009 в 20:15)   личное сообщение
 
 

Зачем?
Медленно это.

  Ответить  
 
 автор: час   (03.08.2009 в 20:39)   личное сообщение
 
 

А как быстро???

  Ответить  
 
 автор: Lukas   (03.08.2009 в 20:45)   личное сообщение
 
 

Запиши в сервисную табличку все что надо, и оттуда почитывай. Раза в 3-4 быстрее на родных таблицах Access, чем читать доп. свойства полей таблиц.

  Ответить  
 
 автор: час   (03.08.2009 в 20:55)   личное сообщение
 
 

Кабы знать заранее что там будет..........

  Ответить  
 
 автор: Lukas   (03.08.2009 в 21:03)   личное сообщение
 
 


А что там может быть?
И кто кроме автора туда что писать может/будет?
Что-то Сергей Александрович вы недоговариваете.

  Ответить  
 
 автор: час   (03.08.2009 в 21:12)   личное сообщение
 
 

Недоговариваете, Недоговариваете,Недоговариваете,Недоговариваете...................
Дело в том, что всё меняется названия полей заголовки , количество полей.....
А функция она одна и ей невдомёк чё там этот автор СерСаныч тама накуралесил- отсюда ошибки ....
Делаем универсальную функцу
А сейчас которую делаю дык ваще в тупике

  Ответить  
 
 автор: час   (03.08.2009 в 21:16)   личное сообщение
 
 

Создал я новую базу программно
Создал там программно таблу
Поля таблы
Всё программно и точно как источник - всё автоматом
Теперь надо перенести данные тожа автоматом из соответствующего поля в аналогичное и всё программно.....
и сижу с бараном на новые ворота любуемся
у него (у барана) рога в раскарячку, а у мну мозг аннннналллогична.

  Ответить  
 
 автор: час   (03.08.2009 в 21:18)   личное сообщение
 
 


Public Function FUN_TRANSFER_DATA(STR_PATH_BAZA As String, STR_BAZA_NAME As String, STR_TABLE_NAME As String)
' Добавление ДАННЫХ В таблицу выгрузки из арма
Dim Field As ADODB.Field
Dim WHERE_connection As ADODB.Connection ' подключение к базе КУДА
Dim RST_FROM_WHERE As ADODB.Recordset ' ОТКУДА
Dim RST_WHERE As ADODB.Recordset 'КУДА
Dim strDBPath As String ' ПУТЬ

strDBPath = FUN_Patch_File(STR_PATH_BAZA, STR_BAZA_NAME) ' ПУТЬ К НОВОЙ БАЗЕ
WHERE_connection = "provider=Microsoft.JET.OLEDB.4.0;" & _
"data source=" & strDBPath

Set RST_FROM_WHERE = New ADODB.Recordset
Set RST_WHERE = New ADODB.Recordset

RST_FROM_WHERE.Open "SELECT * " & STR_TABLE_NAME, GLB_con, adOpenKeyset, adLockOptimistic
RST_WHERE.Open "SELECT * " & STR_TABLE_NAME, WHERE_connection, adOpenKeyset, adLockOptimistic

If RST_FROM_WHERE.EOF = True Then
RST_FROM_WHERE.Close
Set RST_FROM_WHERE = Nothing
Exit Function
End If

If Not RST_FROM_WHERE.BOF Then RST_FROM_WHERE.MoveFirst
Do While Not RST_FROM_WHERE.EOF

А ТУТА ВОТ МЫ С БАРАНОМ


RST_FROM_WHERE.MoveNext
Loop



End Function

  Ответить  
 
 автор: Lukas   (03.08.2009 в 21:25)   личное сообщение
 
 

То есть:
Ты это делаешь программкой, писаной в VB6.
Файл-оригинал и файл-копия пользуются пользователями в ACCESS-е?
Так что-ль?

  Ответить  
 
 автор: час   (03.08.2009 в 21:29)   личное сообщение
 
 

Да программкой в VB6


Файл-оригинал и файл-копия



Оне тожа используются программкой

а вот уже программка - та использует меня...

  Ответить  
 
 автор: Lukas   (03.08.2009 в 21:34)   личное сообщение
 
 

Глянь сюда:
http://www.hiprog.com/forum/read.php?id_forum=3&id_theme=5236&page=1
Там VB-процедура перегоняет данные запросом из XLS в MDB.
Подправь под себя.

  Ответить  
 
 автор: час   (03.08.2009 в 21:41)   личное сообщение
 
 

Спасибо пиду гляну.....

  Ответить  
 
 автор: час   (03.08.2009 в 22:07)   личное сообщение
 
 

цитата......


Тяжело быть бестолковым.

  Ответить  
 
 автор: Гоблин   (03.08.2009 в 22:33)   личное сообщение
 
 

Гы-гы.
Как я тебя понимаю.

  Ответить  
 
 автор: Lukas   (04.08.2009 в 01:30)   личное сообщение
 
 


Public Sub PrintDescriptionWithADOX()
    Dim adoxCat As ADOX.Catalog
    Dim adoxTbl As ADOX.Table
    Dim adoxCol As ADOX.Column
    
    Set adoxCat = New ADOX.Catalog
    
    adoxCat.ActiveConnection = CurrentProject.Connection 'Здесь твой коннекшн нужен будет
    
    For Each adoxTbl In adoxCat.Tables
        If adoxTbl.Type = "TABLE" Then
            With adoxTbl
                For Each adoxCol In .Columns
                    Debug.Print .Name, adoxCol.Name, adoxCol.Properties("Description")
                Next adoxCol
            End With
        End If
    Next adoxTbl
    Set adoxCat = Nothing
    Set adoxTbl = Nothing
End Sub

Вырезано отсюда:
http://hiprog.com/index.php?option=com_content&task=view&id=251661555

Как всегда спасибо Олегу.

  Ответить  
 
 автор: час   (04.08.2009 в 09:15)   личное сообщение
 
 

Спасибо, Lukas, Олегу !!!

  Ответить  
 
 автор: Гоблин   (03.08.2009 в 23:19)   личное сообщение
 
 

DAO, ADO,ADOX
Никогда не связывался с этой хренью. Пришлось вот блин.

  Ответить  
 
 автор: Lukas   (03.08.2009 в 23:30)   личное сообщение
 
 

Интересно, как разрабатывать СУБД, не используя инструментов доступа к данным?
На самом деле, Access сам использует эти инструменты в тени, предоставляя пользователю(разработчику) графические интерфейсы, избавляя в простейших случаях от изучения этих библиотек.

  Ответить  
 
 автор: час   (04.08.2009 в 10:22)   личное сообщение
 
 

Я тута вот.....


Public Function FUN_СREATE_MDB(STR_PATH_BAZA As String, STR_BAZA_NAME As String)
' Создание пустой базы данных
' Объявляем необходимые переменные
Dim AdoxCat As ADOX.Catalog
Dim StrDBPath As String

''Устанавливаем опции
StrDBPath = FUN_Patch_File(STR_PATH_BAZA, STR_BAZA_NAME) '“C: ExamplDBMyDB.mdb”
Set AdoxCat = New ADOX.Catalog
If FUN_FILE_YES_NO(StrDBPath) = True Then
If FUN_Vopros("Файл " & StrDBPath & vbCrLf & " уже существует..." & vbCrLf & " Заменить его ???", vbQuestion) = False Then
Exit Function
Else
FUN_Delete_File_Name (StrDBPath)
End If
End If
' Создание базы
AdoxCat.Create "provider=Microsoft.JET.OLEDB.4.0;" & _
"data source=" & StrDBPath

Set AdoxCat = Nothing

End Function


Public Function FUN_TRANSFER_TABLE_AND_DATA(STR_PATH_BAZA As String, STR_BAZA_NAME As String, STR_TABLE_NAME As String)
'Создание Таблицы в базе
Dim AdoxCat_TABLE As Object
Dim AdoxTbl_TABLE As Object
Dim StrDBPath As String

StrDBPath = FUN_Patch_File(STR_PATH_BAZA, STR_BAZA_NAME) '“C: ExamplDBMyDB.mdb”

Set AdoxCat_TABLE = CreateObject("ADOX.Catalog")
Set AdoxTbl_TABLE = CreateObject("ADOX.Table")

AdoxCat_TABLE.ActiveConnection = "provider=Microsoft.JET.OLEDB.4.0;" & _
"data source=" & StrDBPath
' Проверка наличия таблицы в базе
For Each AdoxTbl_TABLE In AdoxCat_TABLE.Tables
If AdoxTbl_TABLE.Name = STR_TABLE_NAME Then
MsgBox "Таблица " & STR_TABLE_NAME & " уже имеется в базе " & StrDBPath
End If
Next

GLB_con.Execute "SELECT " & STR_TABLE_NAME & ".* INTO " & STR_TABLE_NAME & " IN '" & StrDBPath & "' From " & STR_TABLE_NAME & " WITH OWNERACCESS OPTION"

Set AdoxCat_TABLE = Nothing
Set AdoxTbl_TABLE = Nothing
Set AdoxCat_TABLE = Nothing

End Function




Вроде всё получилося ,
Как ВЫ считаете???

  Ответить  
 
 автор: Гоблин   (04.08.2009 в 22:10)   личное сообщение
 
 

Красиво получилось. Несколько запятых в конце было бы неплохо.

А где и для чего это применять можно? Стрункцу пжалста.

  Ответить  
 
 автор: час   (05.08.2009 в 14:11)   личное сообщение
 
 

Это вот када в VB6 работаеш с базой MS Access, на машине самого Access нет.
А надо перенести (скопировать) данные из одной базы в новую, не созданную пока что....
Вот мы её и создаём.....
FUN_СREATE_MDB(STR_PATH_BAZA As String, STR_BAZA_NAME As String)



потом

Public Function FUN_TRANSFER_TABLE_AND_DATA(STR_PATH_BAZA As String, STR_BAZA_NAME As String, STR_TABLE_NAME As String)
'Создание Таблицы в базе

  Ответить  
 
 автор: Гоблин   (06.08.2009 в 18:59)   личное сообщение
 
 

Ну такую прогу еще найти надо будет. Легче офис полный поставить.

Удачи.

  Ответить  
 
 автор: час   (06.08.2009 в 19:41)   личное сообщение
 
 


Ну такую прогу еще найти надо будет


Простите, я не врубилси.....
Что Вы имеете ввиду - какую прогу ???

  Ответить  
 
 автор: Гоблин   (06.08.2009 в 19:54)   личное сообщение
 
 

Ту которую создаете. Будет ли в свободной продже? Когда ждать?

  Ответить  
 
 автор: час   (06.08.2009 в 20:08)   личное сообщение
 
 


Конечно будет..... .
А вот со сроками реализации - тута я в затруднении что либо ответить.....

==========================
Всё дела дела

  Ответить  
 
 автор: Гоблин   (06.08.2009 в 20:21)   личное сообщение
 
 

Бил будет разорен и забухает.

  Ответить  
 
 автор: час   (06.08.2009 в 21:48)   личное сообщение
 
 

А он и так - не просыхает
Его любая псина знает
Он как напьётся - громко лает
Собак окрестных он пугает
Хотя науке помогает
Его развитья фонд - всяк знает
Там миллиарды он слагает
И бедным щедро помогает
Развитье новшеств поощряет
Друзей пивком он угощает
И нас с тобой - не забывет
Очередную ОС он выпускает
Она и равных то не знает
И линукс вроде отдыхает
Хотя не верю - хрен их знает
Лапшу на уши нам кидает
Цену продукта повышает
и с нас три шкуры он сдирает
За 5 тысчёнок предлагает
На рынке созданный продукт
Поди купи, коли не с рук..............................

  Ответить  
 
 автор: Гоблин   (06.08.2009 в 22:13)   личное сообщение
 
 

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList