Нужен совет по хранению данных программы.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Нужен совет по хранению данных программы.

Сообщение dedmakar » 07.10.2007 (Вс) 14:55

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

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 07.10.2007 (Вс) 15:20

Реестр (можно просто юзать SaveSetting, GetSetting или API) или INI-файл

Added:
Вот одна из таких тем http://bbs.vbstreets.ru/viewtopic.php?t=34125
Последний раз редактировалось burik 07.10.2007 (Вс) 16:08, всего редактировалось 2 раз(а).
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 07.10.2007 (Вс) 15:22

Уже много раз это обсуждалось и приводились плюсы и минусы каждого из способов (топик искать поленюсь). Предлагались -- реестр, ini-файлы, xml-файлы, файлы собственного формата и даже базы данных...
Salus populi suprema lex

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 07.10.2007 (Вс) 15:24

В реестр пиши.
SaveSetting / GetSetting
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 07.10.2007 (Вс) 16:15

Фтопку. modRegistryрулит.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 07.10.2007 (Вс) 16:40

Спасибо. Буду рассматривать...

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Сообщение Proxy » 08.10.2007 (Пн) 11:24

Я года два назад делал простенький и понятненький модуль для новичков. Основан на документированых методах и событиях. Могу поделиться, если надо. Может хранить 256 переменных типа string.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Сообщение Proxy » 08.10.2007 (Пн) 11:43

Код: Выделить всё
'Ìîäóëü ñîçäàâàë êîãäà òîëüêî íà÷èíàë îñâàèâàòü vb6. Ñ òåõ ïîð íè÷åãî íå ìåíÿë. Þçàþ - ðàáîòàåò.
'Æåëàòåëüíî èñïðàâèòü íîìåð êàíàëà ôàéëà. Íå èçìåíÿòü Ìåòîäû íà íåîïèñàííûå â òèïîâîì ðóêîâîäñòâå ïî vb.

Option Explicit
Dim stats(255) As String
Dim dry As Boolean
Dim hp As String

Sub setStatics() 'Ñîõðàíåíèå ïàðàìåòîðîâ (Âûçûâàòü ïðè âûãðóçêå)
On Error Resume Next
If dry Then
  Dim ssi As Integer
  Open App.Path + hp + "Static.txt" For Output As 1
  For ssi = 0 To 255
    Print #1, stats(ssi)
   Next
  Close #1
  dry = False
End If
End Sub

Sub getStatics() 'Çàãðóçêà ïàðàìåòðîâ (Âûçûâàòü èç sub_main / sub_formX_load)
On Error Resume Next
hp = IIf(InStr(1, App.Path, "\") > 0, "\", "/") 'èíà÷å íå ðàáîòàåò ïîä miniPE (è environ$() òàì íåòó)
Dim gsi As Integer
If checkFileLocation(App.Path + hp + "Static.txt") Then
  Open App.Path + hp + "Static.txt" For Input As 1
   For gsi = 0 To 255
    Line Input #1, stats(gsi)
   Next
  Close #1
  dry = False
Else
  'çàãðóçèòü ïàðàìåòðû ïî-óìîë÷àíèþ îòêóäà-íèáóäü
End If
End Sub

Function checkFileLocation() 'íå òðîãàòü
On Error Resume Next
If Dir(App.Path + hp + "Static.txt") = "" Then
  Open App.Path + hp + "Static.txt" For Binary As 1
  Close #1
  checkFileLocation = IIf(Dir(App.Path + hp + "Static.txt") = "", False, True)
Else
  checkFileLocation = True
End If
End Function

Function getstatvalue(Index As Long) As String 'âîçâðàùàåò çíà÷åíèå àðãóìåíòà íîìåð <Index>
getstatvalue = stats(Index)
End Function

Sub setstatvalue(Index As Long, value As String) 'íàçíà÷àåò çíà÷åíèå <value> àðãóìåíòó íîìåð <Index>
dry = True
stats(Index) = value
End Sub

И это всё в модуле.
Извините за крокозяблы. нет времени что-либо менять. С кодировкой разберётся тот, кому надо.[/url]

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 08.10.2007 (Пн) 18:58

Качай, пользуйся и балдей. :)

[Хакер] :: Вложение удалено. Вместо того чтобы плодить вложения с одними и теме же файлами, лучше бы дал ссылку на оригинал.

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 15.10.2007 (Пн) 23:56

Вопрос есть. Есть программа которая обзванивает абонентов. Надо сделать базу данных более оптимальной, гибкой. В которой хранятся абоненты. Я им звоню, кто не отвечает, кидаю в одну базу данных. Тем кому дозвонился, кидаю в вторую. После чего я удаляю старых абонентов и добавляю новых. В каком способе, которые вы перечислили или другие, можно легко перекидывать, изменять абонентов?
Спасибо

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 16.10.2007 (Вт) 1:12

ИМХО база с двумя (к примеру) таблицами. Не ответивших в одну таблицу, ответивших в другую
Подпись проходит рефакторинг

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 16.10.2007 (Вт) 1:48

В принципе, в любом. Вопрос, что значит легко?
Легко менять, или легко реализовать сам способ?

Если заюзать БД - можно не париться с двумя таблицами, а завести дополнительно в базе булево поле "Дозвонился".. Ну а дальше работа по "переносу" из таблицы в таблицу становится вообще тривиальной - меняется флаг в базе, и все.
label:
cli
jmp label

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 16.10.2007 (Вт) 3:25

iGrok
Да, так пожалуй даже проще будет
Подпись проходит рефакторинг

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 16.10.2007 (Вт) 20:41

XML тогда подойдет или другие есть? Я просто не шарю в БД.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 16.10.2007 (Вт) 21:45

БД - самый простой способ - это и мгновенный доступ и стабильная структура данных :)

шарить особо не нужно ... ну понятия надо знать ... жить надо по понятиям :))
берешь Excel в верхней строчке пишешь ... мол
RecID FIO Dozvon - три столбца (см.приложение) и данные в него суешь сохранешь лист как DBASE IV (в "Сохранить как" Экселя это есть)

кладем в папку его
ССылку в референсах проекта делаешь на "Microsoft ActivX Data Objects 2.5" или какой у тебя будет может быть много

На уровне модуля или формы создаешь переменную
Код: Выделить всё

  Dim CN as New Connection


по тексту коннектишься к папке
Код: Выделить всё

  On error resume next
  Set CN = New Connection
  CN.Open "Driver=Microsoft dBase Driver (*.dbf);DBQ=" & MainPath
  if CN.State = 1 then
    'приконекчен
  else
    'не законектился
    End
  End if


здесь MainPath - задаешь как App.Path либо свой путь какой желаешь, к папке файлика :)

После того, как установил соединение ... по средством простого запроса можешь получить доступ к файлику

Например:
Перебор содержимого (т.е. всех фамилий из списка)
Запрос всех записей
Код: Выделить всё
"Select * from testDBF"
, пример:

Код: Выделить всё

  On error resume next
  Set RS = CN.Execute("Select * from testDBF")
  If ERR=0 then
    While Not RS.EOF
      debug.Print RS!RegID & ". " & RS!FIO
      RS.MoveNext
    Wend
  Else
    MsgBox Err.Description
  End if



Изменение поля Dozvon записи с номером RecID равным 4, если например дозвонился
Код: Выделить всё

  On error resume next
  CN.Execute "UPDATE testDBF SET Dozvon = 1 WHERE RecID=4"


Выбор всех кому дозвонился - аналогично перебору, тока запрос будет
Код: Выделить всё
"SELECT * FROM testDBF WHERE Dozvon=1"


Все кому не дозвонился -
Код: Выделить всё
"SELECT * FROM testDBF WHERE Dozvon=0"


Открывается экселем редактируется легко:)))

С Уважением,
Сергей
Вложения
testDBF.rar
пример DBF
(192 байт) Скачиваний: 71
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 16.10.2007 (Вт) 22:50

SSecurity, как называется файл Microsoft ActiveX Data Objects 2.5 в системе. Я не могу его найти.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 17.10.2007 (Ср) 9:02

msado25.tlb у меня лежит Program Files\Common Files\System\ADO\

Честно говоря очень сомневаюсь что у тебя на компе нету его :)) хотя не исключаю

Project - Reference - Жмем букву M ... он сразу на Microsoft перейдет ... можешь любой другой .... 2.0 - 2.7 или выше.


С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 19.10.2007 (Пт) 20:01

SSecurity
Такой прикол: Run-time Error '-2147467259 (80004005)':
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified. Эта ошибка выводится при открытие файла
Код: Выделить всё
CN.Open "Driver=Microsoft dBase Driver (testDBF.dbf);DBQ=" & App.Path
. Остальное как у тебя. Не от-того ошибка, что у меня Офис 2007. Мож другой драйвер использовать. У тебя код работает?

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 20.10.2007 (Сб) 13:23

Под руководством SSecurity, я решил свои проблемы насчет Microsoft ActivX Data Objects 2.5. Вот полный архив с некоторыми возможностями ADO DB. Спасибо!!!!
Вложения
tempo.rar
(2.2 Кб) Скачиваний: 60


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38

    TopList