Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Задачи на Visual Basic (VB).

Автор: melniki
Дата сообщения: 24.07.2007 17:05
база Access
все пишу прямо в ней, это не отдельное приложение.

Option Compare Database

Sub Form_Current()
If Left(номер, 6) = 406660 Then
Переключатель16.Visible = False
Переключатель14.Visible = True
Else
Переключатель16.Visible = True
Переключатель14.Visible = False
End If
End Sub
End Sub

это рабочий пример, но работает только со значением 406660, а мне надо с несколькими 406660, 425547, 676622.....
Автор: 5555555
Дата сообщения: 24.07.2007 17:27
melniki
тогда вам скорее в раздел vp for application...
не помню как в acceess, но надо в цикле проходить через все записи в цикле - свойства обьекта (выборки или таблицы) - MoveNext
(Таблица.MoveNext)
Автор: Rush
Дата сообщения: 24.07.2007 19:56
melniki

Цитата:
это рабочий пример, но работает только со значением 406660, а мне надо с несколькими 406660, 425547, 676622.....

Не совсем понятно, что нужно то...
Если числа это определенный набор констант, то можно и определить его в виде константы:

Код:
Const NUM = "@406660@425547@676622@"
Dim numval$
numval = "@" & Left(номер, 6) & "@"
If InStr(NUM, numval) Then
Переключатель16.Visible = False
Переключатель14.Visible = True
Else
Переключатель16.Visible = True
Переключатель14.Visible = False
End If
Автор: dneprcomp
Дата сообщения: 24.07.2007 22:33
melniki
Я бы несколько видоизменил логику, описанную Rush и 5555555, что бы избежать лишних сравнений и перемещений.
*Select Case выбран из соображения удобства добавки новых условий. Можно использовать If Then
**rst.BOF добавлен, т.к. не помню что там возвращает Access при пустом рекордсете.

Dim rst as DAO.Recordset
Dim Flag as boolean

Flag=False

Do While Not rst.EOF Or rst.BOF '
Select Case Left(номер, 6)
Case "406660", "425547", "676622" 'и так далее
Flag=True
rst.Close
Exit Do
End Select
rst.MoveNext
Loop ' move to next record

Переключатель16.Visible = Flag
Переключатель14.Visible = Not Flag
Автор: Rush
Дата сообщения: 25.07.2007 12:15
dneprcomp

Цитата:
Select Case выбран из соображения удобства добавки новых условий

Извини, но в корне не согласен. Оператор Select Case обрабатывает условия в десятки раз более медленно, чем функция InStr. Кроме того - запись в константу и гораздо компактнее и удобнее, чем городить структуру Case. А работа с текстовой переменной (или константой) намного быстрее последовательного чтения, который ты предложил.
Автор: 5555555
Дата сообщения: 25.07.2007 12:37
Rush
чего спорить-то - вопрошающий ушел давно

неизвестно ничего - редактируемые ли значения 406..., нужна ли таблица и т.п.
что instr из константы 40x8(?)byte(или long?), что case - маленькое удовольствие...

Автор: melniki
Дата сообщения: 25.07.2007 13:40
Нет, не ушел.
Я внимательно слежу за ответами
Спасибо всем за помощь!!!
Выбрал вариант

Const NUM = "@406660@425547@676622@"
Dim numval$
numval = "@" & Left(номер, 6) & "@"
If InStr(NUM, numval) Then
Переключатель16.Visible = False
Переключатель14.Visible = True
Else
Переключатель16.Visible = True
Переключатель14.Visible = False
End If

Но столкнулся с проблемой, значений очнь много, около 50, и все не помещаются.
Очень хотелось бы подтягивать эти начения с таблицы или с запросса. Типа [bins]![bin] (таблица bins, столбец bin)
Автор: 5555555
Дата сообщения: 25.07.2007 13:51
' примитив чтения из таблицы на VB, на access - похоже
Dim db As Database, r As Recordset
Переключатель16.Visible = False
Переключатель14.Visible = False
Set db = OpenDatabase("path_to_database.mdb")
Set r = db.OpenRecordset("Таблица1")
r.MoveFirst 'переход на первую запись
Do While Not r.EOF 'опрос записей
' ваша часть
If Left(номер, 6) = r.Fields("Имя").Value Then
Переключатель16.Visible = False
Переключатель14.Visible = True
Else
Переключатель16.Visible = True
Переключатель14.Visible = False
End If
r.MoveNext 'перейти на следующую запись
Loop
r.Close ‘закрыть указатель на обьект
db.Close‘закрыть указатель на обьект
Автор: melniki
Дата сообщения: 25.07.2007 14:58
Пробую так:

Private Sub Form_Current()
Dim db As Database, r As Recordset
Set db = OpenCurrentDatabase
Set r = db.OpenRecordset(Bins)
r.MoveFirst
Do While Not r.EOF
If Left(Номер, 6) = r.Fields(Bin).Value Then
Переключатель16.Visible = False
Переключатель14.Visible = True
Else
Переключатель16.Visible = True
Переключатель14.Visible = False
End If
r.MoveNext
Loop
r.Close
db.Close
End Sub

И не получается, ругается на db As Database user-defined type not defined
Автор: dneprcomp
Дата сообщения: 25.07.2007 20:50
Rush

Цитата:
Кроме того - запись в константу и гораздо компактнее и удобнее, чем городить структуру Case
Ключевое значение: добавка новых значений. Что будем делать при необходимости добавки второй константы и разветвления условий? Все равно придется добавлять IF...THEN или SELECT CASE. Скорость обработки CASE в задаче melniki вряд ли будет самым узким местом.

melniki
Все предложенные решения имеют бОльшую проблему, чем использование CASE. Ни одно не останавливается по нахождении первого положительного значения. Вот где потеря времени и ресурсов - ненужное перелопачивание базы до EOF.


Добавлено:

melniki

А можно вообще 'почти' исключить VB и сделать действительно все на SQL.
Заводим таблицу константных значений - каждое значение в отдельном поле.
Создаем постоянное Query2
Код: SELECT Left(tbl!номер, 6) AS Expr1
FROM tbl;
Автор: 5555555
Дата сообщения: 26.07.2007 07:52
dneprcomp
до оптимизации тут еще как до..
насколько понял вопрошающему надо добится, хотя бы того, чтобы заработало то, что насоветовали
Если по производительности, то вообще можно дойти до инкриментального побайтового (если не битового) сравнения и чтения не из базы а из файла прямого доступа и т.д. и т.п...
Автор: fl1pp3r
Дата сообщения: 30.07.2007 15:13
Здравствуйте. У меня вопрос такой, с помощью vbs можно реализовать архивацию одной папки встроенным в winXP zip'ом?
Автор: kolesnik75
Дата сообщения: 30.07.2007 17:12
Всем добрый вечер! Подскажите, плис, каким образом решить след-ю задачку: есть некий реестр операций в excel, в строках есть как данные так и формулы, так и значения получаемые с помощью макросов. Необходимо после ввода данных по строке запретить изменение данных в строке, т.е. чтобы она стала только в режиме просмотра, но не редактирования. Оттолкнуться при этом нужно от наличия данных в определенной ячейке, или и от перехода на другой лист.

Автор: 5555555
Дата сообщения: 30.07.2007 20:18
fl1pp3r
kolesnik75
Вы по-моему всеже не сюда пишите, басик-то басик, но это не ключевое слово,
вероятно лучше что-то типа Ссылка
Автор: dneprcomp
Дата сообщения: 30.07.2007 20:32
fl1pp3r
http://forum.ru-board.com/forum.cgi?action=filter&forum=33&filterby=topictitle&word=vbs
Автор: Vitalik_Atas
Дата сообщения: 03.08.2007 21:53
Я учитель физики, предложили вести информатику. В 11 классе идет программирование по программе. Язык можно выбрать Basic или Паскаль. 10 лет назад изучала в институте, а сейчас в голове ничего нет. Какой язык легче? С чего начать? Как научиться самостоятельно овладеть программированием? Где найти? Помогите!
Автор: dneprcomp
Дата сообщения: 04.08.2007 09:18
Vitalik_Atas
Компьютерные (IT) книги на РУССКОМ языке
Обучающие видеокурсы по ИТ
Книжульки по VBA
Компьютерные (IT) книги на АНГЛИЙСКОМ
Книги по Веб-дизайну
Компьютер для начинающих
Книги O'Reilly
Учебники по MS Office 02,03,07 на русском

Рекомендую начинать с VB
Автор: AndronH
Дата сообщения: 06.08.2007 15:36
Vitalik_Atas
Лучше при отсутствии опыта в данной области 3-4 года не лезти в преподаватели. Ибо в отличии от готовой программы по любому другому предмету здесь нет жёсткого алгоритма, есть большущая вероятность загубить интерес у детей к данной области. У моей сестры преподает девочка паскаль, все нестандартные ходы рубятся на корню и доводы не выслушиваются, ставится тройка, несмотря на работающую программу.
Автор: 5555555
Дата сообщения: 06.08.2007 15:53
Вообще, забавный учитель

Обои - Wallpapers

Цитата:
Донецк говорит спосибо!!!!


Style XP (StyleXP) & StyleBuilder

Цитата:
Доброй ночи! Нуждаюсь в програме которая оповещала о приходе моей почты и достовляла почту на мой диск.Зарание благодарен!


Хотел пошутить, но передумал - все это скорее печалит.
Автор: Kexit
Дата сообщения: 07.08.2007 04:24
5555555, семейный комьютер просто. Скорее всего. Даже пол в постах разный.

Vitalik_Atas, не вижу особой разницы. В 11 классе поздно уже учить языкам высокого уровня. Это надо в классе 7-8 делать, а то и раньше. Бери Basic, учи алгоритмам и логике, это хоть в жизни пригодится.


Автор: Vitalik_Atas
Дата сообщения: 07.08.2007 10:09
Спасибо за добрый совет и ссылки.
Автор: vitalya2903
Дата сообщения: 12.08.2007 21:49
Вопрос1: Как в VB сделать так чтобы программа скрывала себя в диспетчере задач?

Вопрос2: Функция в VB SavePicture сохраняет изображение с размером как у .BMP
Даже если написать так:
SavePicture Picture1.image, "C:\pic.jpg"
все-равно файл имеет размер как у .BMP
Как сделать так чтобы файл имел размер как у .jpg?
Автор: Troitsky
Дата сообщения: 12.08.2007 22:13
vitalya2903
1. Как убрать программу из списка Ctrl+Alt+Del

2. Примечание к описанию оператора SavePicture из справки:
Цитата:
Если графическое изображение, имеющее формат растра, значка, метафайла или расширенного метафайла, было присвоено значению свойства Picture объекта во время разработки или во время выполнения, то при записи в файл его формат не изменится. Если же изображение имело формат GIF или JPEG, то оно будет сохранено в виде растрового файла.
Графическое изображение, связанное со свойством Image, всегда, независимо от исходного формата, записывается в виде растрового файла (.bmp).



Добавлено:
т.е. при сохранении твоим методом графического файла с расширением *.jpg он не просто будет иметь размер как у файла в формате *.bmp, а будет таковым в действительности являться.
Автор: vitalya2903
Дата сообщения: 13.08.2007 01:13
Troitsky

Цитата:
1. Как убрать программу из списка Ctrl+Alt+Del


В этих примерах используется АПИ функция RegisterServiceProcess. У меня вылетает ошибка что данная функция не найдена в библиотеке kernel32.
Может в Windows XP SP1 её нету???

2. Т.е. В случае если я что-нибудь рисую на пикче а не открываю файл, получается средствами VB никак нельзя сохранить файл с расширением и размером .jpg???
Автор: ZORRO2005
Дата сообщения: 13.08.2007 12:16
Друзья,
Если группа занимает при печати больше одной страницы или переносится на следующую страницу, можно заставить Access печатать заголовок группы на каждой странице. Для этого используется свойство Повторение раздела (Repeat Section) заголовка группы.
а в VB 6 немогу найти ничего похожего.
Автор: Troitsky
Дата сообщения: 13.08.2007 12:34
vitalya2903

Цитата:
В этих примерах используется АПИ функция RegisterServiceProcess. У меня вылетает ошибка что данная функция не найдена в библиотеке kernel32.
Может в Windows XP SP1 её нету???

Можешь не париться, этот трюк пройдет только в Windows 9x


Цитата:
Т.е. В случае если я что-нибудь рисую на пикче а не открываю файл, получается средствами VB никак нельзя сохранить файл с расширением и размером .jpg???

Т.е. Встроенная функциональность самого VB не позволяет сохранять файлы в графическом формате *.jpg.
Выход: либо самому добавлять в проект модули с функциями, могущими обеспечить нужную функциональность, либо использовать сторонние библиотеки.
Уже готовые решения можешь поискать, например, тут: http://www.planet-source-code.com/vb/
Автор: tigranchik
Дата сообщения: 15.08.2007 16:27
Профессионалы, помогите пожалуйста дилетанту. Мне нужно перехватывать любое посылание на печать, из Word, Adobe, IE.....
выбрасывать сообщение и после ОК предлагать выбрать принтер
Это очень сложно на написать на VB или VBscript?
Автор: Rush
Дата сообщения: 16.08.2007 15:46
Подскажите ответ :
В заголовке ID3v2 размер самого тэга заложен 4 байтами (с 7 по 10). Никак не могу сообразить, как их сконвертить так, чтобы на выходе был размер тэга в байтах.
Автор: Kafka17
Дата сообщения: 17.08.2007 17:37

Цитата:
Профессионалы, помогите пожалуйста дилетанту. Мне нужно перехватывать любое посылание на печать, из Word, Adobe, IE.....
выбрасывать сообщение и после ОК предлагать выбрать принтер
Это очень сложно на написать на VB или VBscript?

Самое простое, что пока приходит в голову -- это поставить по умолчанию какой-нибудь PDF или PS принтер, в котором можно настроить выполнение некоего задания по выполнении задачи. В качестве отплавного пункта могу посоветовать либо Win2PDF (коммерческое), либо Ghostscript (freeware).

Добавлено:

Цитата:
В заголовке ID3v2 размер самого тэга заложен 4 байтами (с 7 по 10). Никак не могу сообразить, как их сконвертить так, чтобы на выходе был размер тэга в байтах.

В каком формате храняться эти 4 байта сейчас в программе? Какой из байтов является старшим.

Самое простое -- это взять эти 4 байта (например в виде массива Integer), и пересчитать как:

res = arr[0] + arr[1] * 256 + arr[2] * 256 * 256 + arr[3] * 256 * 256 * 256
Автор: Rush
Дата сообщения: 18.08.2007 07:14
Kafka17
Спасибо за наводку. Сам как-то не сообразил. Затмение, видимо...
Вот, может кому интересно или сгодится, в виде функции накропал:

Код: Function GetSizeID3v2(ByVal strFileName As String) As Long
Const MULT As Long = 128
Const ID3V2HEADER = 10
Dim ID3Pos As Long
Dim bytArr() As Byte
Dim arrSize(3) As Byte
Dim ID3Head(2) As Byte
ID3Head(0) = 73
ID3Head(1) = 68
ID3Head(2) = 51
Dim MP3Head(1) As Byte
MP3Head(0) = &HFF
MP3Head(1) = &HFB
Open strFileName For Binary Access Read Lock Write As #1
ReDim bytArr(1 To LOF(1)) As Byte
Get #1, , bytArr
ID3Pos = InStrB(bytArr, ID3Head)
If ID3Pos > 0 And ID3Pos < InStrB(bytArr, MP3Head) Then
Get #1, ID3Pos + 6, arrSize
GetSizeID3v2 = arrSize(0) * MULT * MULT * MULT + arrSize(1) * MULT * MULT + arrSize(2) * MULT + arrSize(3) + ID3V2HEADER
Else
GetSizeID3v2 = 0
End If
Close #1
End Function

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940

Предыдущая тема: для Hiper-six (индексы .nsx .smt) хоть что нибудь Опции


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.