Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2011, 17:04   #1
art_y10
Новичок
Джуниор
 
Регистрация: 18.04.2011
Сообщений: 3
По умолчанию visual basic, access, форматирование вывода

В MS Access при открытиии отчета проверяю некое значение, которое хранится в строке таблицы. Далее добавляю к этому значению единицу и заношу в ту же строку таблицы. Далле вывожу значение из таблицы
Me.Надпись4.Caption = Str(i)
Мне нужно, чтобы в надпись выводилось семизначное число. То есть, если у меня число в таблице 154, то в поле надпись, чтобы выводилось так: 0000154. Если у меня значение в таблице 1564, то в надпись, чтобы выводилось: 0001564
art_y10 вне форума Ответить с цитированием
Старый 19.04.2011, 17:52   #2
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от art_y10 Посмотреть сообщение
В MS Access при открытиии отчета проверяю некое значение, которое хранится в строке таблицы. Далее добавляю к этому значению единицу и заношу в ту же строку таблицы. Далле вывожу значение из таблицы
Me.Надпись4.Caption = Str(i)
Мне нужно, чтобы в надпись выводилось семизначное число. То есть, если у меня число в таблице 154, то в поле надпись, чтобы выводилось так: 0000154. Если у меня значение в таблице 1564, то в надпись, чтобы выводилось: 0001564

функция подойдет ?
Код:
Public Function str7(s$) As String
Dim ss$
If Len(s) < 7 Then
For i = 1 To 7 - Len(s)
ss = ss & "0"
Next
str7 = ss & s
Else
str7 = s
End If
End Function
и еще пару на конкурс талантливой краткости

Код:
Public Function str77(s$) As String
If Len(s) < 7 Then
str77 = String(7 - Len(s), "0") & s
Else
str77 = s
End If
End Function
Код:
Public Function str777(s$) As String
If Len(s) < 7 Then
str777 = Replace(Space(7 - Len(s)), " ", "0") & s
Else
str777 = s
End If
End Function
и для всех случаев жизни

Код:
Public Function Add_str(s$, l&, st$) As String
Add_str = IIf(Len(s) < l, String(l - Len(s), st) & s, s)
End Function
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 19.04.2011 в 18:50. Причина: апдейт :)
R Dmitry вне форума Ответить с цитированием
Старый 19.04.2011, 19:07   #3
art_y10
Новичок
Джуниор
 
Регистрация: 18.04.2011
Сообщений: 3
По умолчанию

У меня еще короче получилось : Me.Надпись4.Caption = Format(i, "0000000")

Итого весь код обработки события открытия отчета:

Private Sub Report_Open(Cancel As Integer)
Dim i As Integer
Dim db As Database
Dim rs As Recordset
Dim sql_select As String

sql_select = "SELECT * FROM numb"
Set db = CurrentDb
Set rs = db.OpenRecordset(sql_select, dbOpenDynaset)
If (rs.RecordCount = 1) Then
Set bd = DBEngine.Workspaces(0).Databases(0)
Set tab1 = bd.OpenRecordset("numb")
tab1.Edit
i = tab1!Number
tab1!Number = i + 1
tab1.Update

End If
i = tab1!Number
Me.Надпись4.Caption = Format(i, "0000000")
End Sub


А теперь нужно чделать такое. Нужно чтобы можно было печатать пачку бланков с номерами последовательными. Как можно видеть из кода, я сделал, когда нужно один бланк напечатать. А если нужно 30 или 100. При этом, нужно, чтобы в следующий раз, когда нужно будет напечатать один бланк или 100, базка помнила последний номер и начинала опять все правильно последовательно считать...

Думаю, что это можно реализовать добавив еще одну таблицу, в которую записывать конечный номер печати. Дальше сравнивать и печатать, пока номера не совпадут. Процедурка выше - это моя первая процедурка на VB ? поэтому прошу помощи!
art_y10 вне форума Ответить с цитированием
Старый 20.04.2011, 10:52   #4
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от art_y10 Посмотреть сообщение
У меня еще короче получилось : Me.Надпись4.Caption = Format(i, "0000000")

Итого весь код обработки события открытия отчета:

Private Sub Report_Open(Cancel As Integer)
Dim i As Integer
Dim db As Database
Dim rs As Recordset
Dim sql_select As String

sql_select = "SELECT * FROM numb"
Set db = CurrentDb
Set rs = db.OpenRecordset(sql_select, dbOpenDynaset)
If (rs.RecordCount = 1) Then
Set bd = DBEngine.Workspaces(0).Databases(0)
Set tab1 = bd.OpenRecordset("numb")
tab1.Edit
i = tab1!Number
tab1!Number = i + 1
tab1.Update

End If
i = tab1!Number
Me.Надпись4.Caption = Format(i, "0000000")
End Sub


А теперь нужно чделать такое. Нужно чтобы можно было печатать пачку бланков с номерами последовательными. Как можно видеть из кода, я сделал, когда нужно один бланк напечатать. А если нужно 30 или 100. При этом, нужно, чтобы в следующий раз, когда нужно будет напечатать один бланк или 100, базка помнила последний номер и начинала опять все правильно последовательно считать...

Думаю, что это можно реализовать добавив еще одну таблицу, в которую записывать конечный номер печати. Дальше сравнивать и печатать, пока номера не совпадут. Процедурка выше - это моя первая процедурка на VB ? поэтому прошу помощи!
ну да про формат я и не вспомнил )

ну да сделать табличку с одной строкой и LOOKUPом тянуть начальный счетчик, и в конце процедуры обновить показания счетчика в таблице
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 21.04.2011, 14:27   #5
art_y10
Новичок
Джуниор
 
Регистрация: 18.04.2011
Сообщений: 3
По умолчанию

Не силен в VB, можно пример кода.
art_y10 вне форума Ответить с цитированием
Старый 21.04.2011, 14:49   #6
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

пример
Код:
Sub art_y10()
'таблица TBL
'Поля "Код" , "CN"
'Получаем значение счетчика
счетчик = DLookup("CN", "TBL", "Код=1")
'Переписываем значение счетчика
CurrentDb.Execute "UPDATE TBL SET TBL.CN =" & счетчик & " WHERE (((TBL.Код)=1))"
End Sub
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 21.04.2011 в 14:51.
R Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форматирование вывода даты tools SQL, базы данных 4 05.06.2010 22:10
2 задания по Visual Basic и Access Romon Фриланс 1 31.05.2010 11:40
За вознаграждение 2 задания по Visual Basic и Access Romon Помощь студентам 0 30.05.2010 23:43
Форматирование консольного вывода. jojahti Общие вопросы C/C++ 0 15.09.2009 13:17