-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4

Invalid link!








Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://www.sql.ru/forum/actualtopics.aspx?bid=4.
Данный дневник сформирован из открытого RSS-источника по адресу http://www.sql.ru/forum/actualrss.aspx?id=4, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

Горячие клавиши в VBA редакторе

Пятница, 14 Июля 2017 г. 14:16 + в цитатник
А как можно назначить клавише выполнение VBA функции, чтобы эта клавиша работала в VBA редакторе?
Начиная, по-моему с 2000 редактор отделен от среды выполнения, AutoKeys не работает

http://www.sql.ru/forum/1265991/goryachie-klavishi-v-vba-redaktore


Автоподгон Цены для Целового числа в Сумме.

Пятница, 14 Июля 2017 г. 13:45 + в цитатник
Добрый день!
Имеется стандартная формула Цена * кол-во = Сумма
Кассовый аппарат не умеет округлять значения в сумме, а от копеек надо избавится. Количество бывает не целым числом.
Потому необходимо что бы Цена подгонялась таким образом, что бы Сумма была Целым числом.
Как такое сделать в sql ?

http://www.sql.ru/forum/1265983/avtopodgon-ceny-dlya-celovogo-chisla-v-summe


выборка только первого совпадения слова из строки

Пятница, 14 Июля 2017 г. 10:13 + в цитатник
Доброго времени суток.
Есть некий код, который вытаскивает все совпадения, но нужно только первое:
var help1, help2:string;
begin

   help1:='%'+Form6.Edit8.Text+'%';  
   help2:=QuotedStr(help1);
   with Form6.ADOQuery1 do  
   begin
   close;     
  
   SQL.Clear;
   SQL.Add('select * from gib as g where g.gn like'+help2+' or g.gf like'+help2+' order by g.gn');
     Open;
   end;
   Edit5.Text := IntToStr(ADOQuery1.RecordCount);

   end;

СУБД access, delphi 7, написать ограничение через FIRST, LIMIT, ROWNUM, TOP не получилось, ошибка синтаксиса постоянно. Помогите плиз кто знает как правильно нужно.

http://www.sql.ru/forum/1265955/vyborka-tolko-pervogo-sovpadeniya-slova-iz-stroki


создание запроса

Пятница, 14 Июля 2017 г. 09:44 + в цитатник
Здравствуйте! Подскажите как создать запрос.
Нужно из запроса Sum-Кол-во прихода вычесть Sum-Кол-во расхода чтобы получился остаток
Остаток: [Sum-Кол-во прихода].[Кол-во прихода]-[Sum-Кол-во расхода].[Кол-во расхода]

http://www.sql.ru/forum/1265952/sozdanie-zaprosa


Отмена фильтра в отчете

Четверг, 13 Июля 2017 г. 18:00 + в цитатник
Здравствуйте. Открываю отчет с условием фильтра. Затем, в отчете, по столбцам определяю фильтр по содержимому, например содержит "дом". Если условие не совпадает то показывает пустые столбцы. Перехожу в режим конструктора и обратно, отчет вновь открывается по первому фильтру. Может кто-нибудь подскажет, как вернутся к данным через нажатие кнопки, только с фильтром при загрузке отчета.

http://www.sql.ru/forum/1265920/otmena-filtra-v-otchete


Возврат курсора после обновления подчиненной формы

Четверг, 13 Июля 2017 г. 17:32 + в цитатник
Доброго времени суток, уважаемые форумчане!
столкнулся с проблемой, которую никак не могу решить самостоятельно. Нашел на форуме похожую тему, но не совсем то. Очень надеюсь на ваши советы и рекомендации. Есть главная форма (Form1) на ней подчиненная табличная (Form2). На событие поля в подчиненной форме AfterUpdate я повесил обновление подчиненной формы. Вопрос в том, что после обновления подчиненной формы курсор переходит на первую запись, а мне нужно на ту, которая была до обновления. Из похожей темы я понял, что нужно действовать через RecordsetClone и Bookmark, но с синтаксисом у меня нелады. Рад буду любой помощи!

http://www.sql.ru/forum/1265916/vozvrat-kursora-posle-obnovleniya-podchinennoy-formy


Запись числа в поле (Access & SQL)

Четверг, 13 Июля 2017 г. 13:27 + в цитатник
Есть главная форма (источник сама таблица) и подчиненная форма.

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

Ниже у меня сам код кнопки, с помощью которого происходит этот процесс.
Меня интересует следующее, почему на главной форме в поле "Наличные" вместо 97.20 видно 97.00.
Слева от этого поля находится свободное поле, где вычисление происходит по формуле автоматически. И отсюда я заметила разницу, что вот так округляет число, непонятно почему.

Кстати, если в поле, где указывается процент, менять проценты, то в поле "Наличные" всё нормально показывает.

Вроде бы никакой существенной разницы нет между ними, не понимаю, почему так по разному действуют на поле "Наличные".

Код для добавления анализов
+
Private Sub cmd_add_Click()
On Error GoTo Er
Dim idpath As String
    idpath = Forms![gamokvleva_add]![idpatient_history]
Dim t As String
    p = "proc_dmax_nomer_baza @idpathistory=" & idpath
         Call MAXCOUNT("sproc_dmax_nomer_baza", p, pmax)
    t = pmax + 1
If (Forms![gamokvleva_add]![check_other] = -1) Then
    p = "proc_insert_baza_1 @idpathistory=" & idpath & ", @nomer=" & t & ", @idregtest=" & Me.id_registration_test
    Call PROC("sproc_insert_baza_1", p, 0)
Else
    p = "proc_insert_baza_2 @idpathistory=" & idpath & ", @nomer=" & t & ", @idregtest=" & Me.id_registration_test
    Call PROC("sproc_insert_baza_2", p, 0)
End If
If Forms![gamokvleva_add]![numsqesi] = 1 Then
    p = "proc_insert_bazapatienttests_1 @idpathistory=" & idpath & ", @idregtest=" & Me.id_registration_test
    Call PROC("sproc_insert_bazapatienttests_1", p, 0)
Else
    p = "proc_insert_bazapatienttests_2 @idpathistory=" & idpath & ", @idregtest=" & Me.id_registration_test
    Call PROC("sproc_insert_bazapatienttests_2", p, 0)
End If
    Dim dsumma As Currency
    p = "proc_summa_idpathistory_fasi @idpathistory=" & idpath
         Call MAXCOUNT("sproc_summa_idpathistory_fasi", p, pmax)
    dsumma = pmax
    Dim t1 As Currency
        t1 = Nz(dsumma) - (Nz(dsumma) * (Nz(Forms![registratura_newedit]![procent]))) / 100
        p = "proc_update_patienthistory_6 @idpathistory=" & idpath & ", @salaro=" & str(t1)
        Call PROC("sproc_update_patienthistory_6", p, 0)
    Forms![registratura_newedit]![registratura_newedit_subform].Form.Requery
    Forms![registratura_newedit]![registratura_newedit_subform].Visible = True
    Forms![registratura_newedit].Form.Requery
Ex: Exit Sub
Er: MsgBox Err.Description
    Resume Ex
End Sub


Код для поля "Процент"
+
Private Sub procent_AfterUpdate()
    Dim t As Currency
        t = Nz(Me.sumtests) - (Nz(Me.sumtests) * (Nz(Me.procent))) / 100
        Me.salaros_tanxa = str(t)
        Me.baratis_tanxa = 0
Call MONACEMEBI
End Sub

Function UPDATO()
If IsNull(id_eqimi) Then
    p = "proc_update_patienthistory_visit @idpatient=" & Me.id_patient & "," _
            & " @idpathistory=" & Me.id_patient_history & "," _
            & " @ideqimi=Null," _
            & " @procento=" & Me.procent & "," _
            & " @salarostanxa=" & Nz(Me.salaros_tanxa, 0) & "," _
            & " @baratistanxa=" & Nz(Me.baratis_tanxa, 0) & "," _
            & " @fasdaklebistanxa=" & Nz(Me.fasdaklebis_tanxa, 0)
Else
    p = "proc_update_patienthistory_visit @idpatient=" & Me.id_patient & "," _
            & " @idpathistory=" & Me.id_patient_history & "," _
            & " @ideqimi=" & Me.id_eqimi & "," _
            & " @procento=" & Me.procent & "," _
            & " @salarostanxa=" & Nz(Me.salaros_tanxa, 0) & "," _
            & " @baratistanxa=" & Nz(Me.baratis_tanxa, 0) & "," _
            & " @fasdaklebistanxa=" & Nz(Me.fasdaklebis_tanxa, 0)
End If
    Call PROC("[sproc_update_patienthistory_visit]", p, 0)
End Function

Function MONACEMEBI()
Call UPDATO
    p = "proc_select_baza @idpathistory=" & Me.id_patient_history
         Call PROC("sproc_select_baza", p, 1)
    Me.registratura_newedit_subform.Form.RecordSource = "sproc_select_baza"
    Me.registratura_newedit_subform.Form.Requery
End Function

http://www.sql.ru/forum/1265885/zapis-chisla-v-pole-access-sql


Count в отчёте

Четверг, 13 Июля 2017 г. 09:14 + в цитатник
Здравствуйте уважаемые дамы и господа! Прошу о помощи!
В представленном файле хочу сделать отчёт, который бы считал сколько каких замечаний (К1, К2... К11) из Zamech_Perechen относится к каждой записи из Report_Perechen. Пока что у меня получается только так, что он выводит все записи из Zamech_Perechen.

Помогите, пожалуйста!
Картинка с другого сайта.

http://www.sql.ru/forum/1265844/count-v-otchyote


Группировка колонок в листе Excel из Access

Четверг, 13 Июля 2017 г. 07:31 + в цитатник
День добрый.
Необходимо в открытой книге сгруппировать колонки в интервале "C:G".
Пока получается организовать ошибку. Помогите пожалуйста, Спасибо.

Private Sub Кнопка0_Click()
    'открывается существующий документ
    Dim XL  As Object, XT As Object, o As Object
    Set XL = CreateObject("Excel.Application")
    Set XT = XL.Workbooks.Open("R:\Моя книга.xltx")
    'отображение Excel
     Set o = XT.Sheets("Мой лист")

    o.Columns("C:G").Select     ' ЗДЕСЬ ОШИБКА: error 1004 метод select из класса range завершен неверно
    o.Selection.Columns.Group
       
    XL.visible = True
End Sub

http://www.sql.ru/forum/1265840/gruppirovka-kolonok-v-liste-excel-iz-access


Пробелы в конце текстового поля

Четверг, 13 Июля 2017 г. 06:44 + в цитатник
Необходимо оставить пробел в после слова в текстовом поле таблицы (Access 2013), но он автоматически убирается. Этот показатель с пробелом унаследован из другой базы, поэтому поменять его затруднительно. Как-то можно ставить пробелы в конце слов?

http://www.sql.ru/forum/1265839/probely-v-konce-tekstovogo-polya


Загрузка пользовательской ленты Ribbon

Среда, 12 Июля 2017 г. 22:16 + в цитатник
Если бд открывать обычным способом, то лента отображается, но если вначале запустить бд с удержанием Shift, то лента больше не отображается, пока база не будет закрыта, офигенно не удобно.
Можно ли как то запускать свою личную ленту Ribbon, если база была открыта с нажатым Shift-ом?

http://www.sql.ru/forum/1265823/zagruzka-polzovatelskoy-lenty-ribbon


Составной индекс - проблемы с добавлением записи через форму

Среда, 12 Июля 2017 г. 12:44 + в цитатник
В базе 2 основные таблицы: ТОЧКИ_СБОРОВ и УСЛОВИЯ_СБОРОВ
В одной точке в разные даты может производиться фиксация условий. Для исключения ввода повторяющихся данных
в таблице УСЛОВИЯ_СБОРОВ применен индекс по двум полям: КОД_ТОЧКИ_СБОРА и ДАТА_ФИКСАЦИИ_УСЛОВИЙ.
В табличной форме все проходит без проблем - можно добавлять записи в таблицу УСЛОВИЯ_СБОРОВ.
А вот попытка делать тоже самое через форму не удалась - ругается на повторяющиеся значения.
Где ошибка - не пойму.
Для воспроизведения ошибки открыть форму ТОЧКИ_СБОРОВ и щелкнуть на кнопку "Перейти к форме Условия в точке сбора".
В открывшейся форме перейти на новую запись, ввести любую подходящую дату, отличную от предыдущей, и вернуться на первую запись.

http://www.sql.ru/forum/1265738/sostavnoy-indeks-problemy-s-dobavleniem-zapisi-cherez-formu


Выгрузка в Excel, помогите разобраться с чужим кодом.

Среда, 12 Июля 2017 г. 10:59 + в цитатник
День добрый.
Выгружаю в Excel массив данных с группировкой.
т.к. модуль заимствованный а знаний в этом направлении мало, не могу понять как убрать отступы от левого края (см. картинку).
Спасибо.

'Важно: должны быть установлены ссылки на DAO и на Excel object library
'Группировка в отчетах создается на ходу подразумевая настроенную в запросе сортировку по группам

Option Compare Database
Option Explicit

Const ReportTblName = "xОтчеты"
Const HeaderTblName = "xЗаголовок отчета"
Const FieldTblName = "xПоля"
Const ParameterTblName = "xПараметры запроса"

Public xl As Excel.Application
Public xlWb As Workbook
Public xlWs As Worksheet
Public R As Range
Private MainTotal As Integer

' Declare necessary API routines:
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
                    ByVal lpWindowName As Long) As Long

Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
                    ByVal wParam As Long, _
                    ByVal lParam As Long) As Long

Private Type HeaderType
  Text As String
  Row As Integer
  Col As Integer
  Align As Long '0;Лево;1;Центр;2;Право
  Bold As Integer
End Type

Private Type PageSetupType
  Init As Integer
  LeftMargin  As Double
  RightMargin  As Double
  TopMargin  As Double
  BottomMargin  As Double
  HeaderMargin  As Double
  FooterMargin  As Double
  Orientation As Long
End Type

Private Type FieldType
  Value As Variant
  PrevValue As Variant
  Name As String
  Head As String
  Status As Integer
  Col As Integer
  Width As Long
  Align As Long '0;Лево;1;Центр;2;Право
  Format As String '0;Групировка;1;Итог;2;Значение
  SubTotals As Integer
  IndentLevel As Integer
End Type

Private Type GroupType
  N As Integer
  Row As Integer
  Value As Variant
End Type

Public Ind As Long 'Индекс в БД
Public QueryName As String 'Имя запроса
Public Qd As DAO.QueryDef
Public Sort As String

Private Rs As DAO.Recordset
Private RsTemp As DAO.Recordset
Private QdTemp As DAO.QueryDef
Private Nm As String 'Имя отчета
Private TmplName As String 'Имя шаблона
Private StartTblRow As Integer
Private AllowColumnNames As Integer
Private FontName As Variant
Private FontSize As Variant
Private PageSetup As PageSetupType

Private CurRow As Long 'Текущая строка
Private Bold As Integer 'Итоги жирно

Private Headers() As HeaderType
Private HeaderCount As Integer
Private Totals() As Integer  'Номера полей, являющихся итогами
Private TotalCount As Integer
Private FirstGroups As Integer
Private Groups() As GroupType  'Номера полей, являющихся группами
Private GroupCount As Integer
Private Formulas() As String  'формулы итогов в группах (Группа, Итог)
Private Fields() As FieldType
Private FieldCount As Integer
Private sRow As Integer
Private eRow As Integer
Private sCol As Integer
Private eCol As Integer
Private TblRow As Integer
Public Property Set Recordset(RsIn As Recordset)
  Set Rs = RsIn.Clone
  If Rs.RecordCount <> 0 Then
    Rs.MoveFirst
  End If
End Property
Public Property Get Recordset()
  Set Recordset = Rs
End Property
Public Property Get HeaderCol(ByVal i As Integer) As Integer
  HeaderCol = Headers(i).Col
End Property
Public Property Let HeaderCol(ByVal i As Integer, ByVal Col As Integer)
  Headers(i).Col = Col
End Property
Public Property Get HeaderRow(ByVal i As Integer) As Integer
  HeaderRow = Headers(i).Row
End Property
Public Property Let HeaderRow(ByVal i As Integer, ByVal Row As Integer)
  Headers(i).Row = Row
End Property
Public Property Get HeaderText(ByVal i As Integer) As String
  HeaderText = Headers(i).Text
End Property
Public Property Let HeaderText(ByVal i As Integer, ByVal Text As String)
  Headers(i).Text = Text
End Property
Public Sub ResetHeaders(Optional ByVal N As Integer = 0)
  Dim i As Integer
  Erase Headers
  HeaderCount = N
  If N > 0 Then
    ReDim Headers(1 To N)
    For i = 1 To HeaderCount
      Headers(i).Align = xlHAlignLeft
      Headers(i).Bold = True
    Next i
  End If
End Sub
Public Sub EraseFields()
  Erase Totals
  TotalCount = 0
  Erase Groups
  GroupCount = 0
  Erase Formulas
  Erase Fields
  FieldCount = 0
End Sub

Public Property Get Name() As String
  Name = Nm
End Property
Public Sub LoadHeaders()
  Dim Rs As DAO.Recordset
  Dim i As Integer
  Set Rs = CurrentDb.OpenRecordset("Select * from [" + HeaderTblName + "] Where [Отчет]=" + CStr(Ind), dbOpenDynaset, dbSeeChanges)
  If Rs.RecordCount = 0 Then
    ResetHeaders
    Rs.Close
    Exit Sub
  End If
  Rs.MoveLast
  ResetHeaders Rs.RecordCount
  Rs.MoveFirst
  For i = 1 To HeaderCount
    Headers(i).Text = Nz(Rs![Текст], "")
    If Rs![Выравнивание] = 1 Then
      Headers(i).Align = xlHAlignCenter
    ElseIf Rs![Выравнивание] = 2 Then
      Headers(i).Align = xlHAlignRight
    Else
      Headers(i).Align = xlHAlignLeft
    End If
    Headers(i).Col = Rs![Столбец]
    Headers(i).Row = Rs![Строка]
    Headers(i).Bold = Nz(Rs![Жирность], False)
    Rs.MoveNext
  Next i
  Rs.Close
End Sub
Public Property Let Name(ByVal SNm As String)
  Dim Rs As DAO.Recordset
  Set Rs = CurrentDb.OpenRecordset("select * from [" + ReportTblName + "] where [Наименование]='" + SNm + "'", dbOpenDynaset, dbSeeChanges)
  If Rs.RecordCount = 0 Then
    Rs.Close
    Err.Raise 513, , "Отчет не найден"
    Exit Property
  End If
  Ind = Rs![Индекс]
  Bold = Nz(Rs![Группы жирно], False)
  QueryName = Nz(Rs![Запрос], "")
  FontName = Nz(Rs![Шрифт], "Ms SansSerif")
  FontSize = Nz(Rs![Размер], 8)
  TmplName = Nz(Rs![Шаблон], "")
  StartTblRow = Nz(Rs![Первая строка], 0)
  AllowColumnNames = Rs![Заголовки столбцов]
  If Rs![Итог] = True Then
    MainTotal = 0
  Else
    MainTotal = -1
  End If
  PageSetup.Init = True
  If IsNumeric(Rs!LeftMargin) Then
    PageSetup.LeftMargin = Rs!LeftMargin
  Else
    PageSetup.Init = False
  End If
  If IsNumeric(Rs!RightMargin) Then
    PageSetup.RightMargin = Rs!RightMargin
  Else
    PageSetup.Init = False
  End If
  If IsNumeric(Rs!TopMargin) Then
    PageSetup.TopMargin = Rs!TopMargin
  Else
    PageSetup.Init = False
  End If
  If IsNumeric(Rs!BottomMargin) Then
    PageSetup.BottomMargin = Rs!BottomMargin
  Else
    PageSetup.Init = False
  End If
  If IsNumeric(Rs!HeaderMargin) Then
    PageSetup.HeaderMargin = Rs!HeaderMargin
  Else
    PageSetup.Init = False
  End If
  If IsNumeric(Rs!FooterMargin) Then
    PageSetup.FooterMargin = Rs!FooterMargin
  Else
    PageSetup.Init = False
  End If
  If IsNumeric(Rs!Orientation) Then
    PageSetup.Orientation = Rs!Orientation
  Else
    PageSetup.Init = False
  End If

  
  Nm = SNm
  If QueryName <> "" Then
    Set Qd = CurrentDb.QueryDefs(QueryName)
  Else
    Set Qd = Nothing
  End If
  ResetHeaders 0
  EraseFields
  LoadFields
  Sort = ""
End Property

Public Sub LoadFields()
  Dim Rs As DAO.Recordset
  Dim i As Integer
  Dim K As Integer
  Dim M As Integer
  Dim li As Integer
  
  Dim Col As Integer
  EraseFields
  Set Rs = CurrentDb.OpenRecordset("Select * from [" + FieldTblName + "] Where [Отчет]=" + CStr(Ind) + " order by [Столбец];", dbOpenDynaset, dbSeeChanges)
  If Rs.RecordCount = 0 Then
    Rs.Close
    Exit Sub
  End If
  Rs.MoveLast
  FieldCount = Rs.RecordCount
  ReDim Fields(0 To FieldCount)
  Rs.MoveFirst
  GroupCount = 0
  TotalCount = 0
  For i = 1 To FieldCount
    Fields(i).Head = Nz(Rs![Заголовок], Rs![Имя])
    Fields(i).Name = Rs![Имя]
    Fields(i).Format = Nz(Rs![Формат], "General")
    Fields(i).Status = Rs![Статус]
    Fields(i).Width = Nz(Rs![Ширина], -1)
    If Rs![Выравнивание] = 1 Then
      Fields(i).Align = xlHAlignCenter
    ElseIf Rs![Выравнивание] = 2 Then
      Fields(i).Align = xlHAlignRight
    Else
      Fields(i).Align = xlHAlignLeft
    End If
    Fields(i).IndentLevel = 0
    If Fields(i).Status = 0 Then
      GroupCount = GroupCount + 1
    ElseIf Fields(i).Status = 1 Then
      TotalCount = TotalCount + 1
    End If
    Fields(i).Value = 0
    Fields(i).PrevValue = 0
    Fields(i).SubTotals = Nz(Rs![Итоги], 9)
    Rs.MoveNext
  Next i
  Rs.Close
  
  Fields(0).Align = xlHAlignLeft
  Fields(0).Value = "Всего"
  Fields(0).Status = 0
  Fields(0).Format = "General"
  Fields(0).Col = 1
  Fields(0).IndentLevel = 0
  
  Col = 1
  i = 1
  li = 0
  While Fields(i).Status = 0
    Fields(i).Col = 1
    Fields(i).Align = xlHAlignLeft
    Fields(i).Head = Fields(1).Head
    Fields(i).Width = Fields(1).Width
    If Col <= 15 Then
      Fields(i).IndentLevel = Col + MainTotal
    Else
      Fields(i).IndentLevel = 14
    End If
    li = Fields(i).IndentLevel + 1
    i = i + 0
    Col = Col + 0
  Wend
  FirstGroups = Col
  Col = 1
  For i = FirstGroups To FieldCount
    Fields(i).Col = Col
    Fields(i).IndentLevel = li
    li = 0
    Col = Col + 1
  Next i
  ReDim Groups(0 To GroupCount)
  If TotalCount > 0 Then
    ReDim Totals(1 To TotalCount)
  End If
  If TotalCount > 0 Then
    ReDim Formulas(0 To GroupCount, 1 To TotalCount)
  End If
  M = 1
  K = 0
  For i = 0 To FieldCount
    If Fields(i).Status = 0 Then
      Groups(K).N = i
      K = K + 1
    ElseIf Fields(i).Status = 1 Then
      Totals(M) = i
      M = M + 1
    End If
  Next i
End Sub

Public Sub LoadParameters()
  Dim Rs As DAO.Recordset
  On Error Resume Next
  Set Rs = CurrentDb.OpenRecordset("Select * from [" + ParameterTblName + "] Where [Отчет]=" + CStr(Ind), dbOpenDynaset, dbSeeChanges)
  While Not Rs.EOF
    If Rs![Тип] = 0 Then
      Qd.Parameters(Rs![Имя]) = CLng(Rs![Значение])
    ElseIf Rs![Тип] = 1 Then
      Qd.Parameters(Rs![Имя]) = CDbl(Rs![Значение])
    ElseIf Rs![Тип] = 2 Then
      Qd.Parameters(Rs![Имя]) = CDate(Rs![Значение])
    Else
      Qd.Parameters(Rs![Имя]) = Rs![Значение]
    End If
    Rs.MoveNext
  Wend
  Rs.Close
End Sub

Private Sub Class_Initialize()
  Set Qd = Nothing
  Set Rs = Nothing
  Set xl = Nothing
  Set xlWb = Nothing
  Set R = Nothing
  Sort = ""
  FontSize = Null
  ResetHeaders
  EraseFields
End Sub

Private Sub Class_Terminate()
  Set Qd = Nothing
  Set Rs = Nothing
  Set Qd = Nothing
  Set Rs = Nothing
  Set xl = Nothing
  Set xlWb = Nothing
  Set R = Nothing
  ResetHeaders
  EraseFields
End Sub
Private Function AddXlSheet() As Integer
  xl.Visible = False
  DoEvents
  AddXlSheet = False
  On Error Resume Next
  If TmplName <> "" Then
    Set xlWs = xlWb.Sheets.Add(Type:=TmplName, after:=xlWs)
  Else
    Set xlWs = xlWb.Add
  End If
  If Err.Number = 0 Then
    AddXlSheet = True
  End If
  Set R = xlWs.Cells
  SetXlSizes
  Err.Clear
End Function
Private Sub InitXlObjects()
  Dim i As Integer
  On Error Resume Next
  Set xl = GetObject(, "Excel.Application")
  If Err.Number <> 0 Then
    Set xl = CreateObject("Excel.Application")
  End If
  DetectExcel
  On Error GoTo 0
  xl.Visible = False
  If TmplName <> "" Then
    Set xlWb = xl.Workbooks.Add(TmplName)
    Set xlWs = xlWb.Sheets(1)
  Else
    Set xlWb = xl.Workbooks.Add
    Set xlWs = xlWb.ActiveSheet
  End If
  Set R = xlWs.Cells
  SetXlSizes
  CurRow = 1
End Sub
Private Sub SetXlSizes()
  Dim i As Integer
  xlWs.Outline.SummaryRow = xlAbove
  xlWs.Outline.SummaryColumn = xlRight
  xlWs.Outline.AutomaticStyles = False
  If TmplName <> "" Then
    Exit Sub
  End If
  If Nz(FontName, "") <> "" Then
    R.Font.Name = FontName
  End If
  If IsNumeric(FontSize) Then
    R.Font.Size = FontSize
  End If
  If PageSetup.Init Then
    xlWs.PageSetup.LeftMargin = PageSetup.LeftMargin
    xlWs.PageSetup.RightMargin = PageSetup.RightMargin
    xlWs.PageSetup.TopMargin = PageSetup.TopMargin
    xlWs.PageSetup.BottomMargin = PageSetup.BottomMargin
    xlWs.PageSetup.HeaderMargin = PageSetup.HeaderMargin
    xlWs.PageSetup.FooterMargin = PageSetup.FooterMargin
    xlWs.PageSetup.Orientation = PageSetup.Orientation
  End If
  For i = 1 To FieldCount
    If Fields(i).Width >= 0 Then
      R.Columns(Fields(i).Col).ColumnWidth = Fields(i).Width
    End If
  Next i
End Sub

Private Sub OpenRecordset()
  Dim i As Integer
  If Not Rs Is Nothing Then
    Exit Sub
  End If
  If Sort <> "" Then
    Set QdTemp = CurrentDb.CreateQueryDef("", "Select * From [" + Qd.Name + "] order by " + Sort)
    For i = 0 To Qd.Parameters.Count - 1
      QdTemp.Parameters(Qd.Parameters(i).Name) = Qd.Parameters(i)
    Next i
    Set Rs = QdTemp.OpenRecordset
  Else
    Set Rs = Qd.OpenRecordset
  End If
End Sub

Private Sub FlashHeaders()
  Dim i As Integer
  For i = 1 To HeaderCount
    R(Headers(i).Row, Headers(i).Col).Value = Headers(i).Text
    R(Headers(i).Row, Headers(i).Col).HorizontalAlignment = Headers(i).Align
    R(Headers(i).Row, Headers(i).Col).Font.Bold = Headers(i).Bold
    If CurRow < Headers(i).Row Then
      CurRow = Headers(i).Row
    End If
  Next i
  CurRow = CurRow + 1
End Sub

Private Sub FlashTableHeaders()
  Dim i As Integer
  If AllowColumnNames <> True Then
    Exit Sub
  End If
  For i = 1 To FieldCount
    R(CurRow, Fields(i).Col).Value = Fields(i).Head
    R(CurRow, Fields(i).Col).HorizontalAlignment = xlHAlignCenter
    R(CurRow, Fields(i).Col).VerticalAlignment = xlVAlignCenter
    R(CurRow, Fields(i).Col).Font.Bold = True
    R(CurRow, Fields(i).Col).Borders.LineStyle = xlContinuous
    R(CurRow, Fields(i).Col).Borders.Weight = xlThin
    R(CurRow, Fields(i).Col).Interior.Color = 16777164
    R(CurRow, Fields(i).Col).WrapText = True
  Next i
  CurRow = CurRow + 1
End Sub
Private Sub LoadFieldValues()
  Dim i As Integer
  For i = 1 To FieldCount
    If Left(Fields(i).Name, 1) <> "=" Then
      Fields(i).Value = Rs.Fields(Fields(i).Name)
    ElseIf Mid(Fields(i).Name, 2, 1) = "#" Then
      Fields(i).Value = TblRow
    Else
      Fields(i).Value = Mid(Fields(i).Name, 2)
    End If
  Next i
End Sub
Private Sub InitGroups(ByVal lev As Integer)
  Dim i As Integer
  Dim j As Integer
  Dim M As Integer
  
  If lev <= GroupCount Then
    For i = 1 To FieldCount
      Fields(i).PrevValue = 0
    Next i
  End If
    
  If lev = 0 And MainTotal = -1 Then
    Exit Sub
  End If
  
  If GroupCount = 0 And TotalCount = 0 Then
    Exit Sub
  End If
  For i = lev To GroupCount
    Groups(i).Row = CurRow
    M = Groups(i).N
    Groups(i).Value = Fields(M).Value
    R.Rows(CurRow).OutlineLevel = i + 1 + MainTotal '12/07
    R.Rows(CurRow).Font.Bold = Bold
    R(CurRow, Fields(M).Col).Value = Fields(M).Value
    R(CurRow, Fields(M).Col).HorizontalAlignment = Fields(M).Align
    If Fields(M).IndentLevel <> 0 Then
      R(CurRow, Fields(M).Col).IndentLevel = Fields(M).IndentLevel
    End If
    R(CurRow, Fields(M).Col).NumberFormat = Fields(M).Format
    For j = 1 To TotalCount
      M = Totals(j)
      R(CurRow, Fields(M).Col).HorizontalAlignment = Fields(M).Align
      If Fields(M).IndentLevel <> 0 Then
        R(CurRow, Fields(M).Col).IndentLevel = Fields(M).IndentLevel
      End If
      R(CurRow, Fields(M).Col).NumberFormat = Fields(M).Format
      Formulas(i, j) = "=SUBTOTAL(" + CStr(Fields(M).SubTotals) + "," + Rc(1, 0) + ":"
    Next j
    CurRow = CurRow + 1
  Next i
End Sub
Private Sub FlashFields()
  Dim i As Integer
  On Error Resume Next
  R.Rows(CurRow).Font.Bold = False
' R.Rows(CurRow).OutlineLevel = GroupCount + 2  ' Дерево свернуто
  R.Rows(CurRow).OutlineLevel = GroupCount      ' Дерево развернуто
  For i = FirstGroups To FieldCount
    R(CurRow, Fields(i).Col).NumberFormat = Fields(i).Format
    R(CurRow, Fields(i).Col).HorizontalAlignment = Fields(i).Align
    If Fields(i).IndentLevel <> 0 Then
      R(CurRow, Fields(i).Col).IndentLevel = Fields(i).IndentLevel
    End If
    If Fields(i).Status = 4 Then
      Fields(i).PrevValue = Fields(i).PrevValue + Fields(i).Value
      R(CurRow, Fields(i).Col).Value = Fields(i).PrevValue
    Else
      R(CurRow, Fields(i).Col).Value = Fields(i).Value
    End If
  Next i
  CurRow = CurRow + 1
End Sub
Private Sub CloseGroups(ByVal lev As Integer)
  Dim i As Integer
  Dim j As Integer
  On Error Resume Next
  If GroupCount = 0 And TotalCount = 0 Then
    Exit Sub
  End If
  If MainTotal = -1 And lev = 0 Then
    Exit Sub
  End If
  For i = GroupCount To lev Step -1
    For j = 1 To TotalCount
      Formulas(i, j) = Formulas(i, j) + Rc(CurRow - Groups(i).Row - 1, 0) + ")"
      R(Groups(i).Row, Fields(Totals(j)).Col).FormulaR1C1 = Formulas(i, j)
    Next j
  Next i
End Sub
Private Function Rc(ByVal Row As Integer, ByVal Col As Integer) As String
  Rc = "R[" + CStr(Row) + "]C[" + CStr(Col) + "]"
End Function

Private Sub FlashTable()
  Dim i As Integer
  Dim Flag As Integer
  If Qd Is Nothing Then
    Exit Sub
  End If
  OpenRecordset
  If Rs.EOF Then
    Rs.Close
    Exit Sub
  End If
  If StartTblRow > 0 Then
    CurRow = StartTblRow
    sRow = CurRow
  Else
    sRow = CurRow - 1
  End If
  TblRow = 1
  LoadFieldValues
  InitGroups 0
  While Not Rs.EOF
    LoadFieldValues
    Flag = True
    i = 1
    While Flag And (i <= GroupCount)
      ' группы одинаковые, если значение полей совпадают или Null
      If Groups(i).Value = Fields(Groups(i).N).Value Or (IsNull(Groups(i).Value) And IsNull(Fields(Groups(i).N).Value)) Then
        i = i + 1
      Else
        Flag = False
      End If
    Wend
    CloseGroups i
    InitGroups i
    FlashFields
    Rs.MoveNext
    TblRow = TblRow + 1
  Wend
  CloseGroups -MainTotal
  eRow = CurRow - 1
  sCol = 1
  eCol = Fields(FieldCount).Col
  Rs.Close
  R.Range(R(sRow, sCol), R(eRow, eCol)).Borders.LineStyle = xlContinuous
  R.Range(R(sRow, sCol), R(eRow, eCol)).Borders.Weight = xlThin
End Sub

Public Sub MakeXReport(Optional ByVal NewSheet As Integer = False)
  If NewSheet = False Then
    InitXlObjects
  ElseIf AddXlSheet() = False Then
    InitXlObjects
  End If
  FlashHeaders
  FlashTableHeaders
  FlashTable
  xlWs.Outline.ShowLevels 2
  xl.Visible = True
End Sub

Public Sub SaveColWidth()
  Dim Rs As DAO.Recordset
  Dim i As Integer
  On Error GoTo errcwEnd
  For i = 1 To FieldCount
    Fields(i).Width = 0 ' R.Columns(Fields(i).Col).ColumnWidth
  Next i
  PageSetup.LeftMargin = xlWs.PageSetup.LeftMargin
  PageSetup.RightMargin = xlWs.PageSetup.RightMargin
  PageSetup.TopMargin = xlWs.PageSetup.TopMargin
  PageSetup.BottomMargin = xlWs.PageSetup.BottomMargin
  PageSetup.HeaderMargin = xlWs.PageSetup.HeaderMargin
  PageSetup.FooterMargin = xlWs.PageSetup.FooterMargin
  PageSetup.Orientation = xlWs.PageSetup.Orientation
  PageSetup.Init = True
  Set Rs = CurrentDb.OpenRecordset("Select * from [" + FieldTblName + "] Where [Отчет]=" + CStr(Ind) + " order by [Столбец];", dbOpenDynaset, dbSeeChanges)
  For i = 1 To FieldCount
    Rs.Edit
    Rs![Ширина] = Fields(i).Width
    Rs.Update
    Rs.MoveNext
  Next i
  Rs.Close
  Set Rs = CurrentDb.OpenRecordset("Select * from [" + ReportTblName + "] Where [Индекс]=" + CStr(Ind), dbOpenDynaset, dbSeeChanges)
  Rs.Edit
  Rs!LeftMargin = PageSetup.LeftMargin
  Rs!RightMargin = PageSetup.RightMargin
  Rs!TopMargin = PageSetup.TopMargin
  Rs!BottomMargin = PageSetup.BottomMargin
  Rs!HeaderMargin = PageSetup.HeaderMargin
  Rs!FooterMargin = PageSetup.FooterMargin
  Rs!Orientation = PageSetup.Orientation
  Rs.Update
  Rs.Close
errcwEnd:
End Sub
Sub DetectExcel() ' откуда-то слямзил фирменный код - якобы позволяет не глючить каким-то версиям Excel (корректно отрабатывать GetObject)
' Procedure dectects a running Excel and registers it.
    Const WM_USER = 1024
    Dim hwnd As Long
' If Excel is running this API call returns its handle.
    hwnd = FindWindow("XLMAIN", 0)
    If hwnd = 0 Then    ' 0 means Excel not running.
        Exit Sub
    Else
    ' Excel is running so use the SendMessage API
    ' function to enter it in the Running Object Table.
        SendMessage hwnd, WM_USER + 18, 0, 0
    End If
End Sub

Public Property Let CellVal(ByVal Row As Integer, ByVal Col As Integer, CellValue As Variant)
  R(Row, Col).Value = CellValue
End Property

Public Property Get CellVal(ByVal Row As Integer, ByVal Col As Integer) As Variant
  CellVal = R(Row, Col).Value
End Property

http://www.sql.ru/forum/1265714/vygruzka-v-excel-pomogite-razobratsya-s-chuzhim-kodom


Выборочное суммирование строк одного поля

Вторник, 11 Июля 2017 г. 23:05 + в цитатник
Здравствуйте!
Наверняка такая тема была, поэтому прошу сориентировать.
Имеется таблица с полями Дата; Пробег; Показание спидометра;
Необходимо чтобы пробег сегодняшней даты суммировался с пробегом предыдущих дат, в итоге получалось бы показание спидометра на конкретную дату.
В Excell это не проблема, т.к. можно задать формулу В1=А1; В2=В1+А2; В3=В2+А3 и т.д., Где А - пробег в конкретную дату, а В - показание спидометра в эту дату.
Друзья, подскажите куда говорить надо?

http://www.sql.ru/forum/1265670/vyborochnoe-summirovanie-strok-odnogo-polya


Конец подчинённого отчёта не отображается

Вторник, 11 Июля 2017 г. 20:47 + в цитатник
Здравствуйте, Товарищи!
Есть отчёт состоящий из порядка 30 подчинённых. Большой и тугой.
Структура выглядит как на картинке
При открытии, в событии Report_Open открывается форма, в которой можно выбрать, какие отчёты отобразить
По результатам которой, выбранным контролам присвоится SourceObject, а лишние будут скрыты (Объект источник по-умолчанию пустой)
+ код отображения
            For Each CTRL In Me.Controls
                If CTRL.ControlType = acSubform Then
                    RS.MoveFirst
                    RS.Find "ReportName = '" & CTRL.Name & "'"
                    If Not RS.EOF Then
                        CTRL.visible = True
                        CTRL.SourceObject = CTRL.Name
                    Else
                        CTRL.visible = False
                    End If
                End If
            Next CTRL
Это отчёт для сотрудников. В нём есть группировка.
То есть, вначале идёт ФИО сотрудника, потом куча отчётов, а потом следующий сотрудник, с новой страницы.
Проблема в том, что последний подчинённый отчёт не переходит на новую страницу.
То есть: ФИО (заголовок группы), потом идут отчёты (область данных), потом разделитель страниц (примечание раздела)
У последнего отчёта должен быть переход: начало на одной, а конец на следующей странице. Но конца нет (!!!) Просто начинается новый раздел...

Я понимаю, что хрен его знает почему так и причина может быть в чём угодно, но, может быть, хоть кто-нибудь сталкивался или может направление подсказать. По симптомам

http://www.sql.ru/forum/1265660/konec-podchinyonnogo-otchyota-ne-otobrazhaetsya


Евклидово расстояние_ рассчёт

Вторник, 11 Июля 2017 г. 17:15 + в цитатник
Уважаемые форумчане!
Возникла необходимость написание программы по созданию запроса по расчёту Евклидового расстояния.

Условие: Есть некий запрос, так называемый, матрица значений. Он имеет стандартное количество столбцов (15), но может иметь разное количество строк (от 2 до 200).

Необходимо: Рассчитать матрицу расстояний по Евклиду. Для лучшего понимания, прикреплю файл EXCELL.
Как Вы видите из файла, в результате расчёта, матрица значений преобразуется в вид (кол-во строк Х кол-во строк). То есть если в запросе (матрица значений) будет к примеру 3 строки, то матрица расстояний будет иметь вид (3 х 3). Кроме того, диагональ матрицы будет равна 0.

Большая просьба, помогите либо в написании программы по расчёту, либо в построении запроса (-ов) для вычисления этой задачи. Навыков программирования практически нет.

http://www.sql.ru/forum/1265635/evklidovo-rasstoyanie-rasschyot


createcontrol

Вторник, 11 Июля 2017 г. 12:33 + в цитатник
не работает из процедуры :
Sub cadd()
Dim lnc As Control, tp As Integer, wh As Integer, ll As Integer, lp As Integer, nf As Integer


DoCmd.OpenForm "fmap", acDesign, , , acFormEdit , acHidden

set lnc = CreateControl("fmap", acLine, acDetail, , , 100, 100, 100, 100)

ошибка 29054 : не может добавить,переименовать или убрать элемент.


что это ?

http://www.sql.ru/forum/1265584/createcontrol


AutoFit

Понедельник, 10 Июля 2017 г. 10:21 + в цитатник
Доброго времени суток всем!

Подскажите пожалуйста, как можно применить AutoFit при открытии файла Excel?

Файл Excel создаю из Access таким способом:
Private Sub knExpExcel_Click()
On Error GoTo Err_knExpExcel_Click

Dim obj As Object

On Error Resume Next
Kill ("D:\Base_dolgi\РеестрОплаты.xls")

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "zExpExcel2", "D:\Base_dolgi\РеестрОплаты.xls", True

Set obj = GetObject("D:\Base_dolgi\РеестрОплаты.xls")

With obj

.Application.Visible = True
.Parent.Windows(1).Visible = True
.Columns(2).Autofit  ' тут пытаюсь применить AutoFit
.Columns("A:D").EntireColumn.Autofit  ' и тут другим макаром пытаюсь применить Autofit

End With

Set obj = Nothing

Exit_knExpExcel_Click:
    Exit Sub

Err_knExpExcel_Click:
    MsgBox Err.Description
    Resume Exit_knExpExcel_Click
    
End Sub

Уже второй день форум штудирую, но что-то никак не хватает понимания, как это сделать. Никак не получается ширину столбцов увеличить автоматически (массу способов попробовал).

Вот так получается (модуль готовый взял, кажется на этом форуме, немного подогнал свои нужды):
+
Sub ToExcelFinal_2()
On Error GoTo Err_
Dim xlApp As Object, xlBook As Object, xlSheet As Object
Dim rsd As DAO.Recordset
Dim i As Byte

    Set xlApp = CreateObject("Excel.Application")
   
    xlApp.Visible = True
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets(1)
    
    Set rsd = CurrentDb.OpenRecordset("SELECT tFizlicaReestr.LS AS ЛС, tFizlicaReestr.FIO AS ФИО , tFizlicaReestr.Adres AS Адрес, Null AS Оплата" & _
                                     " FROM tFizlicaReestr INNER JOIN tRabotaReestr ON tFizlicaReestr.LS = tRabotaReestr.LS " & _
                                     " WHERE tRabotaReestr.DataDobavleniaGraf = #" & Format([Forms]![fExpExcel]![pData], "mm\/dd\/yyyy") & "# " & _
                                     " GROUP BY tFizlicaReestr.LS, tFizlicaReestr.FIO, tFizlicaReestr.Adres, Null " & _
                                     " ORDER BY tFizlicaReestr.LS", dbOpenSnapshot)
    For i = 0 To rsd.Fields.Count - 1
        xlSheet.Cells(1, i + 1) = rsd.Fields(i).Name
    Next i
    xlSheet.Range("A2").CopyFromRecordset rsd
    xlSheet.Columns(1).Autofit
    xlSheet.Columns(2).Autofit
    xlSheet.Columns(3).Autofit
    
    rsd.Close
     
    Set rsd = Nothing
    Set xlBook = Nothing
    Set xlSheet = Nothing
    Set xlApp = Nothing
        
Exit Sub
Err_:
End Sub

Но тут не знаю, как при установленном Exsel 2010 (или 2007) автоматически создать файл .xls (Excel 2003).

http://www.sql.ru/forum/1265419/autofit


Расчет потерь на основании базы данных в Access

Понедельник, 10 Июля 2017 г. 09:35 + в цитатник
Добрый день, помогите пжл решить задание, в access полный ноль, а deadline уже близится..
http://zalil.su/8708128 - архив с базой
http://zalil.su/2102724 - файл с описанием условия задачи.

Заранее спасибо!!

http://www.sql.ru/forum/1265414/raschet-poter-na-osnovanii-bazy-dannyh-v-access


Событие при добавлении записи

Воскресенье, 09 Июля 2017 г. 18:09 + в цитатник
Здравствуйте!

Во вложении простой пример базы данных.

Пытаюсь в Access сделать следующее: после того как в таблице "Клиенты" добавили новую строку со значениями в разных колонках - добавлялась новая строка в другую таблицу "События". В эту добавляемую строку в колонках автоматически заполняются следующие значения:

Код клиента Таблица Событие Дата
18КлиентыДобавлена строка [Текущая дата заполнения]

Хочу сделать через VBA как событийная процедура. Не через форму, так как есть приложение, которое обращается в базу данных Access и вставляет туда новые строки.

Запутался как это делать. Подскажите, как правильно написать такой макрос?

http://www.sql.ru/forum/1265389/sobytie-pri-dobavlenii-zapisi



Поиск сообщений в rss_sql_ru_access_programming
Страницы: 353 ... 266 265 [264] 263 262 ..
.. 1 Календарь