powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создать БД *.mdb и вставить туда таблицу(ы) программно.
25 сообщений из 26, страница 1 из 2
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098844
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, собственно закончил наверно более менее работу по внедрению БД (вместо текстовух) в приложение с сохранением так сказать имеющегося функционала. Ну, тестировать конечно еще надо...
Подопытная БД была создана "ручками" в Access-2000. Не уверен, что хорошим вариантом является таскание шаблона с дистрибутивом.
Т.е. думаю:
1) Инсталлятор должен создавать шаблон
2) Прога должна уметь создавать шаблон если вдруг user тупо удалил файл mdb.

Ну т.е. встал вопрос:

Как лучше создать mdb с таблицами программно?

Поиск по google я уже типа начал, не сомневаюсь есть куча способов.
Коль скоро я "присосался" к ADODB, то наверно с помощью него тоже можно. Другие методы типа DAO думаю не есть good, не люблю сборных солянок.
За ссылку на хороший пример заранее благодарен.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098856
bac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

- Для создания MDB я например в каталоге программы имею шаблон (готовый файл), а при необходимости копирую его в каталог размещения БД.
- Для создания и начальной загрузки таблиц имею текстовый файл с расширением .sql и при необходимости его выполняю.
- Так же (через текстовый файл, который доставляется клиентам по e-mail) организовано обновление структуры таблиц.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098867
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bac- Для создания MDB я например в каталоге программы имею шаблон (готовый файл), а при необходимости копирую его в каталог размещения БД.
Не ну это как то по-детски, так не хочу. Не, ну у вас БД может сама "взрослая". У меня БД "детская"-4 таблицы и никаких связей.
Собственно весь код по "созданию".
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Option Explicit
Private Sub Command1_Click()
    Dim cat 'As ADOX.Catalog
    ' Create the new database.
    Set cat = CreateObject("ADOX.Catalog") 'New ADOX.Catalog
    cat.Create _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & App.Path & "\mydatabase.mdb" & ";"
    Set cat = Nothing
End Sub
Отсюда передрал:
http://www.vb-helper.com/howto_adox_build_db.html
Там и про таблицы дальше есть...
Вот чего-то...ADOX... че за X новая либа, блин...
Через ADODB никак нельзя?

Кстати, как все-таки правильнее:
Код: plaintext
    Dim cat 'As ADOX.Catalog
Код: plaintext
   Dim cat As Object 'As ADOX.Catalog

И так и так работает. Про variant я понял, это дважды объяснять не надо.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098871
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Через ADODB никак нельзя?
Код: plaintext
cn.Execute "create table ..."
Ну и см справку по create table в BOL, например.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098881
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
не ну table то ладно, а саму db execute создать может? (по здравой логике нет, ибо connection подключается к существующей уже БД)
Потому как если ADOX код выше это единственный способ через "ADO", то таблицы можно через него же налепить, чего уж там. Будет DB, будут и таблицы...

Опасения не праздные, так как X это доп. LIB, а к чему это может привести ясно из моего предыдущего топика с JRO (но там видимо нет другого выхода). А увеличивать шансы что что-то сглючит и разбирать подобные глюки удовольствие как понимаете ниже среднего, посему лучше потрепаться в начале пути, чем спасаться после недели скажем трудов.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098904
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Через DAO можно создать.
Эта штука предшественник ADO и RDO и уж точно на всех компах есть, как и ADO
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098907
Фотография Garfish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

ADOConnection1->Execute("CREATE TABLE "+ListBox1->Items->Strings[ListBox1->ItemIndex], cmdText, TExecuteOptions());
ADOConnection1->Execute("DROP TABLE "+ListBox1->Items->Strings[ListBox1->ItemIndex], cmdText, TExecuteOptions());
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098915
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
Shocker.ProДмитрий77,

Через DAO можно создать.
Эта штука предшественник ADO и RDO и уж точно на всех компах есть, как и ADO
уже не совсем так ((
http://www.sql.ru/forum/actualthread.aspx?tid=761751&hl=dao+vbs#8837580
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098921
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarfishShocker.Pro,

ADOConnection1->Execute("CREATE TABLE "+ListBox1->Items->Strings[ListBox1->ItemIndex], cmdText, TExecuteOptions());
ADOConnection1->Execute("DROP TABLE "+ListBox1->Items->Strings[ListBox1->ItemIndex], cmdText, TExecuteOptions());
это мне зачем?
Вопрос автора был про создание файла базы.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098922
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёуже не совсем так ((
http://www.sql.ru/forum/actualthread.aspx?tid=761751&hl=dao+vbs#8837580
бьюсь головой о стену
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098926
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
>Через DAO можно создать
Сказал же, не хочу сборных солянок.

Garfish,
не понял. Это видимо про таблицы.

Не, ну ладно, если через ADO это через ADOX, пусть будет так допустим...
Пошли создавать thetable.

Код: plaintext
1.
2.
3.
4.
    ' Create a new table.
    Set tbl = New ADOX.Table
    tbl.Name = "thetable"
    tbl.Columns.Append "start_datetime", adDate
    tbl.Columns.Append "end_datetime", adDate
Хочу:
Формат поля=Полный формат даты
Обязательное поле = нет
Индексированное поле=нет

Код: plaintext
1.
2.
    tbl.Columns.Append "field1", adVarWChar,  255 
    tbl.Columns.Append "field2", adVarWChar,  20 
    cat.Tables.Append tbl
Ладно, длину задать оно умеет.
Но хочу:
Обязательное поле = нет
Пустые строки=Да
Индексированное поле=нет
Сжатие Юникод=нет

ADOX это умеет все прописать? С ходу не нашел.

Сжатие Юникод - это вообще что? С чем кушать? Оно все-таки да или нет должно быть? Уже спрашивал, никто не ответил.

>Через DAO можно создать.
>уже не совсем так ((
ADOX на голой Win7-x64 есть и работает -только что проверил. (С ADODB тоже впрочем проблем не накопал...)
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098934
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
Дмитрий77ADOX на голой Win7-x64 есть и работает -только что проверил. (С ADODB тоже впрочем проблем не накопал...)
ото была бы "кумэдия", если бы ADOX - работал, а ADODB - "не совсем"
Дмитрий77Хочу:
нате !
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098950
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёДмитрий77Хочу:
нате !
Догадка про
Код: plaintext
.properties("blablabla").value="lalala"
в принципе уже была, ибо больше некуда "пихать".
Но в вашем примере (пока беглый просмотр) кажется не все что мне нужно.
Где б взять полное описание ("blablabla")?

А за наводку спасибо. Думаю я уже таки на верном пути.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098981
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Antonariy,
не ну table то ладно, а саму db execute создать может? (по здравой логике нет, ибо connection подключается к существующей уже БД)Что мешает пустую базу засунуть в ресурсы exe и извлекать по необходимости? Надеюсь, что незнание забывчивость, а не религия или склонность к групповому сексу с кучей разных библиотек.

Создание базы программно было бы целиком обосновано в том единственном случае, когда из-за пустой базы дистрибутив не помещается на дискету. Но это уже не актуально.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098996
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЧто мешает пустую базу засунуть в ресурсы exe и извлекать по необходимости?
Так бы я делать не стал. Есть еще антивирусы которые насколько у меня есть опыт очень неравнодушны ко всяким сомнительным "ресурсам".

Я не думаю, что ADOX будет доп.проблемой если уж я подписался на ADODB.
Счас немного застрял на свойствах столбцов. Конкретно:
Код: plaintext
1.
2.
3.
4.
5.
6.
        Set adoxCol = New ADOX.Column
        With adoxCol
          .Properties("Формат Поля").Value = "Полный формат даты"
           .Properties("Обязательное поле").Value = "нет"

           .Properties("Пустые строки").Value = "да"
           .Properties("Сжатие Юникод").Value = "нет" 'а надо ли???

Как на "английськом" нарисовать?
Дмитрий77Где б взять полное описание ("blablabla")?
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37098998
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЧто мешает пустую базу засунуть в ресурсы exe и извлекать по необходимости?
И если на то пошло хочется эту БД сделать средствами ADO а не средствами Access. Кто его знает чего этот русский Access-2000 туда подмешивает...
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37099014
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так бы я делать не стал. Есть еще антивирусы которые насколько у меня есть опыт очень неравнодушны ко всяким сомнительным "ресурсам".Ерунда. Структура базы далека от структуры исполняемого файла, а манипуляции с ресурсами происходят в операционке повсеместно.
Кто его знает чего этот русский Access-2000 туда подмешивает...Еще большая ерунда. Сон разума рождает чудовищ. ©
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37099023
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

AntonariyТак бы я делать не стал. Есть еще антивирусы которые насколько у меня есть опыт очень неравнодушны ко всяким сомнительным "ресурсам".Ерунда. Структура базы далека от структуры исполняемого файла, а манипуляции с ресурсами происходят в операционке повсеместно.
Блин, сорри за ругань... jpeg обычный в ресурсы засунуть невозможно, авира на любой vb-custom ресурс ругается, даже проверять не хочу.

вот порой такие сложные коды советуете, шо шерсть дыбом,
а я вам отвечаю: а давайте лучше
Shell ("какая-то прога я тут нашел") и еже с ними, с API и вашими классами, ета вот системная утилита от Microsoft© делает через cmd то же самое и в 100 раз надежней чем ваша простыня кода...

а здесь началось: засунь базу в резервный фолдер, в ресурсы, в zip, в rar...
Я не понимаю, что тут плохого если я простенькую базу создам программно?

По делу.
Дмитрий77.Properties("Формат Поля").Value = "Полный формат даты"
Это сжевал:
Код: plaintext
            .Properties("Jet OLEDB:Allow Zero Length").Value = True ' разрешение пустых строк
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37099027
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле
Код: plaintext
.Properties("Пустые строки").Value = "да"
-вот это сжевал
Код: plaintext
.Properties("Jet OLEDB:Allow Zero Length").Value = True ' разрешение пустых строк
Пойду дальше жевать оставшиеся 3 строки.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37099031
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

описание как рисовать на английском :)
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37099039
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
    .Properties("Обязательное поле").Value = "нет"
еще один готов
Код: plaintext
   .Properties("Nullable") = True

Игорь Горбонос,
спасибо, пойду изучать, надеюсь это поможет убить оставшихся двух зайцев.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37099044
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,
Код: plaintext
.Properties("Сжатие Юникод").Value = "нет" 'а надо ли???
третий готов:
Код: plaintext
           .Properties("Jet OLEDB:Compressed UNICODE Strings").Value = False 'Сжатие Юникод=Нет

Вот этого я там не нашел:
Код: plaintext
.Properties("Формат Поля").Value = "Полный формат даты"
Ну т.е. чуть-чуть осталось...
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37099055
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Вот этого я там не нашел:
Код: plaintext
.Properties("Формат Поля").Value = "Полный формат даты"
...
Чего-то нигде не могу найти. М.б. это как раз прибамбас Access (отображение в таблице Access) и его можно не устанавливать (невозможно установить и лишено физического смысла)?
По крайней мере если через Access установить "краткий формат даты" то данные про время никуда не деваются и в проге отображаются корректно.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37099241
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Да, это прибамбас аксесса, так же как и ширина столбца при отображении таблицы.
...
Рейтинг: 0 / 0
Создать БД *.mdb и вставить туда таблицу(ы) программно.
    #37099489
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДа, это прибамбас аксесса, так же как и ширина столбца при отображении таблицы.
А ну тогда я все сделал. Нудновато получилось, но ничего особо сложного.
AntonariyКто его знает чего этот русский Access-2000 туда подмешивает...Еще большая ерунда. Сон разума рождает чудовищ. ©
Ерунда не-ерунда, но ведь "подмешивает" как выяснили. Зачем мне все эти лишние форматирования в базе?

Вот еще вопрос по сути.
В инсталлятор я допустим проверку/воссоздание БД влеплю куда-нибудь без проблем.

Далее у меня есть 2 проги (exe), кот. с базой работают.
1) "надсмотрщик"
2) "User Interface"
При старте каждой из них хотелось бы(разумно бы) добавить процедуру

Код: plaintext
1.
2.
3.
If (нету файла базы в нужном месте) then 'напр. Dir(\baza.mdb)
   CreateBaza (по шаблону)
endif
ConnectToBaza

Не создаст ли это потенциальной опасности "переклинивания"?
Событие 1 :Одновременно обнаружили БД и одновременно попытались ее создать, одна из них понятно ругнется на то что БД уже есть в момент создания...

В принципе вероятность того что:
Событие 1: запустились одновременно с точностью до не знаю уж каких мс
Событие 2: БД куда-то стибрили и ее нету

крайне низка как по отдельности, а тем более выполнение обоих условий...
Но тем не менее...

=============
Более сложный вопрос с процедурой "Сжатие и восстановление БД"
Пока не выяснял каким кодом это реализую, но по опыту знаю что в случае mdb это надо.

Т.е. думаю как это "сжатие" авто-реализовать (в какой модуль засунуть) и делать ли каждый раз при старте модуля или часто не стоит.
Проблема еще в том, что при запуске одного из модулей второй может быть запущен (они независимы), и тогда база ругнется на предложение ее сжать. (другой клиент к ней подключен).
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создать БД *.mdb и вставить туда таблицу(ы) программно.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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