Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

RQ: Баркод генератор за Access 2007

Featured Replies

Здравейте, значи трябва ми баркод генератор за аксес 2007. Порових малко из нета, но доколкото разбирам аксес няма вградена такава чудесия, а има само платени add ons. Някой знае ли някой по-добър и по-важното, по безплатен вариант? :speak:

Редактирано от stanley56 (преглед на промените)

Здравейте, значи трябва ми баркод генератор за аксес 2007. Порових малко из нета, но доколкото разбирам аксес няма вградена такава чудесия, а има само платени add ons. Някой знае ли някой по-добър и по-важното, по безплатен вариант? :speak:

VBA код за Code 3 of 9, Code 39, и Mil-spec Logmars : http://mc-computing.com/Databases/MSAccess/Code/mod_BarCode_Generator_Code39.txt

  • Автор

VBA код за Code 3 of 9, Code 39, и Mil-spec Logmars : http://mc-computing.com/Databases/MSAccess/Code/mod_BarCode_Generator_Code39.txt

Всичко много хубаво, ама не мога да разбера какво трябва да направя, тъй като с VBA не съм кой знай колко запознат. Като създам report какво трябва после да направя. sad.gif

Всичко много хубаво, ама не мога да разбера какво трябва да направя, тъй като с VBA не съм кой знай колко запознат. Като създам report какво трябва после да направя. sad.gif

1. Създай нов Report.

2. В секция Detail създай един скрит TextBox ( Format -> Visible -> No ) с име Barcode

3. Щракни на празно място в секцията Detail и иди на Event.

4. Щракни полето срещу On Print и после бутончето с ... вдясно.

5. Избери Code builder и OK.

6. В редактора на Visual basic между

Sub Detail1_Print (Cancel As Integer, PrintCount As Integer)

и

End Sub

копирай

         Result = MD_Barcode39(Barcode, Me)
а след това и
Function MD_Barcode39(Ctrl As Control, rpt As Report)


    On Error GoTo ErrorTrap_BarCode39


    Dim Nbar As Single, Wbar As Single, Qbar As Single, Nextbar As Single

    Dim CountX As Single, CountY As Single, CountR As Single

    Dim Parts As Single, Pix As Single, Color As Long, BarCodePlus As Variant

    Dim Stripes As String, BarType As String, Barcode As String

    Dim Mx As Single, my As Single, Sx As Single, Sy As Single

    Const White = 16777215: Const Black = 0

    Const Nratio = 20, Wratio = 55, Qratio = 35


    'Get control size and location properties.

    Sx = Ctrl.Left: Sy = Ctrl.TOP: Mx = Ctrl.Width: my = Ctrl.Height


    'Set handle on control.

     Barcode = Ctrl.ControlSource


    'Calculate actual and relative pixels values.

    Parts = (Len(Barcode) + 2) * ((6 * Nratio) + (3 * Wratio) + (1 * Qratio))

    Pix = (Mx / Parts):

    Nbar = (20 * Pix): Wbar = (55 * Pix): Qbar = (35 * Pix)


    'Initialize bar index and color.

    Nextbar = Sx

    Color = White


    'Pad each end of string with start/stop characters.

    BarCodePlus = "*" & UCase(Barcode) & "*"


    'Walk through each character of the barcode contents.

    For CountX = 1 To Len(BarCodePlus)


        'Get Barcode 1/0 string for indexed character.

        Stripes = MD_BC39(Mid$(BarCodePlus, CountX, 1))

        For CountY = 1 To 9


            'For each 1/0, draw a wide/narrow bar.

            BarType = Mid$(Stripes, CountY, 1)


            'Toggle the color (black/white).

            If Color = White Then Color = Black Else Color = White

            Select Case BarType


                Case "1"

                    'Draw a wide bar.

                    rpt.Line (Nextbar, Sy)-Step(Wbar, my), Color, BF

                    Nextbar = Nextbar + Wbar


                Case "0"

                    'Draw a narrow bar.

                    rpt.Line (Nextbar, Sy)-Step(Nbar, my), Color, BF

                    Nextbar = Nextbar + Nbar


            End Select

        Next CountY


        'Toggle the color (black/white).

        If Color = White Then Color = Black Else Color = White


        'Draw intermediate "quiet" bar.

        rpt.Line (Nextbar, Sy)-Step(Qbar, my), Color, BF

        Nextbar = Nextbar + Qbar


    Next CountX


Exit_BarCode39:

    Exit Function


ErrorTrap_BarCode39:

    Resume Exit_BarCode39


End Function


Function MD_BC39(CharCode As String) As String


    On Error GoTo ErrorTrap_BC39


    ReDim BC39(90)


    BC39(32) = "011000100" ' space

    BC39(36) = "010101000" ' $

    BC39(37) = "000101010" ' %

    BC39(42) = "010010100" ' * Start/Stop

    BC39(43) = "010001010" ' +

    BC39(45) = "010000101" ' |

    BC39(46) = "110000100" ' .

    BC39(47) = "010100010" ' /

    BC39(48) = "000110100" ' 0

    BC39(49) = "100100001" ' 1

    BC39(50) = "001100001" ' 2

    BC39(51) = "101100000" ' 3

    BC39(52) = "000110001" ' 4

    BC39(53) = "100110000" ' 5

    BC39(54) = "001110000" ' 6

    BC39(55) = "000100101" ' 7

    BC39(56) = "100100100" ' 8

    BC39(57) = "001100100" ' 9

    BC39(65) = "100001001" ' A

    BC39(66) = "001001001" ' B

    BC39(67) = "101001000" ' C

    BC39(68) = "000011001" ' D

    BC39(69) = "100011000" ' E

    BC39(70) = "001011000" ' F

    BC39(71) = "000001101" ' G

    BC39(72) = "100001100" ' H

    BC39(73) = "001001100" ' I

    BC39(74) = "000011100" ' J

    BC39(75) = "100000011" ' K

    BC39(76) = "001000011" ' L

    BC39(77) = "101000010" ' M

    BC39(78) = "000010011" ' N

    BC39(79) = "100010010" ' O

    BC39(80) = "001010010" ' P

    BC39(81) = "000000111" ' Q

    BC39(82) = "100000110" ' R

    BC39(83) = "001000110" ' S

    BC39(84) = "000010110" ' T

    BC39(85) = "110000001" ' U

    BC39(86) = "011000001" ' V

    BC39(87) = "111000000" ' W

    BC39(88) = "010010001" ' X

    BC39(89) = "110010000" ' Y

    BC39(90) = "011010000" ' Z


    MD_BC39 = BC39(Asc(CharCode))


Exit_BC39:

    Exit Function


ErrorTrap_BC39:

    MD_BC39 = ""

    Resume Exit_BC39


End Function



С една корекция в кода, при мен показва баркод със стойност взета от TextBox-а.

Редактирано от Ken (преглед на промените)

  • Автор

Извинявай за олигофренския въпрос, ама какво трябва да се получи като изпълня стъпките? Не мога да разбера целта, която гоня ;)

Редактирано от qpqpqp (преглед на промените)

Извинявай за олигофренския въпрос, ама какво трябва да се получи като изпълня стъпките? Не мога да разбера целта, която гоня ;)

В Report-а, там където е TextBox-а, ще се генерира баркод със стойността записана в TextBox-а.

  • Автор

В Report-а, там където е TextBox-а, ще се генерира баркод със стойността записана в TextBox-а.

Пффф... Перфектен си :yanim: . Много ти благодаря. Сега като му дам принт превю ми иска стойност на параметър, от която мисля че нищо не зависи. Какво ще кажеш? Понеже като гледам, щриха се определя от стойността в текстовото поле, а не от стойността на параметъра, която ми иска да задам.

Пффф... Перфектен си :yanim: . Много ти благодаря. Сега като му дам принт превю ми иска стойност на параметър, от която мисля че нищо не зависи. Какво ще кажеш? Понеже като гледам, щриха се определя от стойността в текстовото поле, а не от стойността на параметъра, която ми иска да задам.

Може би имаш Option explicit на втория ред в кода. Махни го, или дефинирай Result.

  • Автор

Може би имаш Option explicit на втория ред в кода. Махни го, или дефинирай Result.

Не знам кое е Option explicit, може би защото го нямам. Не знам как да дефинирам Result :speak:

Виж... всичко е ок и съм ти много благодарен !!! :wors:

Сега ето го и следващото въпросче. От таблица с разни материалчета има една колона, която съм я кръстил "Баркод", задал съм я от тип автономериране, за да слага автоматично номерче, което не се повтаря с нито едно друго, т.е искам да използвам автономерирането за баркод, само че не знам как да го направя да е от 13 символа и стойността, която въвежда да я слага най-накрая или в началото и всичко друго да е нули. Понеже когато щриха е генериран от една цифричка, баркод четеца не може да прочете щриха, а като е генериран от 13 си го чете перфектно. Не се сещам просто как да го направя, ако ти идва нещо на ум няма да ти се разсърдя ;) Макар че като се замисля, той баркода последната му цифра се изчислява някакси незнам как и не съм много сигурен дали така ще стане, но какво пък, ще пробваме. Мерси пак... Много ми помогна.

Редактирано от qpqpqp (преглед на промените)

Не знам кое е Option explicit, може би защото го нямам. Не знам как да дефинирам Result :offtopic_s:

Виж... всичко е ок и съм ти много благодарен !!! :ph34r:

Сега ето го и следващото въпросче. От таблица с разни материалчета има една колона, която съм я кръстил "Баркод", задал съм я от тип автономериране, за да слага автоматично номерче, което не се повтаря с нито едно друго, т.е искам да използвам автономерирането за баркод, само че не знам как да го направя да е от 13 символа и стойността, която въвежда да я слага най-накрая или в началото и всичко друго да е нули. Понеже когато щриха е генериран от една цифричка, баркод четеца не може да прочете щриха, а като е генериран от 13 си го чете перфектно. Не се сещам просто как да го направя, ако ти идва нещо на ум няма да ти се разсърдя :) Макар че като се замисля, той баркода последната му цифра се изчислява някакси незнам как и не съм много сигурен дали така ще стане, но какво пък, ще пробваме. Мерси пак... Много ми помогна.

За ControlSource на полето с баркода задай:

=Left("0000000000000";13-Len([barcode])) & [barcode]

Като заместиш името на полето, ако твоето се различава.

  • Автор

За ControlSource на полето с баркода задай:

=Left("0000000000000";13-Len([barcode])) & [barcode]

Като заместиш името на полето, ако твоето се различава.

:rolleyes: Нещо не се получава. Щрихите на всички числа станаха еднакви и четеца не ги чете. Освен това като принтирам report-a щриха не ми излиза както на превюто. На мен идеята ми беше ако може в самата таблица, а не в отчета, някакси да си генерира баркода, но като се замисля най-вероятно няма да има как да стане, понеже те цифрите на баркода се изчисляват по някакъв начин, но не знам по какъв. Когато в полето с баркод в таблицата въведа цифрите на баркод изчислен от програма всичко е ток и жица. Само че аз искам през аксеса да се генерира. Може би искам много ;)

Редактирано от qpqpqp (преглед на промените)

:rolleyes: Нещо не се получава. Щрихите на всички числа станаха еднакви и четеца не ги чете. Освен това като принтирам report-a щриха не ми излиза както на превюто. На мен идеята ми беше ако може в самата таблица, а не в отчета, някакси да си генерира баркода, но като се замисля най-вероятно няма да има как да стане, понеже те цифрите на баркода се изчисляват по някакъв начин, но не знам по какъв. Когато в полето с баркод в таблицата въведа цифрите на баркод изчислен от програма всичко е ток и жица. Само че аз искам през аксеса да се генерира. Може би искам много ;)

Пробвай, като на това място:

'Set handle on control.

Barcode = Ctrl.ControlSource

редактираш така :

'Set handle on control.

Barcode = Ctrl

Освен това остави стойността на полето за баркод да е само Barcode, без нулите. Ако трябва увеличи размера на това поле.

Редактирано от Ken (преглед на промените)

  • Автор

Пробвай, като на това място:

'Set handle on control.

Barcode = Ctrl.ControlSource

редактираш така :

'Set handle on control.

Barcode = Ctrl

Освен това остави стойността на полето за баркод да е само Barcode, без нулите. Ако трябва увеличи размера на това поле.

Просто не мога с думи да опиша колко много ми помогна... злато си :);):lol6::wors:

Благодаря ти !

Редактирано от qpqpqp (преглед на промените)

  • Автор

Направил съм маркосче, което стартира една форма, от която може да се пускат други форми, отчети и т.н. Искам така да направя, че като стартирам тоя макрос да се включи нещо, което следи всички дати (дата на последна проверка на някакъв уред) и примерно, ако са минали 11 месеца от последната проверка да изкача съобщение, напомнящо, че е време за следваща проверка. Имаш ли идея как да го направя. Мислех в макроса да сложа MsgBox, ама не знам какво трябва да пиша в condition и дали изобщо може да стане по този начин.

П.П. Нахален съм до дупка да знаеш :blink:

Редактирано от qpqpqp (преглед на промените)

Направил съм маркосче, което стартира една форма, от която може да се пускат други форми, отчети и т.н. Искам така да направя, че като стартирам тоя макрос да се включи нещо, което следи всички дати (дата на последна проверка на някакъв уред) и примерно, ако са минали 11 месеца от последната проверка да изкача съобщение, напомнящо, че е време за следваща проверка. Имаш ли идея как да го направя. Мислех в макроса да сложа MsgBox, ама не знам какво трябва да пиша в condition и дали изобщо може да стане по този начин.

П.П. Нахален съм до дупка да знаеш :cool:

Формата има едно събитие OnTimer, та ако в неговия код направиш проверката, тя ще се изпълнява през интервала, зададен в TimerInterval пак в събитията на формата.

  • Автор

Формата има едно събитие OnTimer, та ако в неговия код направиш проверката, тя ще се изпълнява през интервала, зададен в TimerInterval пак в събитията на формата.

Значи в кода пиша ето това :

Private Sub Form_Open(Cancel As Integer)

Me.TimerInterval = 10000

End Sub

Private Sub Form_Timer()

Me.Requery

MsgBox "requery"

End Sub

Там, където е TimerInterval = 10000 , това са 10000 милисекунди. Може би на мястото на тези секунди трябва да направя формулка да търси в полетата на "дата на последна проверка" и да прибави 11 месеца, ама не знам как естествено.

Значи в кода пиша ето това :

Private Sub Form_Open(Cancel As Integer)

Me.TimerInterval = 10000

End Sub

Private Sub Form_Timer()

Me.Requery

MsgBox "requery"

End Sub

Там, където е TimerInterval = 10000 , това са 10000 милисекунди. Може би на мястото на тези секунди трябва да направя формулка да търси в полетата на "дата на последна проверка" и да прибави 11 месеца, ама не знам как естествено.

Тук трябва да добавиш проверката :

Private Sub Form_Timer()

// Замени   името на полето за дата на проверката, и името на таблицата с твоите

    Set RST = CurrentDb().OpenRecordset("SELECT  CheckDate FROM Table1 WHERE (CheckDate <= DateAdd(Month, -11, GETDATE()))", dbOpenDynaset)

    If RST.RecordCount > 0 Then

       MsgBox "Има записи по-стари от 11 месеца !"

    End If

    RST.Close

End Sub

  • 2 седмици по-късно...
  • Автор

Тук трябва да добавиш проверката :

Private Sub Form_Timer()

// Замени   името на полето за дата на проверката, и името на таблицата с твоите

    Set RST = CurrentDb().OpenRecordset("SELECT  CheckDate FROM Table1 WHERE (CheckDate <= DateAdd(Month, -11, GETDATE()))", dbOpenDynaset)

    If RST.RecordCount > 0 Then

       MsgBox "Има записи по-стари от 11 месеца !"

    End If

    RST.Close

End Sub

Когато напиша проверката:

Private Sub Form_Timer()

Set RST = CurrentDb().OpenRecordset("SELECT [Дата последна проверка] FROM [Списък ПГ] WHERE ([Дата последна проверка] <= DateAdd(Month, -11, GETDATE()))", dbOpenDynaset)

If RST.RecordCount > 0 Then

MsgBox "Има записи по-стари от 11 месеца !"

End If

RST.Close

End Sub

Излиза ми грешка: "Run time error '3085':

Неопределена функция "GETDATE" в израз.

Знаеш ли как да я оправя ?

Когато напиша проверката:

Private Sub Form_Timer()

Set RST = CurrentDb().OpenRecordset("SELECT [Дата последна проверка] FROM [Списък ПГ] WHERE ([Дата последна проверка] <= DateAdd(Month, -11, GETDATE()))", dbOpenDynaset)

If RST.RecordCount > 0 Then

MsgBox "Има записи по-стари от 11 месеца !"

End If

RST.Close

End Sub

Излиза ми грешка: "Run time error '3085':

Неопределена функция "GETDATE" в израз.

Знаеш ли как да я оправя ?

Отвори Tools -> References. Ако няма отметка на "Microsoft DAO 3.5 Object Library" я сложи и щракни Ок.

Ако при теб има во-висока версия на DAO избери нея !

2. Замести GETDATE() с DATE()

P.S. Ако искаш да се връща не само датата, но и час, минути и секунди, вместо date() сложи now()

Редактирано от Ken (преглед на промените)

  • Автор

Отвори Tools -> References. Ако няма отметка на "Microsoft DAO 3.5 Object Library" я сложи и щракни Ок.

Ако при теб има во-висока версия на DAO избери нея !

2. Замести GETDATE() с DATE()

P.S. Ако искаш да се връща не само датата, но и час, минути и секунди, вместо date() сложи now()

Сложих отметка на "Microsoft DAO 3.6 object library", смених GETDATE() с DATE(), но само се смени грешката, стана следната:

Runtime error '3061':

Твърде малко параметри. Очаква се 1.

Сложих отметка на "Microsoft DAO 3.6 object library", смених GETDATE() с DATE(), но само се смени грешката, стана следната:

Runtime error '3061':

Твърде малко параметри. Очаква се 1.

Покажи кода на заявката.

Това, което след :

Set RST = CurrentDb().OpenRecordset(

в кавичките

  • Автор

Покажи кода на заявката.

Това, което след :

Set RST = CurrentDb().OpenRecordset(

в кавичките

Private Sub Form_Timer()

Set RST = CurrentDb().OpenRecordset("SELECT [Дата последна проверка] FROM [Списък ПГ] WHERE ([Дата последна проверка] <= DateAdd(Month, -11, DATE()))", dbOpenDynaset)

If RST.RecordCount > 0 Then

MsgBox "Има записи по-стари от 11 месеца !"

End If

RST.Close

End Sub

Private Sub Form_Timer()

Set RST = CurrentDb().OpenRecordset("SELECT [Дата последна проверка] FROM [Списък ПГ] WHERE ([Дата последна проверка] <= DateAdd(Month, -11, DATE()))", dbOpenDynaset)

If RST.RecordCount > 0 Then

MsgBox "Има записи по-стари от 11 месеца !"

End If

RST.Close

End Sub

Трябва да бъде:

Set RST = CurrentDb().OpenRecordset("SELECT [Дата последна проверка] FROM [Списък ПГ] WHERE ([Дата последна проверка] <= DateAdd("m", -11, DATE()))", dbOpenDynaset)

явно, когато съм ти давал кода, съм правил заявката в MS SQL

Редактирано от Ken (преглед на промените)

  • Автор

Трябва да бъде:

Set RST = CurrentDb().OpenRecordset("SELECT [Дата последна проверка] FROM [Списък ПГ] WHERE ([Дата последна проверка] <= DateAdd("m", -11, DATE()))", dbOpenDynaset)

явно, когато съм ти давал кода, съм правил заявката в MS SQL

След като пейстна това, което ми каза и кликна някъде другаде дава тая грешка: http://alfa.kachi-snimka.info/images/viu1255450337a.JPG

След като пейстна това, което ми каза и кликна някъде другаде дава тая грешка: http://alfa.kachi-snimka.info/images/viu1255450337a.JPG

Set RST = CurrentDb().OpenRecordset("SELECT [Дата последна проверка] FROM [Списък ПГ] WHERE ([Дата последна проверка] <= DateAdd('m', -11, DATE()))", dbOpenDynaset)

Регистрирайте се или влезете в профила си за да коментирате

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

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

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.